当前位置: 代码网 > 服务器>网络安全>加密解密 > ACProtect Professional 1.3C 主程序脱壳(3)(图)

ACProtect Professional 1.3C 主程序脱壳(3)(图)

2008年10月08日 加密解密 我要评论
ACProtect Professional 1.3C 主程序脱壳(3)(图) 运行程序,crashedL。直接用修复完stolen code的dumped_.exe看看。从EP的第1个call进去就有问题。 在OllyDbg中可以看到: 有部分IAT在壳中。这部... 08-10-08

运行程序,crashedl。直接用修复完stolen code的dumped_.exe看看。从ep的第1个call进去就有问题。







在ollydbg中可以看到:


有部分iat在壳中。这部分代码前面是跟到了的(在第6次int 3以后),原来认为这只是loader自己需要的api。实际上正常的程序代码也使用了这个iat。

如果用importrec把这部分也取出来,属于不同dll的api混排了,importrec不能处理。
这些地址是在736643处理的。


而且有一个不能识别(这个实际上是hooked messageboxa)。



估计这是加壳时做的手脚。当发现主程序使用了与壳代码同样的api时,修改了对应的调用代码,使其调用到壳中的iat。这样可以加强与壳的联系。反过来看,这里大部分api(除了只有壳使用的),在前面避开iat加密处理后,都已经import了。

在acprotect_fixed中已经有解好的api名。


紧临的函数指针:



注意函数名及指针与7339a9附近的代码并不完全对应。有的函数名或指针在别处。

可以在程序入口自己调用loadlibrary,getprocaddress进行处理,填入相应的地址。或者把loader的代码搬过来。也可以修改主程序的代码,使其调用前面得到的干净的iat而不是壳中的iat(这样要处理的地方太多,很麻烦)。

注意acprotected_fixed中,import了几个基本的api:

在加载api时壳代码会使用这些函数。这几个地址直接填入007300d8开始的iat中了。修改dumped_.exe的ep,从壳代码开始(可以看到dump出来的代码,这部分已经解开了),





注意loader代码中用的几个api(getmodulehandlea,getprocaddress)改为使用避开iat加密后得到的主程序的iat。


原来在壳代码import的4个api,从主程序的iat直接取。结束处理后跳回前面的oep 409de4。用pushad,pushad保存寄存器值。



注意最后一项7301cc实际是messageboxa,被acprotect用做sdk的接口。 不要填入messagebox的真正地址。

下面的73013c在跟原程序的过程中始终为0,可能是注册版才有?


处理完后,位于壳空间的iat已经赋上了正确值。


7. 修复replaced code (1)

用前面的ollyscript脚本,停下后对code section设内存访问断点。忽略所有异常。断下后,在抽取代码的共同入口722416设断,运行。第1次调用在004047e5。


里面还有smc,解出后贴到acprotect_fixed中对照跟踪。这部分的处理与低版本基本相同。

1) 查返回地址表



7225cc后ebx指向返回地址表,里面是rva:


(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com