吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8527|回复: 7
收起左侧

[PEtools] 关于脱壳后重定位修复 自己写了个半成品工具

[复制链接]
浅唱小男人 发表于 2015-8-4 21:55
xp下不需要重定位,但是Vista之后加入了aslr保护,加大了黑客预测堆栈位置的难度,使得以前exe程序一直不重视的重定位,现在也需要修复。
虽然可以关闭重定位之后再脱壳就没有下面的一些问题了,但一个完美主义心里还是很不爽的。

程序原理:两次不同基址情况下的dump文件,通过对比确定需要重定位的数据,然后添加重定位区块,修复PE文件重定位区块指向,最后将重定位的数据写入重定位区块。


使用的程序为HImiy第一课作业:
脱壳后区段如下:
]365Z9U4]PCB3W]]U$IM[2E.png

重定位数据如下:
UURH84)5G0A393F97MZ7}}1.png

修复后信息如下:

R0}MDG$WI)UTE5ZWVLVI9FU.png

K3~$P5}]ZPL%RLFV51JJ1R9.png

发现修复后的重定位信息多了很多,并且程序也不能运行


确认重定位信息的思路是:直接寻址的数据都需要重定位,然后采用收集的重定位汇编语句+反汇编引擎双向确认

需要重定位的汇编语句如下,可能不全:

