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

.Net JIT的騷操作DNGuard HVM原理簡析

開發 前端
r11里面就是存儲是HVMRun64.dll里面的MSIL二進制代碼,rdi寄存器是JIT函數invokeCompileMethod參數methodInfo的地址,加上0x10為methodInfo.ILCode也即是混淆的MSIL二進制代碼的起始地址,把從HVMRun64.dll里面取出來的MSIL二進制代碼起始地址替換掉這個被混淆的MSIL二進制代碼的地址,然后運行完整流程。

前言

DNGuard HVM的牛掰之處在于,就算知道了它的原理,但是你依然無法很優雅的去破解它。本篇來看下。友情提示,看本篇前,可先預熱下前一篇:DNGuard HVM是如何加密.Net的

概括

1.MSIL保存

DNGuard HVM類庫模式編譯第一步就是把MSIL的原字節碼(你需要加密的托管DLL)二進制代碼保存在HVMRun64.dll里面以匯編的形式呈現。注意這里保存的是原字節碼二進制代碼,而不是保存字節碼編譯之后的匯編代碼。如果是保存的MSIL編譯后的匯編代碼,可以通過逆向匯編。但保存的字節碼的二進制代碼還需要通過CLR+JIT編譯成機器碼之后進行即時運行,RunHVM函數隨時可以Hook JIT或者CLR的某個地方或者幾個地方,對它進行篡改。逆向的難度呈幾何指數的增加。這里的MSIL的二進制代碼可以參考文章:罕見的技術:MSIL的機器碼簡析舉個例子以下C#代碼:

static void Main(string[] args)
{
  Console.ReadLine();
  Console.WriteLine("Call Main");
}

它的MSIL二進制代碼是:

00 28 0e 00 00 0a 26 72 01 00 00 70 28 0f 00 00 0a 00 2a 00 af 93 65 6c 00 13 00 80 00 00 00 00 00 00 00 00  //后面省略

這種二進制代碼,DNGuard會把它保存在HVMRun64.dll里面。

2.MSIL加密

當它保存好了原MSIL之后,就著手加密托管的DLL里面的MSIL,把它變成了

Dnspy/ILSpy/Dotpeek這種工具無法修改的MSIL。比如以上C#代碼被加密成了如下:

[NullableContext(1)]
[MethodImpl(MethodImplOptions.NoInlining)]
private static void Main(string[] args)
{
    throw new Exception("Error, DNGuard Runtime library not loaded!");
}

實際上就算是沒有加密MSIL,因為它是hook jit,也無法通過修改MSIL來變更源碼。

3.hook JIT

當運行被DNGuard修改的托管DLL的時候,RunHVM函數就會調用HVMRun64.dll里面的代碼hook即時.Net編譯器JIT里面的invokeCompileMethod函數,因為JIT會按照預定的順序編譯MSIL,而原有的MSIL被保存到了HVMRun64.dll里面去。被JIT執行的托管DLL里的MSIL則是被DNGuard加密過的是個錯誤的數據或者一堆亂數據。它hook這個函數的目的就是修改這個函數的參數里面保存的被DNGuard修改過了的MSIL二進制代碼的起始地址,它把這個起始地址Hook成上面第一步存放的MSIL二進制代碼的起始地址。此后JIT就會用Hook出來的地址,逐個編譯里面的MSIL二進制代碼,把它編譯成機器碼,然后運行。這樣就完成了完整的整個執行。以下是HVMRun64.dll對托管主函數Main進行Hook調用地址的順序,按照堆棧順序從下往調用。

0000000180497AB8 4C 89 5F 10          mov         qword ptr [rdi+10h],r11
00000001804839DF FF 1A                call        fword ptr [rdx]
0000000180015759 E8 A2 61 FF FF       call        000000018000B900
0000000180040918 E8 43 4B FD FF       call        0000000180015460

這四個地址里面的地址:00000001804839DF進行了四字節位移運行。這種加固靜態逆向的難度。

4.難點

這個過程的難點在于,DNGuard是以何種方式把原MSIL保存到HVMRun64.dll,然后又通過何種方式取出來。MSIL的二進制代碼存放在HVMRun64.dll的哪個地方?只要找到了存儲的位置,即可輕松破解DNGuard的加密。難點一:逆向調試DNGuard的時候,發現HVMRun64.dll里面的數據無法調試,只要下了斷點或者調試器進去就會導致數據更改,更改后的數據要么是空的那么就全是0xCCCC這種東西,然后報異常。下斷點導致數據更改,這跟.Net7里面的內存映射有點相似,這點還待研究。難點二:DNGuard在Hook JIT的時候,它會進行字節位移。比如本來的地址如下:

