Vmprotect3.5.1 壹之型 — 暗月·宵之宫
2022-3-14 17:59:0 Author: mp.weixin.qq.com(查看原文) 阅读量:12 收藏


本文为看雪论坛优秀文章

看雪论坛作者ID:冰鸡

在很久很久以前,神奇的nooby有了个天才的想法,通过修改themida的引擎,使其强制输出了没有混淆和加密的程序,很轻松的就分析完了外壳逻辑和vm的逻辑,盖亚。

通过nooby的想法,我们也将vmp3.5.1的引擎进行了修改,使其强行输出了没有混淆和vm后的代码,便于我们分析外壳和handler的逻辑。

今天先来看看vmp的反调试原理,先将vmp配置成如下,避免其他功能的干扰。

保护后得到了非常干净的程序。
如图,这时的入口不再是骇人的 push 0xXXXXXX / call xxxxxx,而是:
int start(){if ( (unsigned int)sub_4F4664() == 1 )return mainCRTStartup();  sub_4F44EC();return 0xDEADC0DE;}
sub_4F4664()是一个非常大的函数,vmp整个外壳的逻辑所在,内存保护,导入表保护,资源保护,压缩等等就是在这个函数中处理的。

第一步,先获取ntdll的版本信息。
根据ntdll的版本初始化一些HardCode,后面会用到。
接着我们直奔诸葛亮三轮车,vmp自己封装了一个从模块的导出表直接得到地址的函数,这种方式在shellcode中比较常见。
比较完善,还还考虑了转发的情况。
接着通过GetExportAddress和上面通过ntdll定位的syscall序号进行反调试检测。
vmp分别通过了IsDebuggerPresent,CheckRemoteDebuggerPresent, NtQueryInformationProcess,以及ZwSetInformationThread进行用户态反调试,vmp在调用函数之前,会检测头部是不是0xCC,然后直接报错。

还有就是直接syscall直接调用比较有效。
 

那么,剩下的贰之型·珠华弄月再说。

 

看雪ID:冰鸡

https://bbs.pediy.com/user-home-841912.htm

*本文由看雪论坛 冰鸡 原创,转载请注明来自看雪社区

# 往期推荐

1.高级进程注入总结

2.通过某音Cronet模块学习Quic协议

3.特斯拉攻击案例解读:硬件逆向分析

4.Android strandhogg漏洞复现学习

5.某APP加固产品的深入分析

6.FartExt超进化之奇奇怪怪的新ROM工具MikRom

球分享

球点赞

球在看

点击“阅读原文”,了解更多!


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458432666&idx=1&sn=4d1ff1a26a262118f5ad91022b362b42&chksm=b18f841086f80d06ba0aff8b739eaa49669b5f45549cf93fe792f4b75bea52934d2edc7db7b3#rd
如有侵权请联系:admin#unsafe.sh