邪恶八进制信息安全团队技术讨论组's Archiver

exploit 2005-10-1 08:50

[转载]用Ollydbg手脱tElock V0.98加壳的DLL

信息来源:看雪论坛


目标程序】:tElock加壳的wjtd.dll。附件中含有原程序和脱壳文件      
         
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
      
【调试环境】:Win2000SP4、Ollydbg1.10、LordPE

【实例下载】:61.130.100.251/wjtd.rar

【脱壳过程】:
      
本文参考Fly大侠《用Ollydbg手脱tElock V0.98加壳的DLL》写成!

希望Fly兄多多指点

一、双重Magic Jump:避开重定位和输入表加密
         
         
设置Ollydbg忽略除了“INT3中断”“单步中断”之外的所有其它异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。

代码:--------------------------------------------------------------------------------
00853BD6    E9 25E4FFFF      jmp Wjtd.00852000//进入OD后停在这
00853BD0    0000           add byte ptr ds:[eax],al

Shift+F9 12次后程序运行,返回后,再按Shift+F9 10次后程序停在
00852E40    73 DC           jnb short wjtd.00852E1E

现在设置Ollydbg忽略所有异常选项。Ctrl+S在“整个段块”搜索命令序列:
      

代码:--------------------------------------------------------------------------------
mov ebx,edx
shr ebx,10
mov eax,dword ptr ds:[esi]
--------------------------------------------------------------------------------

      
找到在00853195处!我们在其上的00853177处下断,Shift+F9 运行,中断



00853177   8BB5 56D34000   mov esi,dword ptr ss:[ebp+40D356]
//[ebp+40D356]=[00853CB4]=00097000 ★ 这个00097000就是重定位表的RVA!
0085317D   85F6         test esi,esi
0085317F   0F84 8B000000   je wjtd.00853210
00853185   8B95 62D34000   mov edx,dword ptr ss:[ebp+40D362]
0085318B   03F2         add esi,edx
0085318D   2B95 66D34000   sub edx,dword ptr ss:[ebp+40D366]
//这里其实就是检测与映像基址是否相符,不符则重定位处理!★
00853193   74 7B        je short wjtd.00853210
//Magic Jump,可以第2次Load后在这里改标志位Z=1,使其跳转 ★
00853195   8BDA         mov ebx,edx
00853197   C1EB 10       shr ebx,10
0085319A   8B06         mov eax,dword ptr ds:[esi]
0085319C   85C0         test eax,eax
0085319E   74 70        je short wjtd.00853210
008531A0   8B4E 04       mov ecx,dword ptr ds:[esi+4]
008531A3   83E9 08       sub ecx,8
008531A6   D1E9         shr ecx,1
008531A8   8BBD 62D34000   mov edi,dword ptr ss:[ebp+40D362]
008531AE   03F8         add edi,eax
008531B0   83C6 08       add esi,8
008531B3   0FB706        movzx eax,word ptr ds:[esi]
008531B6   C1C8 0C       ror eax,0C
008531B9   FEC8         dec al
008531BB   78 4C        js short wjtd.00853209
008531BD   74 0E        je short wjtd.008531CD
008531BF   FEC8         dec al
008531C1   74 13        je short wjtd.008531D6
008531C3   FEC8         dec al
008531C5   74 3C        je short wjtd.00853203
008531C7   FEC8         dec al
008531C9   74 14        je short wjtd.008531DF
008531CB   EB 3C        jmp short wjtd.00853209
008531CD   C1E8 14       shr eax,14
008531D0   66:011C07      add word ptr ds:[edi+eax],bx
008531D4   EB 33        jmp short wjtd.00853209
008531D6   C1E8 14       shr eax,14
008531D9   66:011407      add word ptr ds:[edi+eax],dx
008531DD   EB 2A        jmp short wjtd.00853209
008531DF   52          push edx
008531E0   C1E8 14       shr eax,14
008531E3   8BD8         mov ebx,eax
008531E5   C1E0 10       shl eax,10
008531E8   66:8B16       mov dx,word ptr ds:[esi]
008531EB   66:81E2 FF0F    and dx,0FFF
008531F0   66:8BC2       mov ax,dx
008531F3   5A          pop edx
008531F4   8D8410 00800000  lea eax,dword ptr ds:[eax+edx+8000]
008531FB   89041F        mov dword ptr ds:[edi+ebx],eax
008531FE   46          inc esi
008531FF   46          inc esi
00853200   49          dec ecx
00853201   EB 06        jmp short wjtd.00853209
00853203   C1E8 14       shr eax,14
00853206   011407        add dword ptr ds:[edi+eax],edx
00853209   46          inc esi
0085320A   46          inc esi
0085320B   49          dec ecx
0085320C  ^ 7F A5        jg short wjtd.008531B3
0085320E  ^ EB 8A        jmp short wjtd.0085319A
00853210   8B95 62D34000   mov edx,dword ptr ss:[ebp+40D362]
//当我们中断在00853210处时,重定位处理完毕。此时ESI=00840780,★ 就是重定位表的结束地址啦。
//得到重定位表信息:RVA=00097000,大小=840780-837000=00009780

