前言:
早在2000年10月就脱过用tElock 0.98加壳的NotePad,并好像在看雪论坛写过脱壳简要。
最近有网友问tElock 0.98加壳的DLL脱壳问题。整理出一篇文章,希望对你有帮助。
Liotta[BCG]
目标:
超星浏览器3.6.0.1210所带的pdg2.dll(先用upx -d解压,然后用tElock 0.98加壳)
scouting... E:\Program Files\SSREADER36\pdg2.dll - 256000 bytes big
Entry Point:0007EBD6(offset0003DBD6)E9 25 E4 FF FF 00 00 00
Image Base:10000000Base of Code:00001000
Base of Date:0005A000Size of Image:00080000
Number of Sections:0006
工具:
SoftICE+ICEDump
PEditor+WinHex
正文:
一,如何中断在pdg2.dll文件领空?以下是一些准备工作:
用 PEditor打开pdg2.dll文件,然后单击 FLC,输入Entry Point:0007EBD6得到Offset[hex]为 3DBD6。
然后,用WinHex打开pdg2.dll文件,定位到Offset3DBD6,记下此处字节的原值E9并改为CC,再Ctrl-D中
断进入SoftICE,设断点 bpint 3。
二,开始跟踪。
如何对付tElock保护的反跟踪代码就不说了,请参照以前的相关文章《Flashfxp 1.4脱壳》。
运行SSReader.EXE并中断在pdg2.dll领空,改1007EBD6处字节为原值E9再继续。
017F:1007EBD6 CC
INT 3首先中断在这里,改CC为原来的E9
……
:u eip l 09
017F:1007EBD6 E925E4FFFF JMP
1007D000
017F:1007EBDB 0000 ADD
[EAX],AL
017F:1007EBDD 0008 ADD
[EAX],CL
……
消除断点bpint 3
再BPX GetModuleHandleA
为何要用这个函数中断呢?因为用tElock 0.98加壳后的文件只有这一个输入函数,用PEditor看看就知!
函数GetModuleHandleA中断,按F12返回。
:u 1007e210 l eip - 1007e210
017F:1007E210 8B9562D34000 MOV
EDX,[EBP+0040D362]
017F:1007E216 8BB552D34000 MOV
ESI,[EBP+0040D352]
017F:1007E21C 85F6 TEST
ESI,ESI
<--首次调用时的ESI就是Import Tabler的RVA,记下该值0005D720。
017F:1007E21E 0F8406040000 JZ
1007E62A
017F:1007E224 03F2 ADD
ESI,EDX
<-- EDX的值就是Image Base
017F:1007E226 83A552D4400000 AND
DWORD PTR [EBP+0040D452],00
017F:1007E22D 8B460C MOV
EAX,[ESI+0C]
017F:1007E230 83660C00 AND
DWORD PTR [ESI+0C],00
<--开始把Name清00,要DUMP出有效的文件就要想想办法。
017F:1007E234 85C0 TEST
EAX,EAX
017F:1007E236 0F84EE030000 JZ
1007E62A
017F:1007E23C 03C2 ADD
EAX,EDX
017F:1007E23E 8BD8 MOV
EBX,EAX
017F:1007E240 50
PUSH EAX
017F:1007E241 FF95D0D24000 CALL
[EBP+0040D2D0]
:u eip l 1007e270-eip
017F:1007E247 85C0 TEST
EAX,EAX
<--GetModuleHandleA中断,按F12返回到此处。
017F:1007E249 0F85BA000000 JNZ
1007E309
017F:1007E24F 53
PUSH EBX
017F:1007E250 FF95E4BA4000 CALL
[EBP+0040BAE4]
017F:1007E256 85C0 TEST
EAX,EAX
017F:1007E258 0F85AB000000 JNZ
1007E309
017F:1007E25E 8B9562D34000 MOV
EDX,[EBP+0040D362]
017F:1007E264 01952AD34000 ADD
[EBP+0040D32A],EDX
017F:1007E26A 019536D34000 ADD
[EBP+0040D336],EDX
……
017F:1007E6C6 MOV EDI,[EBP+0040D362]
017F:1007E6CC ADD EDI,[EDI+3C]
017F:1007E6CF OR [EDI+06],SP<--此处改了Number
of Sections的值
017F:1007E6D3 SHR ESI,00
017F:1007E6D6 CLC
……
然后用/tracex 10000000 eip-8指令追踪到pdg2.dll的 OEP为100330E4
:u eip l 100330f7 - eip
017F:100330E4 55
PUSH EBP
017F:100330E5 8BEC MOV
EBP,ESP
017F:100330E7 53
PUSH EBX
……
三,如何DUMP出pdg2.dll文件呢?经过以上追踪应该很清楚了!
中断在DLL文件入口点,改CC为原来的E9
bpx readfile(主要是用以跳过反跟踪代码,直接G 1007E21E不行)
F5
中断按F12返回
BD *
G 1007E21E
R FL Z
G 1007E6CF
跳过NumberOfSections的修改
G 100330E4
/dump 10000000 00080000 C:\pdg2.dll
然后挂起并杀掉SSReader.EXE这个进程。
用PEditor打开Dump文件,dumpfixer(RS=VS & RO=VO)
再修改Entry Point的值为000330E4、Import Tabler的RVA的值为0005D720
可不要忘了把修复好的pdg2.dll复制到超星浏览器主目录中测试哦。
OK!
- 标 题:tElock 0.98加壳的DLL脱壳
- 作 者:liotta
- 时 间:2002/01/21 00:28am