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

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

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

1.前言

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

2.JIT

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

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

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

那么它具体是如何运作的呢?这里先看下它在CLR里面调用它方式,然后用C++描述下A3p28资讯网——每日最新资讯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进行修改,然后再跳转回来,进行即时编译。这个过程如下图所示:A3p28资讯网——每日最新资讯28at.com

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

3.保护的秘密

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

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


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

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

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

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

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

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

4.结尾

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

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

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

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

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

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 对标苹果的灵动岛 华为带来实况窗功能

    对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 阿里大调整

    阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • 携众多高端产品亮相ChinaJoy,小米带来一场科技与人文的视听盛宴

    携众多高端产品亮相ChinaJoy,小米带来一场科技与人文的视听盛宴

    7月28日,全球数字娱乐领域最具知名度与影响力的年度盛会中国国际数码互动娱乐展览会(简称ChinaJoy)在上海新国际博览中心盛大开幕。作为全球领先的科
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • 电博会与软博会实现

    电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top