[Asm] 纯文本查看 复制代码
[/align]
[align=left]BYTE actionCode[][2] = {
	/*------------EAX------------------------------*/
	{ 0x2B, 0x05 },//sub eax,dword ptr ds:[0x3107B0]
	{ 0x29, 0x05 },//sub dword ptr ds:[0x3107B0],eax
	{ 0x2A, 0x05 },//sub al,byte ptr ds:[0x3107B0]
	{ 0x28, 0x05 },//sub byte ptr ds:[0x3107B0],al
	{ 0x03, 0x05 },//add eax,dword ptr ds:[0x3107B0]
	{ 0x01, 0x05 },//add dword ptr ds:[0x3107B0],eax
	{ 0x02, 0x05 },//add al,byte ptr ds:[0x3107B0]
	{ 0x00, 0x05 },//add byte ptr ds:[0x3107B0],al
	{ 0x39, 0x05 },// cmp dword ptr ds:[0x3107B0],eax 
	{ 0x38, 0x05 },//cmp byte ptr ds:[0x3107B0],al
	{ 0x3B, 0x05 },//cmp eax,dword ptr ds:[0x3107B0]
	{ 0x3A, 0x05 },//cmp al,byte ptr ds:[0x3107B0]
	/*-----------------EDI------------------------*/
	{ 0x8B, 0x3D },//mov edi, dword ptr ds : [0x302420];
	{ 0x89, 0x3D },//mov dword ptr ds : [0x302420], edi
	{ 0x03, 0x3D },//add edi, dword ptr ds : [0x302420];
	{ 0x01, 0x3D },//add dword ptr ds : [0x302420], edi
	{ 0x2B, 0x3D },//sub edi, dword ptr ds : [0x302420];
	{ 0x29, 0x3D },//sub dword ptr ds : [0x302420], edi
	{ 0x39, 0x3D },//cmp dword ptr ds : [0x30F008], edi
	{ 0x3B, 0x3D },//cmp edi, dword ptr ds : [0x30F008]
	/*--------------------EBX-------------------------*/
	{ 0x8B, 0x1D },//002D1248    8B1D 20243000   mov ebx, dword ptr ds : [0x302420];
	{ 0x89, 0x1D },//002F3A62    891D 70563100   mov dword ptr ds : [0x315670], ebx
	{ 0x03, 0x1D },//00177FA8    031D 20243000   add ebx, dword ptr ds : [0x302420]
	{ 0x01, 0x1D },//00177FA8    011D 20243000   add dword ptr ds : [0x302420], ebx
	{ 0x2B, 0x1D },//002D1248    2B1D 20243000   sub ebx, dword ptr ds : [0x302420];
	{ 0x29, 0x1D },//00177FA8    291D 20243000   sub dword ptr ds : [0x302420], ebx
	{ 0x39, 0x1D },//002D15B3    391D 08F03000   cmp dword ptr ds : [0x30F008], ebx
	{ 0x3B, 0x1D },//00177FA8    3B1D 08F03000   cmp ebx, dword ptr ds : [0x30F008]
	/*----------------------ECX-------------------------*/
	{ 0x8B, 0x0D },//002D1248    8B0D 20243000   mov ecx,dword ptr ds:[0x302420]          ; 
	{ 0x89, 0x0D },//002F3A62    890D 00F03000   mov dword ptr ds:[0x30F000],ecx
	{ 0x03, 0x0D },//00177FA8    030D 20243000   add ecx,dword ptr ds:[0x302420]
	{ 0x01, 0x0D },//00177FA8    010D 20243000   add dword ptr ds:[0x302420],ecx
	{ 0x2B, 0x0D },//002D1248    2B0D 20243000   sub ecx,dword ptr ds:[0x302420]  
	{ 0x29, 0x0D },//00177FA8    290D 20243000   sub dword ptr ds:[0x302420],ecx
	{ 0x39, 0x0D },//002D15B3    390D 08F03000   cmp dword ptr ds:[0x30F008],ecx
	{ 0x3B, 0x0D },//00177FA8    3B0D 08F03000   cmp ecx,dword ptr ds:[0x30F008]
	/*---------------------EDX-------------------------*/
	{ 0x8B, 0x15 },//002D1248    8B15 20243000   mov edx,dword ptr ds:[0x302420]          ; 
	{ 0x89, 0x15 },//002F3A62    8915 00F03000   mov dword ptr ds:[0x30F000],edx
	{ 0x03, 0x15 },//00177FA8    0315 20243000   add edx,dword ptr ds:[0x302420]
	{ 0x01, 0x15 },//00177FA8    0115 20243000   add dword ptr ds:[0x302420],edx
	{ 0x2B, 0x15 },//002D1248    2B15 20243000   sub edx,dword ptr ds:[0x302420]  
	{ 0x29, 0x15 },//00177FA8    2915 20243000   sub dword ptr ds:[0x302420],edx
	{ 0x39, 0x15 },//002D15B3    3915 08F03000   cmp dword ptr ds:[0x30F008],edx
	{ 0x3B, 0x15 },//00177FA8    3B15 08F03000   cmp edx,dword ptr ds:[0x30F008]
	/*---------------------ESI-------------------------*/
	{ 0x8B, 0x35 },//002D1248    8B35 20243000   mov esi,dword ptr ds:[0x302420]          ; 
	{ 0x89, 0x35 },//002F3A62    8935 00F03000   mov dword ptr ds:[0x30F000],esi
	{ 0x03, 0x35 },//00177FA8    0335 20243000   add esi,dword ptr ds:[0x302420]
	{ 0x01, 0x35 },//00177FA8    0135 20243000   add dword ptr ds:[0x302420],esi
	{ 0x2B, 0x35 },//002D1248    2B35 20243000   sub esi,dword ptr ds:[0x302420]  
	{ 0x29, 0x35 },//00177FA8    2935 20243000   sub dword ptr ds:[0x302420],esi
	{ 0x39, 0x35 },//002D15B3    3935 08F03000   cmp dword ptr ds:[0x30F008],esi
	{ 0x3B, 0x35 },//00177FA8    3B35 08F03000   cmp esi,dword ptr ds:[0x30F008]
	/*-----------------------赋值立即数--------------------------------*/
	{ 0xC7, 0x05 },//003016B1    C705 B0453100 9C7C3000   mov dword ptr ds : [0x3145B0], 00307C9C
	{ 0xC6, 0x35 },//00177FAE    C605 B0453100 30   mov byte ptr ds : [0x3145B0], 0x30
	{ 0x83, 0x25 },//003016FE    8325 D41A3100 00   and dword ptr ds : [0x311AD4], 0x0
	{ 0x83, 0x0D },//00177FAE    830D D41A3100 00   or dword ptr ds : [0x311AD4], 0x0
	{ 0x83, 0x35 },//00177FAE    8335 D41A3100 00   xor dword ptr ds : [0x311AD4], 0x0
	{ 0x80, 0x25 },//00177FB4    8025 D41A3100 00   and byte ptr ds : [0x311AD4], 0x0
	{ 0x80, 0x0D },//00177FAE    800D D41A3100 00   or byte ptr ds : [0x311AD4], 0x0
	{ 0x80, 0x35 },//00177FAE    8035 D41A3100 00   xor byte ptr ds : [0x311AD4], 0x0
	/*------------------------------直接乘除加减----------------------------*/
	{ 0xF7, 0x25 },//00177FB4    F725 B0073100   mul dword ptr ds : [0x3107B0]
	{ 0xF7, 0x2D },//00177FB4    F72D B0073100   imul dword ptr ds : [0x3107B0]
	{ 0xFF, 0x0D },//00177FB4    FF0D B0073100   dec dword ptr ds : [0x3107B0]
	{ 0xFF, 0x05 },//00177FB4    FF05 B0073100   inc dword ptr ds : [0x3107B0]
	{ 0xF7, 0x35 },//00177FB4    F735 B0073100   div dword ptr ds : [0x3107B0]
	{ 0xF7, 0x3D },//00177FB4    F73D B0073100   idiv dword ptr ds : [0x3107B0]
	/*----------------------------跳转和压栈出栈----------------------------*/
	{ 0xFF, 0x15 },//002D1077    FF15 28203000   call dword ptr ds : [0x302028];
	{ 0xFF, 0x25 },//002D1744 - FF25 70243000   jmp dword ptr ds : [0x302470]
	{ 0xFF, 0x35 },//002F35E5    FF35 2C3F3100   push dword ptr ds : [0x313F2C]
	{ 0x8F, 0x05 }//002F35E5    8F05 2C3F3100   pop dword ptr ds : [0x313F2C]
};


