首页
社区
课程
招聘
[PEDIY]改造重定位重建工具ReloX 1.2,让其支持64位程序(7月27日更新修正bug)
发表于: 2024-5-22 12:06 10623

[PEDIY]改造重定位重建工具ReloX 1.2,让其支持64位程序(7月27日更新修正bug)

2024-5-22 12:06
10623

 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
上传的附件:
收藏
免费 6
支持
分享
最新回复 (14)
雪    币: 4795
活跃值: (389622)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以,静等加密与解密第五版。
2024-5-22 12:20
0
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
有个小错误,附件重新修正了下,以现在的为准。
2024-5-22 14:57
0
雪    币: 14806
活跃值: (6043)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
字符串不能替换,应该根据32位和64位分别显示。
2024-5-23 06:49
0
雪    币: 2445
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第五版,能否稍微零基础一些,每个版都有,讲的太深了!
2024-5-23 07:17
0
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
tDasm 字符串不能替换,应该根据32位和64位分别显示。

是根据32位和64位显示的:

004222EA   .  66:813E 0B02              cmp     word ptr [esi], 20B  //IMAGE_OPTIONAL_HEADER->Magic
004222EF   .  74 0D                     je      short 004222FE
004222F1   .  9D                        popfd
004222F2   .  61                        popad
004222F3   .  89B1 C8000000             mov     dword ptr [ecx+C8], esi
004222F9   .^ E9 2812FEFF               jmp     00403526
//处理PE32+,SMC补丁相关代码
004222FE   >  C605 0C714000 0A          mov     byte ptr [40710C], 0A    
00422305   .  C705 74544000 0CB74200    mov     dword ptr [405474], 0042B70C  //00405473  push    0042B70C   ASCII "IMAGE_REL_BASED_DIR64(10)"
0042230F   .  C705 3F624000 0CB74200    mov     dword ptr [40623F], 0042B70C  //0040623E  push    0042B70C   ASCII "IMAGE_REL_BASED_DIR64(10)"
00422319   .  C605 CA494000 A0          mov     byte ptr [4049CA], 0A0


最后于 2024-5-23 09:29 被kanxue编辑 ,原因:
2024-5-23 09:29
0
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
MonKeyDu 第五版,能否稍微零基础一些,每个版都有,讲的太深了!
和之前应该差不多,精减了些内容,页码缩为500-600,可以将书结合论坛精华帖来学习。
2024-5-23 09:32
0
雪    币: 5
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
生成的地址好像有问题,偏移地址差了四个字节!
2024-7-26 15:23
0
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
9
cndml 生成的地址好像有问题,偏移地址差了四个字节!
将附件提供上来看看
2024-7-26 16:15
0
雪    币: 5
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
随便找个64位的dll,跟原版的对照一下就看出来了。好像是32位程序无法对64位地址进行一次性操作,比较的只是基地址的高四位,所以算出的重定位偏移地址均指向高四位,偏移地址均减去4字节就对了。
2024-7-26 18:51
0
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
11
cndml 随便找个64位的dll,跟原版的对照一下就看出来了。好像是32位程序无法对64位地址进行一次性操作,比较的只是基地址的高四位,所以算出的重定位偏移地址均指向高四位,偏移地址均减去4字节就对了。

处理了一下64位ImageBase,功能目前正常了,请重新下载附件,若还有问题欢迎反馈.

也可以不改ImageBase,可以尝试改下这里,这样偏移地址直接可减去4字节
0040582B   .  B8 03000000   mov     eax, 3              //mov eax,7
00405A21   .  B8 03000000   mov     eax, 3             //mov eax,7

最后于 2024-7-27 22:27 被kanxue编辑 ,原因:
2024-7-27 22:27
0
雪    币: 1
活跃值: (598)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
可以直接用TitanEngine来修改重定位表
2024-8-2 18:57
0
雪    币: 15955
活跃值: (3355)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
kanxue 和之前应该差不多,精减了些内容,页码缩为500-600,可以将书结合论坛精华帖来学习。

想不到 第 5 版 已在 路上,
以过往历史 都是 10 年 1 版,
大概 沽 啥时会 上市 ? 过年前 ?
给个建议:
现在 X64 程序 越来越多,可多些 X64 相关章节,
最好能有一个 清单
哪些 好用工具(调试/资源修改/重建资源/压缩/混淆/加壳/脱壳/....) 可用于 X64 程序.
哪些 好用工具(调试/资源修改/重建资源/压缩/混淆/加壳/脱壳/....) 可用于 .Net/Net 程序.
哪些 好用工具(调试/资源修改/重建资源/压缩/混淆/加壳/脱壳/....) 可用于 Android 程序.
不用每个都详说,只要大致简说,
有兴趣的人 自会找来玩玩.

最后于 2024-8-3 09:23 被plusv编辑 ,原因:
2024-8-3 07:43
0
雪    币: 35602
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
都说了。。都没说。。。深入细节没交代。。够厚够广够零散。。需要自已深挖掘找答案。
2024-8-3 10:16
0
雪    币: 4349
活跃值: (4333)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
虽然是 2003 的软件,  点 About 看完依旧很酷.
2024-8-6 20:35
0
游客
登录 | 注册 方可回帖
返回
//