AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

.Net虛擬機(CLR/JIT)加密原理(版權保護)

來源: 責編: 時間:2023-10-31 16:46:32 317觀看
導讀1.前言這里的虛擬機加密實際上是修改JIT即時編譯器入口函數,讓其跳轉到加密軟件庫內部,修正被加密之后更改了的托管DLL的ILCode,以讓其恢復正常編譯。從而屏蔽修改MSIL帶來的軟件程序修改。.Net7里面JIT,GC等等都已經實現

1.前言

這里的虛擬機加密實際上是修改JIT即時編譯器入口函數,讓其跳轉到加密軟件庫內部,修正被加密之后更改了的托管DLL的ILCode,以讓其恢復正常編譯。從而屏蔽修改MSIL帶來的軟件程序修改。.Net7里面JIT,GC等等都已經實現了分離和解耦。也就是可以把CLR和JIT以及GC(關于GC分離)分隔開來,對它們進行定制和更改。pdY28資訊網——每日最新資訊28at.com

2.JIT

.Net7里面JIT的路徑如下:pdY28資訊網——每日最新資訊28at.com

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

這里的這個cltjit.dll就是模塊化的JIT庫。pdY28資訊網——每日最新資訊28at.com

那么它具體是如何運作的呢?這里先看下它在CLR里面調用它方式,然后用C++描述下pdY28資訊網——每日最新資訊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進行修改,然后再跳轉回來,進行即時編譯。這個過程如下圖所示:pdY28資訊網——每日最新資訊28at.com

圖片圖片pdY28資訊網——每日最新資訊28at.com

3.保護的秘密

首先看下這個DHVM修正JIT入口。當進行了DHVM加密之后,CLR啟動,加載被加密后的托管DLL開始。
1.每個被加密的托管DLL都會被注入以下代碼:
pdY28資訊網——每日最新資訊28at.com

圖片圖片pdY28資訊網——每日最新資訊28at.com


你可以通過ILdasm來查看上圖。這里面的Startup和RunHVM這些注入到托管DLL之后,會被CLR先于托管Main加載。后于JIT加載。原有托管DLL的ILCode被保存到DHVM里面,原有的托管DLL的MSIL被修改為各種其它異常錯誤。
2.托管Main加載之前,通過DHVM函數修改JIT入口。如下代碼:pdY28資訊網——每日最新資訊28at.com

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

3.當CLR正常加載運行JIT的時候,因為JIT入口已經被替換。所以會跳轉到DHVM里面去。pdY28資訊網——每日最新資訊28at.com

//當運行的時候會跳轉到0000000180042100地址處執行。0000000180042100 40 53  push rbx

4.DHVM里面修正當前需要編譯的函數的ILCode為DHVM里面保存的正常MSIL.然后進行正常編譯。pdY28資訊網——每日最新資訊28at.com

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

4.結尾

虛擬機加密,這種保護度基本上也可以了。如果需要Hook它,則需要了解虛擬機的原理,或者是二進制層面機器碼的含義。pdY28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-16144-0.html.Net虛擬機(CLR/JIT)加密原理(版權保護)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 告別硬編碼,SpringBoot實現動態增刪啟停定時任務

下一篇: 大家的平原,阿里云的播種機

標簽:
  • 熱門焦點
Top