缠宗老人2.10版软件一种脱壳Dump成功修复的方法

查看 232|回复 6
作者:longlonglong   
工具:52下的OD、Scylla - x64x86、Detect It Easy、LordPE、ReloX;
研究对象:缠宗老人2.10版;
来源:网络
理由:和谐过程中的一点心得;
软件类型:dll;
操作系统:winXP
要达到目的:Tdxw.exe公式管理器DLL正常加载
查一下壳。


图片1.png (34.96 KB, 下载次数: 0)
下载附件
2023-2-14 11:54 上传

软件加的是Zprotect(1.X)的壳
OD加载软件,F9,等软件完全解密后,查入口特征,查到:
[Asm] 纯文本查看 复制代码109A4508    8BFF            mov edi,edi                              ; //Real OEP
109A450A    55              push ebp
109A450B    8BEC            mov ebp,esp
109A450D    837D 0C 01      cmp dword ptr ss:[ebp+0xC],0x1
109A4511    75 05           jnz short 109A4518                       ; 缠宗老人.109A4518
109A4513    E8 E6040000     call 109A49FE                            ; 缠宗老人.109A49FE
109A4518    FF75 08         push dword ptr ss:[ebp+0x8]              ; 缠宗老人.
109A451B    8B4D 10         mov ecx,dword ptr ss:[ebp+0x10]
109A451E    8B55 0C         mov edx,dword ptr ss:[ebp+0xC]           ; 缠宗老人.109A0000
109A4521    E8 CCFEFFFF     call 109A43F2                            ; 缠宗老人.109A43F2
109A4526    59              pop ecx                                  ; ntdll.7C92118A
109A4527    5D              pop ebp                                  ; ntdll.7C92118A
109A4528    C2 0C00         retn 0xC
Microsoft Visual C/C++(2008-2010)的入口特征。
OD重新加载软件,偏移00004508下断点,F9,断下来,查看一下:
[Asm] 纯文本查看 复制代码109A4513    E8 E6040000     call 109A49FE                            ; 缠宗老人.109A49FE
109A4521    E8 CCFEFFFF     call 109A43F2                            ; 缠宗老人.109A43F2
这2个call第2个call有点特别:
[Asm] 纯文本查看 复制代码109A43F2    6A 10           push 0x10
109A43F4    68 48539A10     push 0x109A5348
109A43F9    E8 82050000     call 109A4980                            ; 缠宗老人.109A4980
109A43FE    8BF9            mov edi,ecx
109A4400    8BF2            mov esi,edx
109A4402    8B5D 08         mov ebx,dword ptr ss:[ebp+0x8]           ; 缠宗老人.
109A4405    33C0            xor eax,eax
109A4407    40              inc eax
109A4408    8945 E4         mov dword ptr ss:[ebp-0x1C],eax
109A440B    33C9            xor ecx,ecx
109A440D    894D FC         mov dword ptr ss:[ebp-0x4],ecx
109A4410    8935 20609A10   mov dword ptr ds:[0x109A6020],esi
109A4416    8945 FC         mov dword ptr ss:[ebp-0x4],eax
109A4419    3BF1            cmp esi,ecx
进入109A43F9    E8 82050000     call 109A4980                            ; 缠宗老人.109A4980
109A4980  - E9 96BF780A     jmp 1B13091B
109A4985    FA              cli
109A4986    C745 FC 0000000>mov dword ptr ss:[ebp-0x4],0x0
109A498D    C3              retn
109A4980  - E9 96BF780A     jmp 1B13091B;
可执行模块, 条目 36
基址=109A0000
大小=00060000 (393216.)
入口=109AA301 缠宗老人.
名称=缠宗老人
路径=E:\NewTdxVip2020\T0002\dlls\缠宗老人2.10版.dll
找到jmp地址所在的内存映射段
地址=1B130000
大小=00001000 (4096.)将程序从内存中Dump出来,包括1B130000段,得到文件:缠宗老人2.10版_dump_SCY.dll
OD换基址加载软件,重复上面的步骤,得到第2个Dump出来的文件:缠宗老人2.10版_dump1_SCY.dll
修改2个文件的区段表,


图片3.png (34.91 KB, 下载次数: 0)
下载附件
2023-2-14 11:18 上传

修复:


图片4.png (22.55 KB, 下载次数: 0)
下载附件
2023-2-14 12:04 上传

运行Tdxw.exe,用公式管理器加载脱壳的DLL:


图片5.png (72.42 KB, 下载次数: 0)
下载附件
2023-2-13 10:04 上传

DLL加载失败,根据经验,可能前面jmp地址所在内存映射段与程序在内存的映射不连续,jmp地址这一段大小为1000的内存是程序动态分配的,我的思路是在OD加载程序后,在程序内存映射结束处预先分配4000大小内存:


图片6.png (40.23 KB, 下载次数: 0)
下载附件
2023-2-13 10:07 上传

F9,删除前面分配的大小为4000的内存,程序运行到Real OEP处自动在程序内存后面连续分配了1000大小的内存,这段内存正是jmp地址所在的内存段:


图片7.png (37.24 KB, 下载次数: 0)
下载附件
2023-2-13 10:12 上传

重复前面的脱壳步骤,得到2个文件,修改2个文件的区段表:


图片8.png (25.83 KB, 下载次数: 0)
下载附件
2023-2-14 11:33 上传

修复:


图片9.png (23.07 KB, 下载次数: 0)
下载附件
2023-2-14 12:04 上传

数值比前面的多。用公式管理器加载脱壳的DLL:


图片10.png (72.39 KB, 下载次数: 0)
下载附件
2023-2-14 11:54 上传

DLL加载成功。

宋体, 老人

yuanliu056   

牛人!可以发直接能用的吗
乖胖Orz   

牛人,,,,,,,,,,
QT2008   

学到了!!!
XINJIAN9   

太牛了,佩服
Mancoek   

我只想说老人家实盘的水平也一般,可能精力都用在搞这些计算机上了
zhaozhaozhao   

看不懂,但觉得很厉害,加油
您需要登录后才可以回帖 登录 | 立即注册

返回顶部