本帖最后由 longlonglong 于 2023-2-15 16:56 编辑
工具:52下的OD、Scylla - x64x86、Detect It Easy、LordPE、ReloX;
研究对象:缠宗老人2.10版;
来源:网络
理由:和谐过程中的一点心得;
软件类型:dll;
操作系统:winXP
要达到目的:Tdxw.exe公式管理器DLL正常加载
查一下壳。
软件加的是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] ; 缠宗老人.<ModuleEntryPoint>
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] ; 缠宗老人.<ModuleEntryPoint>
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 缠宗老人.<ModuleEntryPoint>
名称=缠宗老人
路径=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个文件的区段表,
修复:
运行Tdxw.exe,用公式管理器加载脱壳的DLL:
DLL加载失败,根据经验,可能前面jmp地址所在内存映射段与程序在内存的映射不连续,jmp地址这一段大小为1000的内存是程序动态分配的,我的思路是在OD加载程序后,在程序内存映射结束处预先分配4000大小内存:
F9,删除前面分配的大小为4000的内存,程序运行到Real OEP处自动在程序内存后面连续分配了1000大小的内存,这段内存正是jmp地址所在的内存段:
重复前面的脱壳步骤,得到2个文件,修改2个文件的区段表:
修复:
数值比前面的多。用公式管理器加载脱壳的DLL:
DLL加载成功。
|