-
-
[PEDIY]改造重定位重建工具ReloX 1.2,让其支持64位程序(7月27日更新修正bug)
-
发表于:
2024-5-22 12:06
10623
-
[PEDIY]改造重定位重建工具ReloX 1.2,让其支持64位程序(7月27日更新修正bug)
ReloX v1.0 是ImportREC 作者MackT在2003年写的一款重定表重建工具,其原理是是比较2个不同基址DLL的内存映像,根据不同数据,生成一张重定位表,原版只支持32位的PE文件。最近在准备《加密与解密》第五版中的64位PE文件重定表一块,花点时间将这个工具扩展了一下,让其支持64位的PE文件。
1) - 在“Original”行上使用“...”按钮选择第一个基址映像。
基址会自动生成。如果不正确,请修改它。
2) - 在“Compare to”行上使用“...”按钮选择第二个基址映像。
基址会自动生成。如果不正确,请修改它。
3) - 点击“Select Sections”选择包含代码进行比较的所有部分(默认是全部)。
4) - 点击“Compare”开始两个映像文件的比较。
结果将显示在列表控件中。
5) - 点击“Fix PE Module”选择一个PE文件,并使用新的“.reloc”节修复它。
32位程序和64位程序重定位结构基本一样,区别就在于32位程序重定位类型都是IMAGE_REL_BASED_HIGHLOW(16进制值是3),64位程序的重定位类型都是IMAGE_REL_BASED_DIR64(16进制的值是0xA,十进制是10)。
重定位表结构:
IDA打开ReloX1.exe,搜索字符串“IMAGE_REL_BASED_HIGHLOW”,找到两处调用,改成指向新的字符串“IMAGE_REL_BASED_DIR64”
修改成:
导出的Relocs文本文件,改这里:
对TypeOffset进行处理
改成与 IMAGE_REL_BASED_DIR64(0xA)
经过这样处理,生成的重定位表,就符合PE32+要求了。
32位PE和64位PE32+,其IMAGE_DATA_DIRECTORY偏移不同,这部分代码需要修正,不然生成的文件,重定位表地址是错的。
32位PE文件,IMAGE_DATA_DIRECTORY离IMAGE_OPTIONAL_HEADER距离为0x78-0x18=0x60,64位PE32+文件,这个距离为0x88-0x18=0x70
找到处理32位PE的代码如下
这样修改后,就可以处理64位PE文件了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2024-7-27 22:37
被kanxue编辑
,原因: 更新附件,修正bug