(动作代码之后便是需要重定位地址)

    通过比较找到不同的位置后,向前查找有没有类似于“2B05”这类动作代码,找到后,便确定是一个需要重定位的地址,记录它在文件中的偏移。有的时候查找到的重定位地址中包含上面的动作代码,

这样就会对重定位地址判断出错,所以才借用了一个反汇编引擎重复确认一下。



   详细的东西还是看代码吧,代码有点渣,不过都有注释。

RelocFix.zip (186.03 KB, 下载次数: 196)





附件为自己写的程序代码,其中Disasm.cpp  Disasm.h   Dsasm_Functions.cpp 为反汇编引擎代码(从网上找的)

关于重定位的知识,请朋友们不吝赐教,也好让我完成这个工具。
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\767809501\QQ\WinTemp\RichOle\UURH84)5G0A393F97MZ7}}1.png

点评

拿着517vpn测试一下能否修复upx重定位问题  发表于 2015-8-6 19:57

免费评分

参与人数 3热心值 +3 收起 理由
神童 + 1 已答复!
雷霆 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
qtfreet00 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

蚯蚓翔龙 发表于 2015-8-4 22:33
这样不是很通用的吧,而且看起来好麻烦。。。Dll脱壳后的重定位能否成功修复过
 楼主| 浅唱小男人 发表于 2015-8-4 23:21
蚯蚓翔龙 发表于 2015-8-4 22:33
这样不是很通用的吧,而且看起来好麻烦。。。Dll脱壳后的重定位能否成功修复过

就是为了通用性才做的这个工具,这个工具的原理也是根据网上流传的大牛作品Relox dll修复工具而来的。
主要是我发现除了代码段需要重定位,重定位表里面还有data,rdata段里的数据,不知道这两个段中的什么需要重定位
720830 发表于 2015-8-5 07:52 来自手机
zhaohanbo 发表于 2015-8-5 12:18
我说我一点都没看懂~~~在这个论坛里是不是很弱智
一抹芬芳 发表于 2015-8-6 13:40
此贴必火,先占位支持了,谢谢分享
Hmily 发表于 2015-8-7 19:17
移动一下,期待楼主完善,现在处理重定位的工具比较少,搞个完善的大有前途。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 11:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表