180320 逆向-代码的二次开发(2)手工构造区块

1625-5 王子昂 总结《2018年3月20日》 【连续第535天总结】
A. 代码的二次开发(2)
B.

手工构造区块

区块间隙的空间大小是有限的,如果所需代码不多,那么上述方法方便快捷。但是如果需要添加的代码比较多的话,区块间隙就不够用了。此时必须手动添加区块。

手工构造区块必须熟悉PE格式,实际操作时一般可用工具辅助。
主要有3个工作要做:
1. 增加块头
2. 增加块头指向的数据段
3. 调整文件头中的映像尺寸

构造区块时,必须注意区块的对齐。如果不对齐,在某些系统下可能会报错。

  1. 修正块表
    块表在PE文件头之后,由一系列的IMAGE_SECTION_HEADER结构组成
    每个结构体描述一个块,结构体的顺序与块在文件中的顺序是相同的
    块表以一个空的结构体作为结束标志

想要添加一个新的区段,就需要添加一个块头
将其中的属性按需填写完成即可
注意块对齐的问题
2. 增加数据段
有了区块头,还需要为区块添加内容
在文件尾部插入0x1000h大小的数据块即可
3. 修正映像文件尺寸
因为扩大了文件的尺寸,所以必须修正SizeOfImage的值,在PE文件头中将其增加0x1000h即可

工具辅助构造区块

实际增加区块时,因为较为繁琐,所以一般使用工具来快速完成
使用LordPE打开文件,在区块的列表上,执行右键菜单中的add section header功能就可增加一个区块。勾选’autofix SizeOfImage’就可以自动修正映像尺寸的值了。不过数据段的内容还是需要自己添加

而CFF Explorer就更完善一些,可以自动增加对应的数据段

注意事项

一般软件PE头的区块表后是一段全0的空间(用以将后边的区块对齐),因此新增区块不会破坏文件
但有时也会发生区块表正好填充完对齐单位的情况,或者后面放着一些其他东西。此时就不太方便添加区块头了。
理论上来说,修正后面的偏移应该也可以,不过这工程量就有些大了233

C. 明日计划
获得函数的调用

猜你喜欢

转载自blog.csdn.net/whklhhhh/article/details/79898868