00853216   8BB5 52D34000   mov esi,dword ptr ss:[ebp+40D352]
//[ebp+40D352]=[0853CB0]=00093000 ★ 这就是输入表的RVA啦。
0085321C   85F6         test esi,esi
0085321E   0F84 06040000   je wjtd.0085362A
//第2个Magic Jump,改标志位Z=1,使其跳转,则不加密IAT
00853224   03F2         add esi,edx
00853226   83A5 52D44000 00 and dword ptr ss:[ebp+40D452],0
0085322D   8B46 0C       mov eax,dword ptr ds:[esi+C]
00853230   8366 0C 00     and dword ptr ds:[esi+C],0
00853234   85C0         test eax,eax
00853236   0F84 EE030000   je wjtd.0085362A
0085323C   03C2         add eax,edx
0085323E   8BD8         mov ebx,eax
00853240   50          push eax
00853241   FF95 D0D24000   call dword ptr ss:[ebp+40D2D0]
00853247   85C0         test eax,eax
00853249   0F85 BA000000   jnz wjtd.00853309
咱们已经得到重定位表信息了,所以可以再次载入这个DLL,重复上面的步骤,避开重定位表加密!

—————————————————————————————————
二、第2区段内存断点法:快速直达OEP
      
      
当我们修改了以上两个Magic Jump,自0085321E处跳至0083562A。

代码:--------------------------------------------------------------------------------
0085362A   8BBD 5AD34000   mov edi,dword ptr ss:[ebp+40D35A]
00853630   85FF         test edi,edi
00853632   EB 03        jmp short wjtd.00853637

--------------------------------------------------------------------------------

      
现在我们Alt+M打开 内存查看 窗口:
在007A1000第2区段上 设置内存访问断点!Shift+F9 运行,直接中断在OEP处!
      

代码:--------------------------------------------------------------------------------
0082C07C   55          push ebp
0082C07D   8BEC         mov ebp,esp
0082C07F   83C4 C4       add esp,-3C
0082C082   B8 ECBD4800    mov eax,48BDEC
0082C087   E8 14A2F7FF    call wjtd.007A62A0

--------------------------------------------------------------------------------

      
用LordPE选中Ollydbg的loaddll.exe的进程,在下面的列表里选择wjtd.dll,然后完整脱壳,得到dumped.dll。
—————————————————————————————————
三、PE修正

  //修正参数如下      

  入口点 OEP = 8C07C
  输入表 RVA = 93000  
  重定位 RVA = 9700  大小 = 9780      


OK,脱壳完成啦,运行后无错

页: [1]
© 1999-2008 EvilOctal Security Team