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

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

 

http://www.dnguard.net/index.php算法

相關文章
相關標籤/搜索