VMP加密.Net AOT的强度(vmp加密软件)

1.前言

之前研究过dnguard_hvm,这个东西的强度是可以的。但是破绽也很明显。料想vmp也是如此,不过研究下来。vmp的强度可能更高点,它需要涉及到内核驱动的反调试。本篇来看下。

2.概括

一:托管的困扰

vmp貌似只能加密exe,但是托管的exe只是一个启动程序(这点可以参考这篇文章:Exe和托管DLL区别是什么),也就是启动clr让clr加载托管dll。所以托管的代码实际上都在dll里面。vmp加密了exe,但是托管dll里面原封不动,所以导致了很容易破解。几乎不费吹灰之力,这里不赘述。只是看下AOT预编译之后的加密。

二.高强度AOT加密

托管的AOT实际上被预编译成了本机机器码,这种东西本身如果不加密的话,就需要非常熟知AOT编译器ILC的运作模式,以及C 引导文件Bootstrap的运作模式。才能够非常容易的逆向和破解它。这点依然不是难点。难点就在于,如果用vmp加密AOT的exe程序。除了上述之外,首先就需要面对的一点就是反调试,而且类似于dnguard_hvm那种补丁式样的破解,是无效果的,不知道vmp是何种机制造成的。

这里用vmp3.7.3版本,它加密全部选择上,比如以下:

内存保护

导入信息保护

资源保护

压缩输出文件保护

输出文件保护

检测调试器

检测虚拟工具

移除调试信息

移除重定位信息

把以上保护全部勾选上,让其最强加密。

三.破除方法

这里有一个比较粗暴的破除方式就是,先把调试标志给禁掉

BegingDebugged

NtGlobalFlags

然后hook以下几个驱动函数

NtQueryInformationProcess

NtSetInformationThread

NtClose

NtQuerySystemInformation

NtQueryInformationThread

把涉及到调试的信息驱动层面能hook掉的全hook掉。

四.做法

通过在ntoskrnl.exe里面搜索特征码,找到回调函数。封装一个函数,通过__readgsqword获取到进程环境块,通过当前进程栈顶和栈底的循环找到回调函数的两个参数索引,和函数地址,传入进去。把封装的函数赋值给回调函数。就可以hook了。

以上也仅为第一步,可以调试了。而后面的分析应该相对于简单些,但是也不容忽视。

以上方法来自于网路,后面验证下这个方法。

结尾

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

(0)
上一篇 2024年7月25日 下午2:10
下一篇 2024年7月25日 下午2:22

相关推荐