好用的 .NET 反組譯工具:Reflector.FileDisassembler

Reflector.FileDisassemblerReflector 的附加元件(add-in),有了它,就可以把整個 DLL 組件的所有類別一次反組譯成各個對應的類別檔,還挺好用的。

使用方法:
  1. Reflector.FileDisassembler 壓縮檔解開。我是把解開後的檔案放在 Reflector 程式所在目錄下的 Addins 資料夾。
  2. 開啟 Reflector,點 View > Add-ins > Add,然後選擇 Reflector.FileDisassembler.dll。選好之後關閉 Add-ins 視窗。
  3. 將欲反組譯的 DLL 加入 Reflector,並選取該 DLL。
  4. 點 Tools > Fils Disassembler,接著選擇原始碼要輸出到哪個資料夾,然後按 Generate 鈕,就可以產生 DLL 檔案中所有類別的原始碼。
參考畫面:



反組譯過程中,如果出現訊息視窗,告訴你找不到某些參考的 DLL,可按 Skip 忽略之。反組譯完成之後,開啟 Visual Stduio,建立一個新的 Class Library 專案,再將反組譯出來的原始碼加入專案,就可以進行編譯了。

不過,反組譯產生的原始碼不見得能順利通過編譯。我在反組譯成 C# 程式碼時,至少碰到下列問題:
  1. 有些變數名稱會帶 $ 符號,以至於無法編譯。
  2. 區域變數名稱重複宣告。
  3. 函式的引數型別為列舉常數,可是呼叫時卻直接傳入整數。
還好這些問題並不嚴重,稍微改一下程式碼就能解決。

另一款類似的工具 FileGenerator For Reflector 雖然連專案檔都可以幫你產生,但我試的結果是無法順利產生原始碼,每次都卡在找不到其他參考的 DLL 檔案。

ps. 對於經過混淆器「攪拌」過的 DLL,就不用費神反組譯了,除非裡面真有什麼非取得不可的寶物,值得花上幾天甚至幾星期的時間去鑽研。

Post Comments

技術提供:Blogger.