前言
在項目的進行中有時會碰到需要去了解由第三方所開發的程序代碼或者因為年久已經遺失原始碼的程序,由于因為是別人寫的所以我們并沒有原始碼可以直接閱讀,碰到這種情況我們就需要去反編譯這些程序及 DLL 檔案。
首先大概介紹一下 DLL 是什么,DLL 全名是 Dynamic Linking Library (動態鏈接庫),當你使用 .NET 開發應用程序時,使用的是網站項目或類別庫時,當項目建置完成后即會在項目底下的 Bin 數據夾中產生將你所撰寫項目中所有的 Class 檔案編譯成 DLL 檔案,而如果開發的是共享工具類別庫,就能夠將此 DLL 檔案提供給多個應用程序與網站參考使用。
但 DLL 檔案是編譯過后的檔案,一般情況下是無法得知內部撰寫的程序代碼,所以在此就必須要使用反編譯的工具來協助去窺探 DLL 內的原始碼,在此要注意一點,DLL 檔案是可以被反編譯的,所以不要以為將程序寫成 DLL 檔案后別人就無法可以得知內容,但如果真的要隱藏 DLL 的內容,可以透過混淆 DLL 的方式來將 DLL 檔案內的程序代碼搞得亂七八糟,增加被反編譯后閱讀的困難度。
建立一個類別庫
在反編譯 DLL 之前我們先建立一個類別庫來供之后反編譯使用,開啟 VS 建立一個類別庫項目,如下
接著建立一個 SalaryHelper 的 Class 檔案用來計算薪資金額,如下
而 SalaryHelper Class 的內容就簡單的撰寫一個方法并回傳薪資金額,如下view sourcePRint?01.namespace Tools02.{03.public class SalaryHelper04.{05.public decimal GetMySalary()06.{07.return 22000;08.}09.}10.}最后在建立一個 Consoleapplication 將 Tools 類別庫加入參考,并且呼叫 GetMySalary() 方法取得薪資,如下
view sourceprint?01.namespace ConsoleApp02.{03.class Program04.{05.static void Main(string[] args)06.{07.Tools.SalaryHelper helper = new Tools.SalaryHelper();08.Console.WriteLine(09.string.Format("My Salary is {0}", helper.GetMySalary().ToString()));10.Console.Read();11.}12.}13.}執行結果如下

使用 IL 反組譯工具
在安裝 Visual Studio 時通常會一并安裝 Windows SDK Tools,在 Windows SDK Tools 中有一個 IL 反組譯工具可以將 DLL 檔案反編譯成中間語言,如下


透過 IL反組譯工具 將 DLL 反編譯成中間語言后就能夠與原始碼進行對應,不過此中間語言實在非常不親切,所以我們將改使用其它的工具來進行反編譯動作。
用來反編譯的工具中比較常聽到的就是 Redgate .NET Reflector 與 Telerik .NET Decompiler 此兩款工具,.NET Reflector 此工具是需要收費的工具,但是功能還蠻強大的,如果有經常頻繁深入的使用時建議可以購買此款工具,而 .NET Decompiler 則是免費的反編譯工具,功能雖沒 .NET Reflector 強大,但是是免費的先夠用就好啦,以下就用此工具來進行示范。
使用 Telerik .NET Decompiler 工具反編譯程序代碼
首先進入下載網址點選 Free Download 下載安裝檔案
下載完成后就可以進行安裝,下一步下一步....的點到完成
安裝完成后到 「開始」→「所有程序」→「Telerik」找到 Telerik JustDecompile 程序執行,如下
開啟 JustDecompile 程序后,點選上方工具列的 「Open...」→「File(s)...」尋找到我們建立的 Tools DLL 檔案開啟
開啟后展開的樹狀目錄如下,并且在 Tools 命名空間中找到我們撰寫的 SalaryHelper Class
選擇到 SalaryHelper 后,右邊的分隔窗口就會顯示該類別反編譯后的程序代碼,如下
反編譯的程序代碼
原始的程序代碼
透過 .NET Decompiler 工具將 DLL 檔案反編譯后,是不是發現兩著的相似度很高且非常親切呢 :P,另外此工具也能夠將反編譯的程序代碼轉換為其它語言的代碼,在上方的工具列上可以看到一個 C# 的下拉選單,點擊后可選擇 C#、VB、IL 語言
若你是撰寫 VB 語言的,可以將 C# 改成 Visual Basic ,修改后反編譯的代碼就會變成 Visual Basic 語言的程序代碼,是不是很方便呢。
使用此工具還有還有還有一個很重要的功用是可以去看 .NET Framework 實作的類別庫!如果是在 Open 的時候選擇的是 Load Framework 就可以選擇已安裝的 .NET Framework 開啟來閱讀,如下
如此就能夠看到 .NET Framework 類別庫中底層去實作功能的做法,以上就是一個簡單使用的方法,供各位有需要的人作為參考啦。新聞熱點
疑難解答