1625-5 王子昂 总结《2018年3月19日》 【连续第534天总结】
A. 代码的二次开发(1)
B.
前言
这里的二次开发主要指的是在没有源码和接口的情况下扩充可执行文件的功能,目标是二进制的EXE或DLL文件,需要用汇编实现相关功能,或构造一个接口,调用其他语言实现功能。该技术主要是修改扩充PE结构,对PE文件进行DIY,因此又叫PEDIY技术
增加空间
最首要解决的就是新增加的代码放在哪里的问题
有两种方法
- 在区块间隙中添加
- 新增区块
区块间隙
由于PE文件每个区块的大小必定等于磁盘对齐值(FileAlignment)的整数倍,因此造成实际代码空间与对齐空间的间隙
每个区块末尾都有一段空白的、以00填充的内存可用
利用区块间隙时,必须注意区块的属性(Characteristics),它决定了该区块是否可读写。
默认情况下一般只有.data数据段是可写的,而.text代码段则是只读。
在具备可写属性的区段中添加代码,可能会被程序误当作未初始化空间而征用,导致代码被改动进而出错。因此最好在只读属性的区段中改动。
C. 明日计划
手工构造区块