達步社群專業網站 達步社群 (Dabutek Community)

RSS

社區設施





快速搜尋
»
進階搜尋» 技術支援官網
   
 
作者: Tomex Ou

.NET程式在執行時,會先編譯成中介語言IL,再轉成Native執行,因此中間IL階段就很容易被反組譯,甚至修改後達到程式破解目的。您可以參考文獻#1文章比較原始碼與IL的不同,當然,我們有更好的軟件工具來達到那樣的IL修改。不過是利用工具或反組譯,多少得看懂一點IL碼的區段起迄為宜,您可以使用VS內建的ildasm.exe來查看.NET Assembly的IL內容。VS2008預設安裝會放在: C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe

ILDASM.exe可以調整Menu下的View選項,讓IL碼顯示更多的訊息,提供判斷之用。 IL DASM

常見的IL特殊碼如下(跟破解有關),其他的請查google。稍微看得懂IL碼其實也蠻重要的,它可以藉由探知IL而改進上層C#/VB.NET程式碼語法,避免不必要的執行呼叫或浪費。剛開始看會覺得IL碼很不人性,看久就會寬心啦!
  • ret = return
  • ldc.i4.1 = true
  • ldc.i4.0 = false


接下來,你可以使用文獻#2的軟體「Reflector for .NET]去打開欲探究的.NET Assembly 另外它有個plug-in工具Reflexil(文獻#3)能讓你直接修改IL為另存新檔(免去文獻#1文章的麻煩步驟) Image

Reflexil的使用教學可以參考文獻#4,重點在於若你不知該怎麼改IL起迄值,可以按右鍵「Replace all with code」直接在該method中改程式碼,再按「Preview IL」鍵即可幫你產生並替換掉該method內的所有IL值,這貼心功能在破解註冊或驗證函式中,相當好用。 Image

最重要的是,利用Reflexil改好IL值了,怎麼產生新的Patched Assembly呢? 找了好久,才發現原來要在Reflector左邊樹狀節點中,在該Assembly.exe或dll的根節點按一下,Reflexil窗格才會顯現Save As/Reload的按鍵。

以上是簡易教學,應該足夠讓你心驚膽跳,原來.NET反組譯/破解竟如此簡單,令人得趕快尋求混淆(obfuscator)或加密軟件來保護自己辛苦的勞動成果。這種破解別人/防護自己的矛盾心態很可議,在此純粹介紹反組譯軟件,精神層面就不多說了。


ScrewTurn Wiki version 3.0.5.600. Some of the icons created by FamFamFam.