成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.Net虛擬機(jī)(CLR/JIT)加密原理(版權(quán)保護(hù))

開發(fā) 前端
以DHVM(DNGuard HMVM)為例,這里的這個(gè)m_jit里面的第一個(gè)成員變量就是JIT即時(shí)編譯器的起點(diǎn),CLR在加載托管DLL的時(shí)候,加載了DHVM模塊,更改了這個(gè)JIT即時(shí)編譯的起點(diǎn)。跳轉(zhuǎn)到DHVM內(nèi)部。

1.前言

這里的虛擬機(jī)加密實(shí)際上是修改JIT即時(shí)編譯器入口函數(shù),讓其跳轉(zhuǎn)到加密軟件庫內(nèi)部,修正被加密之后更改了的托管DLL的ILCode,以讓其恢復(fù)正常編譯。從而屏蔽修改MSIL帶來的軟件程序修改。.Net7里面JIT,GC等等都已經(jīng)實(shí)現(xiàn)了分離和解耦。也就是可以把CLR和JIT以及GC(關(guān)于GC分離)分隔開來,對(duì)它們進(jìn)行定制和更改。

2.JIT

.Net7里面JIT的路徑如下:

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

這里的這個(gè)cltjit.dll就是模塊化的JIT庫。

那么它具體是如何運(yùn)作的呢?這里先看下它在CLR里面調(diào)用它方式,然后用C++描述下

//CoreClrFolderHolder.GetUnicode()就是clrjit.dll的路徑,這里是獲取clrjit.dll的模塊句柄
*phJit = CLRLoadLibrary(CoreClrFolderHolder.GetUnicode())
//通過上面獲取的句柄,獲取到clrjit里面的getJIT函數(shù)地址
pGetJitFn getJitFn = (pGetJitFn) GetProcAddress(*phJit, "getJit");
//運(yùn)行g(shù)etJIT函數(shù)的結(jié)果,賦給pICorJitCompiler
ICorJitCompiler* pICorJitCompiler = (*getJitFn)();
//這里的ICorJitCompiler是一個(gè)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)為例,這里的這個(gè)m_jit里面的第一個(gè)成員變量就是JIT即時(shí)編譯器的起點(diǎn),CLR在加載托管DLL的時(shí)候,加載了DHVM模塊,更改了這個(gè)JIT即時(shí)編譯的起點(diǎn)。跳轉(zhuǎn)到DHVM內(nèi)部。對(duì)ILCode進(jìn)行修改,然后再跳轉(zhuǎn)回來,進(jìn)行即時(shí)編譯。這個(gè)過程如下圖所示:

圖片圖片

3.保護(hù)的秘密

首先看下這個(gè)DHVM修正JIT入口。當(dāng)進(jìn)行了DHVM加密之后,CLR啟動(dòng),加載被加密后的托管DLL開始。
1.每個(gè)被加密的托管DLL都會(huì)被注入以下代碼:

圖片圖片


你可以通過ILdasm來查看上圖。這里面的Startup和RunHVM這些注入到托管DLL之后,會(huì)被CLR先于托管Main加載。后于JIT加載。原有托管DLL的ILCode被保存到DHVM里面,原有的托管DLL的MSIL被修改為各種其它異常錯(cuò)誤。
2.托管Main加載之前,通過DHVM函數(shù)修改JIT入口。如下代碼:

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

3.當(dāng)CLR正常加載運(yùn)行JIT的時(shí)候,因?yàn)镴IT入口已經(jīng)被替換。所以會(huì)跳轉(zhuǎn)到DHVM里面去。

//當(dāng)運(yùn)行的時(shí)候會(huì)跳轉(zhuǎn)到0000000180042100地址處執(zhí)行。
0000000180042100 40 53  push rbx

4.DHVM里面修正當(dāng)前需要編譯的函數(shù)的ILCode為DHVM里面保存的正常MSIL.然后進(jìn)行正常編譯。

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

4.結(jié)尾

虛擬機(jī)加密,這種保護(hù)度基本上也可以了。如果需要Hook它,則需要了解虛擬機(jī)的原理,或者是二進(jìn)制層面機(jī)器碼的含義。

責(zé)任編輯:武曉燕 來源: 江湖評(píng)談
相關(guān)推薦

2013-01-25 11:21:59

2013-01-18 14:04:58

VMwareWorkstation

2011-02-16 14:49:17

虛擬機(jī)

2018-11-26 14:47:06

虛擬機(jī)加密超融合

2018-11-27 08:09:56

虛擬機(jī)加密數(shù)據(jù)安全

2019-08-27 16:23:41

Docker虛擬化虛擬機(jī)

2023-02-06 15:28:51

2018-04-04 14:43:27

虛擬機(jī)保護(hù)技術(shù)

2013-03-20 15:21:56

vSphere Rep

2009-10-23 09:36:25

.Net Compac

2015-07-08 14:33:23

虛擬機(jī)OpenStack

2021-01-26 09:30:32

加密虛擬機(jī)攻擊

2012-05-18 10:22:23

2012-11-08 10:45:14

2023-07-13 12:18:24

2010-07-26 09:02:38

2009-09-03 14:26:17

Jit編譯

2020-04-05 11:01:03

虛擬機(jī)備份組網(wǎng)

2013-07-17 09:32:58

2016-09-27 20:12:33

Android虛擬機(jī)Android動(dòng)態(tài)調(diào)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品一区二区网址 | 久久国内精品 | 色综合久久久久 | 欧美日本一区 | 国产伦精品一区二区三区高清 | 久久精品久久久久久 | av中文字幕在线播放 | 成人福利在线观看 | 国产在线观看网站 | 亚洲成人一区二区 | 国产美女自拍视频 | 日本五月婷婷 | 国久久 | 91亚洲精品在线 | 欧美一区精品 | 91xxx在线观看 | 视频一区 国产精品 | 欧美成人精品欧美一级 | 欧美视频1区 | 99热碰| 午夜a区 | 国产精品久久久久久久久久久久久 | 精品一区二区视频 | 中文字幕在线看第二 | aa级毛片毛片免费观看久 | 亚洲一区二区三区四区在线观看 | 国内精品久久久久久影视8 最新黄色在线观看 | 久草热在线| 国产精品日韩高清伦字幕搜索 | 国产在线激情视频 | 人人草人人干 | 中文精品一区二区 | 日韩在线国产精品 | 91久久精品一区二区二区 | 午夜精品久久久久久久星辰影院 | 国产成人99久久亚洲综合精品 | 国产精品一区二区免费 | 日本免费一区二区三区 | 偷拍自拍在线观看 | 男女视频免费 | 欧美一区在线视频 |