1、这些表是编译器生成的,里面存储了非常重要的信息。
2、在程序启动的时候,系统会根据这些表做初始化的工作:比如,将用到的DLL中的函数地址存储到IAT表中.
3、为了保护程序,可以对.exe的二进制代码进行加密操作,但问题是:各种表的信息与客户字节的代码和数据都混在一起了,如果进行加密,那系统在初始化的时候会出问题!
总结:学会移动各种表,是对程序加密/破解的基础.
移动导出表原理

1,新增一个节(FileBuffer),用于储存导出表数据。
2,移动导出函数地址表,移动大小为导出函数个数(NumberOfFunctions)*4。
3,移动导出函数序号表,移动大小为导出函数名字数(NumberOfNames)*2,。
4,移动导出函数名称表,移动大小为导出函数名字数(NumberOfNames)*4。
5,遍历导出函数名称表,得到每个函数名字的大小依次储存新节表中,储存大小为名字大小+1(‘0’)。
6,使导出函数名称表指向新的名字地址。
7,移动导出表到新节表。
8,让导出表AddressOfFunctions,AddressOfNames,AddressOfNameOrdinals指向新移动地址表,名字表,序号表。
9,数据目录项地址指向新的导出表。
原理
移动重定位表

1,新增一个节(FileBuffer),用于储存重定位表数据。
2,遍历SizeOfBlock得到重定位表大小。
3,移动重定位表到新建的节
4,修改数据目录项地址指向新的重定位表
原理

最后修改:2020 年 09 月 15 日
如果觉得我的文章对你有用,请随意赞赏