常見dotNet加密保護工具分析介紹

瑞克-rick發表於2007-07-27

本文主要介紹一些dotNet加密保護工具的原理以及就其脫殼進行簡單探討。remotesoft protector、maxtocode、.Net Reactor、Cliprotector

、themida .Net、xenocode native compiler、DNGuard。

remotesoft protector

應該是一款比較老的。net加密保護工具了,看其官方網站似乎還是06年更新過。該軟體沒有提供試用版下載,相關資料比較少。去年接觸過一

個該軟體保護的.Net程式。加密後的程式釋出時需要附帶native 的 dll。
這款殼可以算是jit層的殼,是jit wrap 模式,通過hook getJit函式,攔截 jit 請求。在每次發生jit請求時其執行庫會將加密的程式集完全

“原地” 解密還原。

特點:整體解密
脫殼:攔截地層jit請求,然後中斷。這時程式集已經完全解密,直接pe dump就行了。

 

maxtocode
這個大家應該比較熟悉了,和 remotesoft protector 應該時前後腳起步的關係吧。其1.x,2.x,3.1x和3.2核心有很大差別。
特點:單方法體解密

maxtocode 1.x 版本沒有用過,不過DST組的菩提曾經寫過 maxtocode 1.x 的脫殼機。

maxtocdoe 2.x 其核心是EE層,單方法體“原地”解密。編譯之後再擦除解密的程式碼。

脫殼:因為是“原地”解密,所以方法體程式碼逃不過profile的。可以在profile裡面記錄每個方法體,然後填充到檔案中。
方法二:nop 調 其核心 的擦除程式碼。這個不用修改其核心檔案,只要還原 mscorwks。dll 中其hook的第二處地方即可。這樣方法體解密後就

在記憶體中了。所有方法invoke一面,直接pe dump即可。

maxtocode 3.1x,這個版本接觸得比較多,我接觸的第一個maxtocode版本就是3.10。這一版其核心相對2.x變動比較大。方法體已經不是原地

解密的了,也就是說profile已經不能監視到其il程式碼了,這算是一個巨大的進步吧。3.1x的核心基本上是一樣的,只是後續的版本針對反射做

了一些小動作。

脫殼:直接反射、修復後反射。
方法二:直接呼叫其核心的解密函式進行脫殼,簡單快速。

maxtocode 2007 企業版,Jit層核心 ,其在 ee 層和 jit層均安裝了多處 hook。其核心在前面的文章裡面有詳細介紹。

脫殼:因其jit層核心的漏洞,可以用簡單的方式還原方法體。Hook Jit 後可以簡單的進行方法體還原完成單個方法的脫殼。
把每個方法都脫一面,填迴檔案即可。

.Net Reactor
一款很特別的。net加密殼。它有兩種模式, application 和 library。
第一種模式 是把 。net程式整體加密,然後建立一個 native的loader。整體加密的脫殼很簡單,dump 記憶體即可。

第二種模式 加密後的程式集也要帶一個native的dll。和maxtocode一樣,加了很多靜態建構函式,一個startup函式。
但是在 startup函式呼叫後,即完成了程式集的全部“原地”解密。所以執行後直接dump記憶體就可以了。

脫殼:直接pe dump。

CliProtector
一款jit層的加密殼,大概是去年年底發現的。當時我在進行DNGuard2.0的開發,經分析後發現其核心模式和當時DNGuard 2.0的jit層核心很相似。分析後不久就發現了其jit層核心處理的一個漏洞,可以用簡單的方式還原方法體。也就是最近在maxtocode 2007 企業版中發現的那個。在我的DNGuard 2.0 中對這個漏洞進行了預防處理。
個人感覺其模式相容性比maxtocode 2007企業版要好。只是可惜,它除了有jit層漏洞,還偷了賴,IL程式碼沒有加密,和我出的dnguard 1.0 demo一樣,只是把 il搬了一下位置,沒有加密。不過對於jit層脫殼來說加不加密倒無所謂了。但這樣可能導致破解者從另一個角度去脫殼了。
特點:單方法體解密
脫殼:Jit hook,簡單方法體還原, 同maxtocode2007企業版的脫殼方式。
方法二:分析其加密檔案結構,直接還原(因其il程式碼沒有加密,可以不用考慮解密演算法的研究)。

themida .Net
themida 是win32的一個強殼,它支援 。Net的加密,其加密方式是整體加密,但是憑藉其win32 anti的優勢,相比其它整體加密的加密工具來說強度要高一點,不過也就僅僅那麼一點。

脫殼:過anti,pe dump。

xenocode native compiler
xenocode 的專長是混淆保護,不過它也提供了一個所謂的生成原生程式碼的功能。其生成原生程式碼其實就是把 程式集打包,建立一個native loader。但是它的打包把framework都包進去了,也就是說打包後的程式可以在沒有安裝framework的機器上直接執行,代價是生成的檔案體積非常大,因為它把十幾兆的framework包進去了。

脫殼:直接pe dump。
方法二:分析其打包的檔案格式直接解包(已有工具)。

DNGuard 1.0 核心模式同 maxtocode 3.1x。脫殼方式也雷同。

DNGuard 2.0 Jit層核心,同maxtocode 2007企業版和CLIProtector。相比少了一個漏洞,不能用簡單方式還原方法體。
如果破解者對jit核心工作非常熟悉,也能從jit層的結構體中重構出方法體。

脫殼:Jit hook 結構體重構模式。

總結:
以上除了 maxtocode 3.x, DNGuard, CLiProtector 外,其它工具加密的程式都存在profile漏洞,可以通過profile獲取程式碼。

綜合相容性和強度 CLiProtector 和 maxtocode 2007 企業版 要好一些。
DNGuard 2.0的強度好一些,相容性比較差,就只支援 v2.0.50727.42 的framework。

DNGuard新版已經開始採用相容全部framework的模式了。

上面的所有工具加密的程式集,都可以直接在jit層中截獲 IL位元組碼。 IL位元組碼不是方法體,它是方法體的一部分。
只取得il位元組碼無法完成脫殼工作,但是已可反為MSIL彙編程式碼,進行演算法分析了。

DNGuard HVM的目標就是不讓jit層截獲可分析的IL位元組碼。

 

 

 


相關文章