好友
阅读权限10
听众
最后登录1970-1-1
|
ACProtect v2.1.3版本脱壳.我还是使用delphi7的例子..首先上来还是找OEP.. 这个OEP被偷的很过分啊, 如果不是使用退出法找到OEP.. 估计其他类似的程序够呛..
当然这个壳的话, 基本上也没有什么难度, 主要难度还是集中在Code Replace, 脱壳很容易, 这个壳没有合并程序的区段, 很容易还原成完整的区段, 另外这个壳没有将IAT加密, IAT也可以很轻易的就dump一份出来.
首先OllyDbg跑起来, 在IDAta断下断点, 一般这时候就是填写IAT的地方. 同时可以得到一个信息就是Code段已经解压的差不多了. 在idata断下来以后, 我们需要做的事情全部都在这里了.. 在断点下面一点点, 就是这个代码.
0046C298 8BF3 mov esi, ebx
0046C29A 8BFB mov edi, ebx
0046C29C AC lods byte ptr [esi]
0046C29D C0C0 03 rol al, 3
0046C2A0 AA stos byte ptr es:[edi] ; 解密导入DLL的名称
0046C2A1 803F 00 cmp byte ptr [edi], 0
0046C2A4 ^ 75 F6 jnz short delphi71.0046C29C
是的, 这里就是解密要导入DLL的名称.. 然后在下面一点点
0046C2F7 60 pushad
0046C2F8 2BC0 sub eax, eax
0046C2FA 8803 mov byte ptr [ebx], al ; 将导入DLL的名称清空
0046C2FC 43 inc ebx
0046C2FD 3803 cmp byte ptr [ebx], al
0046C2FF ^ 75 F9 jnz short delphi71.0046C2FA
有将导入DLL的名称清空, 太猥琐了,直接nop.完了之后是这里解密函数名称字符串.
0046C356 8BF3 mov esi, ebx
0046C358 8BFB mov edi, ebx
0046C35A AC lods byte ptr [esi] ; 这里是解密函数名称
0046C35B C0C0 03 rol al, 3
0046C35E AA stos byte ptr es:[edi]
0046C35F 803F 00 cmp byte ptr [edi], 0
同样有一个地方在将这个字符串清空..猥琐之极.nop掉.
0046C39F 60 pushad
0046C3A0 2BC0 sub eax, eax
0046C3A2 8803 mov byte ptr [ebx], al ;将导入函数名称清空.
0046C3A4 43 inc ebx
0046C3A5 3803 cmp byte ptr [ebx], al
0046C3A7 ^ 75 F9 jnz short delphi71.0046C3A2
0046C3A9 61 popad
再下面这里是有对一些特殊函数特殊照顾的, 比如MessageBoxA什么的.这里我们也可以nop掉.
0046C3B2 3B85 18104100 cmp eax, dword ptr [ebp+411018] ;user32.MessageBoxA
0046C3B8 74 20 je short delphi71.0046C3DA
这样就舒服了. 当然这样的函数有好几个, 注意观察下. 连续着的, 都nop掉.完了之后就是填写函数地址了
0046C435 61 popad
0046C436 8907 mov dword ptr [edi], eax ; 这句代码是填写函数地址.
0046C438 8385 00794000 0>add dword ptr [ebp+407900], 4
; 假如我们直接忽略, 就连Import Rec
也不用了如果我们把这一句nop掉的话, 那就舒服了. 直接连Import Rec修复也不用了. 完完整整的IAT表信息.. 赞一个.这时间IAT表已经解密完成了. 我们差的就是跳到oep了. 但是ACProtect这个壳的话, oep被偷取了. 这时间我们在.code段下个断点, 会发现断点在delphi7程序入口的第一个CALL. 我们在堆栈上回溯下, 会发现调用的代码,这也就是被偷取的变形的代码, 当然不要被一些花指令给迷惑, 我们应该看到ff15.. 太熟悉了这个..call [xxxxx].恩应该就是它, 没错了. 我们在回到delphi7程序中看看这边的代码是什么.. 直接patch…OK这样就差不多了.完了之后就已经可以跑起来了. 就是这个stolen oep需要处理下, 不然看着很恶心. 所以直接copy delphi7的代码过来就好了. 这下看着比较舒服了..
|
|