程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 常見dotNet加密保護工具分析介紹

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

編輯:.NET實例教程

本文主要介紹一些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字節碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved