-
-
彩虹3.x狗壳脱壳后IAT修复方法
-
发表于:
2007-5-8 16:33
5477
-
刚破一个彩虹3.x狗壳,摸索出一个修复IAT的方法与大家分享。
用kangaroo的脚本很容易找到解压密码和OEP,怎样脱壳请找kangaroo的文章。
原文件中的CALL [API地址]这种形式的API引用已被壳偷取替换掉,但call 寄存器这种形式的API引用没有被偷取掉,例如:
00458CF2 8B1D C4A04700 mov ebx, dword ptr [47A0C4] ; GDI32.GetDeviceCaps
00458CF8 8BF8 mov edi, eax
00458CFA 6A 58 push 58
00458CFC 57 push edi
00458CFD FFD3 call ebx ; GDI32.GetDeviceCaps
壳代码中处理被偷取代码的部分也是引用一个结构和IAT一样的地址表,我们可以直接用工具修复。因此我们要修复2个IAT,才能保证脱壳后跨机器和平台,一个是stolen code中用的IAT,一个是原文件的原来的IAT。
找stolen code中用的IAT方法:见kangaroo的文章中,例如找到
004BD229 FF15 DC234D00 call dword ptr [4D23DC] ; kernel32.GetExitCodeThread
004BD22F 817D F4 0301000>cmp dword ptr [ebp-C], 103
004BD236 /74 0D je short 004BD245
004BD238 A1 A0DA4C00 mov eax, [4CDAA0]
004BD23D 8945 FC mov [ebp-4], eax
4D23DC就是在IAT中,CTRL+G到4D23DC,上下观察分析,例如得到IAT 4D212C-4D291B 长度7F0
找原文件的原来的IAT的方法:在stolen code中用的IAT中选一个4字节项,CTRL+B整块查找二进制项,CTRL+L查找下一个,分析找到的内容,例如得到IAT 47A000-47A7B3 长度7B3
好了,2部分IAT都找到了,用ImportREC 1.6分别get Imports 2下就行了
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)