admin 发表于 2018-3-4 14:29:45

tElock 0.98加壳的DLL脱壳餐口

工具:
SoftICE+ICEDump
PEditor+WinHex

正文:

一,如何中断在pdg2.dll文件领空?以下是一些准备工作:
用 PEditor打开pdg2.dll文件,然后单击 FLC,输入Entry Point:0007EBD6得到Offset为 3DBD6。
然后,用WinHex打开pdg2.dll文件,定位到Offset3DBD6,记下此处字节的原值E9并改为CC,再Ctrl-D中
断进入SoftICE,设断点 bpint 3。

二,开始跟踪。
如何对付tElock保护的反跟踪代码就不说了,请参照以前的相关文章《Flashfxp 1.4脱壳》。
运行SSReader.EXE并中断在pdg2.dll领空,改1007EBD6处字节为原值E9再继续。

017F:1007EBD6CC                  INT       3首先中断在这里,改CC为原来的E9
……
:u eip l 09
017F:1007EBD6E925E4FFFF          JMP       1007D000
017F:1007EBDB0000                ADD       ,AL
017F:1007EBDD0008                ADD       ,CL
……
消除断点bpint 3
再BPX GetModuleHandleA
为何要用这个函数中断呢?因为用tElock 0.98加壳后的文件只有这一个输入函数,用PEditor看看就知!
函数GetModuleHandleA中断,按F12返回。

:u 1007e210 l eip - 1007e210
017F:1007E2108B9562D34000      MOV       EDX,
017F:1007E2168BB552D34000      MOV       ESI,
017F:1007E21C85F6                TEST      ESI,ESI
<--首次调用时的ESI就是Import Tabler的RVA,记下该值0005D720。

017F:1007E21E0F8406040000      JZ      1007E62A
017F:1007E22403F2                ADD       ESI,EDX
<-- EDX的值就是Image Base

017F:1007E22683A552D4400000      AND       DWORD PTR ,00
017F:1007E22D8B460C            MOV       EAX,
017F:1007E23083660C00            AND       DWORD PTR ,00
<--开始把Name清00,要DUMP出有效的文件就要想想办法。

017F:1007E23485C0                TEST      EAX,EAX
017F:1007E2360F84EE030000      JZ      1007E62A
017F:1007E23C03C2                ADD       EAX,EDX
017F:1007E23E8BD8                MOV       EBX,EAX
017F:1007E24050                  PUSH      EAX
017F:1007E241FF95D0D24000      CALL      

:u eip l 1007e270-eip
017F:1007E24785C0                TEST      EAX,EAX
<--GetModuleHandleA中断,按F12返回到此处。

017F:1007E2490F85BA000000      JNZ       1007E309
017F:1007E24F53                  PUSH      EBX
017F:1007E250FF95E4BA4000      CALL      
017F:1007E25685C0                TEST      EAX,EAX
017F:1007E2580F85AB000000      JNZ       1007E309
017F:1007E25E8B9562D34000      MOV       EDX,
017F:1007E26401952AD34000      ADD       ,EDX
017F:1007E26A019536D34000      ADD       ,EDX
……
017F:1007E6C6MOV       EDI,
017F:1007E6CCADD       EDI,
017F:1007E6CFOR      ,SP<--此处改了Number of Sections的值
017F:1007E6D3SHR       ESI,00
017F:1007E6D6CLC
……
然后用/tracex 10000000 eip-8指令追踪到pdg2.dll的 OEP为100330E4

:u eip l 100330f7 - eip
017F:100330E455                  PUSH      EBP
017F:100330E58BEC                MOV       EBP,ESP
017F:100330E753                  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!

页: [1]
查看完整版本: tElock 0.98加壳的DLL脱壳餐口