当前位置:首页 > 科技  > 软件

.Net虚拟机(CLR/JIT)加密原理(版权保护)

来源: 责编: 时间:2023-10-31 16:46:32 270观看
导读1.前言这里的虚拟机加密实际上是修改JIT即时编译器入口函数,让其跳转到加密软件库内部,修正被加密之后更改了的托管DLL的ILCode,以让其恢复正常编译。从而屏蔽修改MSIL带来的软件程序修改。.Net7里面JIT,GC等等都已经实现

1.前言

这里的虚拟机加密实际上是修改JIT即时编译器入口函数,让其跳转到加密软件库内部,修正被加密之后更改了的托管DLL的ILCode,以让其恢复正常编译。从而屏蔽修改MSIL带来的软件程序修改。.Net7里面JIT,GC等等都已经实现了分离和解耦。也就是可以把CLR和JIT以及GC(关于GC分离)分隔开来,对它们进行定制和更改。Fge28资讯网——每日最新资讯28at.com

2.JIT

.Net7里面JIT的路径如下:Fge28资讯网——每日最新资讯28at.com

C:/Program Files/dotnet/shared/Microsoft.NETCore.App/7.0.10/clrjit.dll

这里的这个cltjit.dll就是模块化的JIT库。Fge28资讯网——每日最新资讯28at.com

那么它具体是如何运作的呢?这里先看下它在CLR里面调用它方式,然后用C++描述下Fge28资讯网——每日最新资讯28at.com

//CoreClrFolderHolder.GetUnicode()就是clrjit.dll的路径,这里是获取clrjit.dll的模块句柄*phJit = CLRLoadLibrary(CoreClrFolderHolder.GetUnicode())//通过上面获取的句柄,获取到clrjit里面的getJIT函数地址pGetJitFn getJitFn = (pGetJitFn) GetProcAddress(*phJit, "getJit");//运行getJIT函数的结果,赋给pICorJitCompilerICorJitCompiler* pICorJitCompiler = (*getJitFn)();//这里的ICorJitCompiler是一个C++类m_jit=  pICorJitCompiler上面的代码用C++描述下就是:HMODULE h=LoadLibraryExA("clrjit.dll");void* getJitFn=(void*)GetProcAddress(h,"getJit");ICorJitCompiler* pICorJitCompiler = (*getJitFn)();m_jit=  pICorJitCompiler

以DHVM(DNGuard HMVM)为例,这里的这个m_jit里面的第一个成员变量就是JIT即时编译器的起点,CLR在加载托管DLL的时候,加载了DHVM模块,更改了这个JIT即时编译的起点。跳转到DHVM内部。对ILCode进行修改,然后再跳转回来,进行即时编译。这个过程如下图所示:Fge28资讯网——每日最新资讯28at.com

图片图片Fge28资讯网——每日最新资讯28at.com

3.保护的秘密

首先看下这个DHVM修正JIT入口。当进行了DHVM加密之后,CLR启动,加载被加密后的托管DLL开始。
1.每个被加密的托管DLL都会被注入以下代码:
Fge28资讯网——每日最新资讯28at.com

图片图片Fge28资讯网——每日最新资讯28at.com


你可以通过ILdasm来查看上图。这里面的Startup和RunHVM这些注入到托管DLL之后,会被CLR先于托管Main加载。后于JIT加载。原有托管DLL的ILCode被保存到DHVM里面,原有的托管DLL的MSIL被修改为各种其它异常错误。
2.托管Main加载之前,通过DHVM函数修改JIT入口。如下代码:Fge28资讯网——每日最新资讯28at.com

//rbx即是m_jit的第一个成员变量,也就是JIT入口被修改被r11.//也即是00000001800421000000000180472847 4C 89 1B mov qword ptr [rbx],r11

3.当CLR正常加载运行JIT的时候,因为JIT入口已经被替换。所以会跳转到DHVM里面去。Fge28资讯网——每日最新资讯28at.com

//当运行的时候会跳转到0000000180042100地址处执行。0000000180042100 40 53  push rbx

4.DHVM里面修正当前需要编译的函数的ILCode为DHVM里面保存的正常MSIL.然后进行正常编译。Fge28资讯网——每日最新资讯28at.com

//rdi+10h即是需要编译的ILCode,被赋值为r11,也即是保存在DHVM里面的正常MSIL000000018047408C 4C 89 5F 10  mov qword ptr [rdi+10h],r11

4.结尾

虚拟机加密,这种保护度基本上也可以了。如果需要Hook它,则需要了解虚拟机的原理,或者是二进制层面机器码的含义。Fge28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16144-0.html.Net虚拟机(CLR/JIT)加密原理(版权保护)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 告别硬编码,SpringBoot实现动态增删启停定时任务

下一篇: 大家的平原,阿里云的播种机

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 让我们一起聊聊文件的操作

    让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 自律,给不了Keep自由!

    自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 认真聊聊东方甄选:如何告别低垂的果实

    认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • Android 14发布:首批适配机型公布

    Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 回归OPPO两年,一加赢了销量,输了品牌

    回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top