00000001804839DB: E8 1C F9 DD FF   call   00000001802632FC
00000001804839E0: 1A E8            sbb    ch,al

00000001804839DB這個地址看著沒問題,但是實際上它是個偽裝地址,在運行的過程中,會把這個地址加上4字節,也就是到了地址00000001804839DF這個地址,然后再運行。這樣導致了機器碼也跟著改變,靜態逆向完全無法展開,而動態逆向則坑爹的一筆,最新的DNGuard近5M大小,里面的匯編代碼高達153萬多行。基本上屬于無法逆向的存在。

5.破除按照以上原理認知,以下是個人認為 可行的理論上的破解之法

如下代碼:

0000000180497AB8 4C 89 5F 10   mov   qword ptr [rdi+10h],r11

r11里面就是存儲是HVMRun64.dll里面的MSIL二進制代碼,rdi寄存器是JIT函數invokeCompileMethod參數methodInfo的地址,加上0x10為methodInfo.ILCode也即是混淆的MSIL二進制代碼的起始地址,把從HVMRun64.dll里面取出來的MSIL二進制代碼起始地址替換掉這個被混淆的MSIL二進制代碼的地址,然后運行完整流程。

破一:根據RunHVM函數的原理,它hook JIT的函數,這里就hook這個JIT函數后面的一個函數,照樣獲取ILCode,修改后返回運行。這里是照貓畫虎,RunHVM怎么玩JIT,這里就怎么玩RunHVM。

破二:這里還有個破綻,因為0000000180497AB8這個地址則寫死在了HVMRun64.dll里面,再者[rdi+10h]這個地址是否能夠替換成別的地址,獲取MSIL的二進制起始地址,進行修改然后,也是可以從這里入手的。

可以看到即使知道了RunHVM原理,要想破除它依然有一定的難度。真正的實現可能比較不優雅的方式。

注:以上用于學習用途,其它用途均跟本人完全無關。

責任編輯:武曉燕 來源: 江湖評談
相關推薦

2023-10-27 14:33:46

2010-05-24 15:15:38

Swap space

2010-04-20 20:46:01

負載均衡

2025-04-07 03:00:00

MySQLDDLonline

2015-05-13 10:36:43

2010-04-16 14:16:23

Unix操作系統

2009-09-09 16:21:13

.NET序列化基礎知識

2024-05-21 14:12:07

2011-07-12 14:04:58

2023-10-31 11:46:32

編譯器托管CLR

2009-08-19 12:58:19

C#操作Word

2009-06-08 21:25:29

Java聲音技術

2010-09-08 16:25:39

SIP協議棧

2010-09-10 09:52:44

開源協議棧

2010-09-13 16:58:13

2010-05-06 12:02:43

路由負載均衡

2022-09-02 08:03:44

IO程序網卡

2011-06-16 10:04:36

光纜光纖

2009-08-13 15:48:57

C#指針

2010-06-21 14:05:08

Linux APM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一区在线观看 | 免费激情网站 | 久久久久九九九女人毛片 | 成年人黄色一级毛片 | www.国产精品 | 精精久久| 欧美日韩亚洲三区 | 99精品视频在线 | 亚洲成人av一区二区 | 国产精品视频久久久 | 一区二区国产精品 | 性xxxxx| 欧美日一区二区 | 免费在线看黄 | 天堂资源最新在线 | 国产91久久久久蜜臀青青天草二 | 日韩精品一区二区三区中文字幕 | 美女爽到呻吟久久久久 | aaaaaaa片毛片免费观看 | 亚洲精品久久久一区二区三区 | 亚洲精品久久久久久国产精华液 | 久久精品二区 | www.97国产 | 欧美1页 | 欧美小视频在线观看 | 狠狠做深爱婷婷综合一区 | 亚洲精品久久久久久国产精华液 | 欧美一区在线视频 | 91久久久久久久久 | 国产一级片在线观看视频 | 中文字幕国产日韩 | 99热精品在线观看 | 欧美精品在线免费 | 欧美中文字幕在线观看 | 中文字幕日韩一区 | 日韩视频免费 | 美人の美乳で授乳プレイ | 久久精品中文字幕 | 三级在线视频 | 色爱综合网 | 在线免费观看黄视频 |