NET程式集反編譯/破解
作者: 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碼顯示更多的訊息,提供判斷之用。
[image|ILDASM|{UP}Program%2fNetReflector%2fIldasm.gif]
常見的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||{UP}Program%2fNetReflector%2fReflector.gif]
Reflexil的使用教學可以參考文獻#4,重點在於若你不知該怎麼改IL起迄值,可以按右鍵「Replaceall with code」直接在該method中改程式碼,再按「Preview IL」鍵即可幫你產生並替換掉該method內的所有IL值,這貼心功能在破解註冊或驗證函式中,相當好用。
[image||{UP}Program%2fNetReflector%2fReflexil.gif]
最重要的是,利用Reflexil改好IL值了,怎麼產生新的Patched Assembly呢? 找了好久,才發現原來要在Reflector左邊樹狀節點中,在該Assembly.exe或dll的根節點單擊,Reflexil窗格才會顯現Save As/Reload的按鍵。
以上是簡易教學,應該足夠讓你心驚膽跳,原來.NET反編譯/破解竟如此簡單,令人得趕快尋求混淆(obfuscator)或加密軟體來保護自己辛苦的勞動成果。這種破解別人/防護自己的矛盾心態很可議,在此純粹介紹反編譯軟體,精神層面就不多說了。
(((
參考文獻:
#[http://www.cnblogs.com/montaque/archive/2005/01/10/89464.html|使用 Ildasm,ILasm, Peverify 來 Crack 別人寫的應用程式]
#[http://www.aisto.com/roeder/dotnet/|Reflector for .NET]
#[http://sourceforge.net/projects/reflexil/|Reflector Plug-in: Reflexil]
#[http://www.codeproject.com/KB/msil/reflexil.aspx|Assembly Manipulation andC#/VB.NET Code Injection]
)))