VMP加密.Net AOT的强度

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了。

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

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

结尾

点击下方卡片,关注后,后台回复:dotnet7。免费领取一套CLR/JIT/MSIL视频技术教程。你也可以加入我们(可加微信tyz_jhpt,备注:加群。拉你进去),顶级技术交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值