查看原文
其他

Vmprotect3.5.1 壹之型 — 暗月·宵之宫

冰鸡 看雪学苑 2022-07-01


本文为看雪论坛优秀文章

看雪论坛作者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






球分享

球点赞

球在看



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

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存