|
发表于 2015-1-25 12:25:57
|
显示全部楼层
本帖最后由 jianliulin 于 2015-1-25 12:32 编辑
ud的文件列表是以一个个保存着文件信息(大小、名称等)结构体排列组成,以下是结构体的声明,
struct fbm_file
{
uchar size; 记录着当前是结构体的大小(含name),当size等于0则表示到了文件列表的结尾。
uchar flag;0:可能是主分区文件,也可能是扩展分区文件。 1:为普通的扩展分区文件。 4:已经映射为mbr的第一个分区。 8:已经映射为mbr的第二个分区。 16:已经映射为mbr第三个分区。 32:已经映射为mbr第四个分区
uchar4 data_start; 文件的起始扇区。
uchar4 data_size; 文件的大小(字节数),不能超过4G
time_t data_time; 文件的修改日期,unixdate 格式
char name[0]; 文件名,原来fbinst.exe 是以ansi编码,目前fbinsttool 是utf-8编码。
} PACK;
ud从第69扇区开始是文件件列表,最大896为个扇区,binsttool 默认也是设置为896个扇区。每个扇区最后2个字节是fbinst内部使用,所以读取文件列表时候要剔除这2个字符。
当文件挂在到mbr时候,flag 会是 4 ,8, 16, 32 这几个数字之一,如果是1则是没有挂载,fbt判断一个文件是否是分区文件的方法是判断文件第一个扇区的第一字符是否是
0xEB 这个跳转符号,最后两个字节是否是0xAA55 ,文件大小是否大于30M。
另外:
要是能在pecmd中添加,通过文件名就能直接把ud中的文件读取到内存里面执行,不需要目前先用fbinst.exe导出到临时目录,再执行。mdyblog老大,你干这事你是天然的人选,
pe可以没有fbinst.exe 但绝对不可能没有pecmd.exe
|
|