【文章标题】: 快速带狗脱Hardlock壳
【文章作者】: netsowell
【作者邮箱】: Lifeengines@gmail.com
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
首先用OD装入程序,我这里脱的是OCX文件,也就是DLL。需要处理重定位。
第一步,查找入口,这个没有固定的方法,你可以找特征码,特征函数,可以想办法停在被拖文件代码空间向上看堆栈。等等,
找到OEP后,用rec一看,IAT被破坏了一部分,在dump一个文件下来,用lordpe一看,重定位表破坏了。检查下,没有其他数据被破坏了
于是乎alt+M,双击模块空间的最后一个.protect区段。查找二进制8B 4D BC 89 01 0F 85 37 14 00 00 74 03,处理IAT的特征码。
至于这个码是怎么来的,你在被加密了的iat跳转地址下内存或者硬件写入断点看看吧。找到后下硬件执行。别忘了在oep也下个硬件执行。
重新装入程序,直接F9,停在IAT处理的地方。然后随便找个空间吧。从这里jmp过去。然后写入下面代码
10049FA4 60 pushad
10049FA5 9C pushfd
10049FA6 FF7424 2C push dword ptr [esp+2C]//取出函数名
10049FAA FF7424 50 push dword ptr [esp+50]//取出模块句柄
10049FAE E8 0E207E6C call kernel32.GetProcAddress
10049FB3 894424 20 mov [esp+20], eax 回写地址
10049FB7 9D popfd
10049FB8 61 popad
10049FB9 8B4D BC mov ecx, [ebp-44] ; garnfeld.100697F0
10049FBC 8901 mov [ecx], eax
10049FBE - E9 4D61F8FF jmp 0FFD0110 跳回去
然后再run.99.9%的输入表已经被修复了,偶尔的回有程序在kernel32.dll模块中有一个无法识别的函数。简单跟踪一下
是GetProcAddress.
然后用ReloX.exe修复重新定位。不敢说秒杀。应该分杀没问题。
附加二进制代码。
60 9C FF 74 24 2C FF 74 24 50 E8 D5 77 36 7C 89 44 24 20 9D 61 8B 4D BC 89 01 E9 4D 61 F8 FF
示例程序:
10065280 > 55 push ebp //壳入口
10065281 8BEC mov ebp, esp
10065283 53 push ebx ; garnfeld.<模块入口点>
10065284 56 push esi
10065285 57 push edi
10065286 60 pushad
10065287 8BC4 mov eax, esp
10065289 A3 F05E0610 mov [10065EF0], eax
1006528E B8 18550610 mov eax, 10065518
10065293 2B05 3C550610 sub eax, [1006553C] ; garnfeld.10065518
10065299 A3 3C550610 mov [1006553C], eax
1006529E 833D EC5E0610 0>cmp dword ptr [10065EEC], 0
100652A5 74 15 je short 100652BC
100652A7 8B0D F05E0610 mov ecx, [10065EF0]
100652AD 51 push ecx
100652AE FF15 EC5E0610 call [10065EEC]
100652B4 83C4 04 add esp, 4
100652B7 E9 A5000000 jmp 10065361
100652BC 68 D85E0610 push 10065ED8 ; ASCII "kernel32"
100652C1 FF15 405F0610 call [<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA
100652C7 A3 F8540610 mov [100654F8], eax
100652CC 68 E45E0610 push 10065EE4 ; ASCII "user32"
100652D1 FF15 405F0610 call [<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA
100652D7 A3 FC540610 mov [100654FC], eax
100652DC 8B15 445F0610 mov edx, [<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
100652E2 8915 00550610 mov [10065500], edx
100652E8 A1 4C5F0610 mov eax, [<&USER32.MessageBoxA>]
100652ED A3 04550610 mov [10065504], eax
100652F2 C705 08550610 0>mov dword ptr [10065508], 0
100652FC C705 0C550610 0>mov dword ptr [1006550C], 0
10065306 8B0D 3C550610 mov ecx, [1006553C] ; garnfeld.10065518
////////////////
10077144 8B4D BC mov ecx, [ebp-44] //这里写入处理了的IAT地址修改为jmp
10077147 8901 mov [ecx], eax
10077149 0F85 37140000 jnz 10078586
1007714F 74 03 je short 10077154
10077151 29AB 4B0F842C sub [ebx+2C840F4B], ebp
10077157 14 00 adc al, 0
10077159 00D9 add cl, bl
//////////////////

好象没什么技术含量的.高手路过勿笑.
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年08月22日 11:50:02
[培训]科锐逆向工程师培训第53期2025年7月8日开班!