本文主要介紹一些dotNet加密保護工具的原理以及就其脫殼進行簡單探討
remotesoft protector
maxtocode
Net Reactor
Cliprotector
themida
Net
xenocode native compiler
DNGuard
remotesoft protector 應該是一款比較老的
net加密保護工具了
看其官方網站似乎還是
年更新過
該軟件沒有提供試用版下載
相關資料比較少
去年接觸過一個該軟件保護的
Net程序
加密後的程序發布時需要附帶native 的 dll
這款殼可以算是jit層的殼
是jit wrap 模式
通過hook getJit函數
攔截 jit 請求
在每次發生jit請求時其運行庫會將加密的程序集完全
原地
解密還原
特點
整體解密
脫殼
攔截地層jit請求
然後中斷
這時程序集已經完全解密
直接pe dump就行了
maxtocode
這個大家應該比較熟悉了
和 remotesoft protector 應該時前後腳起步的關系吧
其
x
x
x和
內核有很大差別
特點
單方法體解密
maxtocode
x 版本沒有用過
不過DST組的菩提曾經寫過 maxtocode
x 的脫殼機
maxtocdoe
x 其內核是EE層
單方法體
原地
解密
編譯之後再擦除解密的代碼
脫殼
因為是
原地
解密
所以方法體代碼逃不過profile的
可以在profile裡面記錄每個方法體
然後填充到文件中
方法二
nop 調 其內核 的擦除代碼
這個不用修改其內核文件
只要還原 mscorwks
dll 中其hook的第二處地方即可
這樣方法體解密後就在內存中了
所有方法invoke一面
直接pe dump即可
maxtocode
x
這個版本接觸得比較多
我接觸的第一個maxtocode版本就是
這一版其內核相對
x變動比較大
方法體已經不是原地
解密的了
也就是說profile已經不能監視到其il代碼了
這算是一個巨大的進步吧
x的內核基本上是一樣的
只是後續的版本針對反射做了一些小動作
脫殼
直接反射
修復後反射
方法二
直接調用其內核的解密函數進行脫殼
簡單快速
maxtocode
企業版
Jit層內核
其在 ee 層和 jit層均安裝了多處 hook
其內核在前面的文章裡面有詳細介紹
脫殼
因其jit層內核的漏洞
可以用簡單的方式還原方法體
Hook Jit 後可以簡單的進行方法體還原完成單個方法的脫殼
把每個方法都脫一面
填回文件即可
Net Reactor 一款很特別的
net加密殼
它有兩種模式
application 和 library
第一種模式 是程序整體加密
然後創建一個native的loader
整體加密的脫殼很簡單
dump 內存即可
第二種模式 加密後的程序集也要帶一個native的dll
和maxtocode一樣
加了很多靜態構造函數
一個startup函數
但是在 startup函數調用後
即完成了程序集的全部
原地
解密
所以運行後直接dump內存就可以了
脫殼
直接pe dump
CliProtector
一款jit層的加密殼
大概是去年年底發現的
當時我在進行DNGuard
的開發
經分析後發現其內核模式和當時DNGuard
的jit層內核很相似
分析後不久就發現了其jit層內核處理的一個漏洞
可以用簡單的方式還原方法體
也就是最近在maxtocode
企業版中發現的那個
在我的DNGuard
中對這個漏洞進行了預防處理
個人感覺其模式兼容性比maxtocode
企業版要好
只是可惜
它除了有jit層漏洞
還偷了賴
IL代碼沒有加密
和我出的dnguard
demo一樣
只是把 il搬了一下位置
沒有加密
不過對於jit層脫殼來說加不加密倒無所謂了
但這樣可能導致破解者從另一個角度去脫殼了
特點
單方法體解密
脫殼
Jit hook
簡單方法體還原
同maxtocode
企業版的脫殼方式
方法二
分析其加密文件結構
直接還原(因其il代碼沒有加密
可以不用考慮解密算法的研究)
themida Net themida 是win
的一個強殼
它支持
Net的加密
其加密方式是整體加密
但是憑借其win
anti的優勢
相比其它整體加密的加密工具來說強度要高一點
不過也就僅僅那麼一點
脫殼
過anti
pe dump
xenocode native compiler xenocode 的專長是混淆保護
不過它也提供了一個所謂的生成本地代碼的功能
其生成本地代碼其實就是把 程序集打包
創建一個native loader
但是它的打包把framework都包進去了
也就是說打包後的程序可以在沒有安裝framework的機器上直接運行
代價是生成的文件體積非常大
因為它把十幾兆的framework包進去了
脫殼
直接pe dump
方法二
分析其打包的文件格式直接解包(已有工具)
DNGuard
內核模式同 maxtocode
x
脫殼方式也雷同
DNGuard
Jit層內核
同maxtocode
企業版和CLIProtector
相比少了一個漏洞
不能用簡單方式還原方法體
如果破解者對jit內核工作非常熟悉
也能從jit層的結構體中重構出方法體
脫殼
Jit hook 結構體重構模式
總結
以上除了 maxtocode
x
DNGuard
CLiProtector 外
其它工具加密的程序都存在profile漏洞
可以通過profile獲取代碼
綜合兼容性和強度 CLiProtector 和 maxtocode
企業版 要好一些
DNGuard
的強度好一些
兼容性比較差
就只支持 v
的framework
DNGuard新版已經開始采用兼容全部framework的模式了
上面的所有工具加密的程序集
都可以直接在jit層中截獲 IL字節碼
IL字節碼不是方法體
它是方法體的一部分
只取得il字節碼無法完成脫殼工作
但是已可反為MSIL匯編代碼
進行算法分析了
DNGuard HVM的目標就是不讓jit層截獲可分析的IL字節碼
From:http://tw.wingwit.com/Article/program/net/201311/11563.html