微軟Dotnet反編譯工具 ILDASM 4.0,可以繞過DOTNET自身的Protected Module保護。
MSIL 反匯編程序是 MSIL 匯編程序 (Ilasm.exe) 的伙伴工具。Ildasm.exe 采用包含 Microsoft 中間語言 (MSIL) 代碼的可移植可執(zhí)行 (PE) 文件,并創(chuàng)建相應的文本文件作為 Ilasm.exe 的輸入。
Ildasm.exe(MSIL 反匯編程序)
安裝 Visual Studio 和 Windows SDK 時會自動安裝此工具。 要運行工具,我們建議您使用 Visual Studio 命令提示符或 Windows SDK 命令提示符(也稱 CMD Shell)。 您可以使用這些實用程序輕松運行工具,而不需要導航到安裝文件夾。 有關更多信息,請參見Visual Studio 和 Windows SDK 命令提示。
如果您的計算機上已安裝了 Visual Studio:在任務欄上依次單擊 Start、All Programs、Visual Studio、Visual Studio Tools、Visual Studio Command Prompt。
- 或 -如果您的計算機上已安裝了 Windows SDK:在任務欄上依次單擊 Start、All Programs、Windows SDK 文件夾和 Command Prompt(或CMD Shell)。
在命令提示處,鍵入下列命令:
ildasm [options] [PEfilename] [options]
參數(shù)
以下選項對.exe、.dll、.obj、.lib 和.winmd 文件可用。
選項 | 描述 |
---|---|
/out= filename | 創(chuàng)建具有指定 filename 的輸出文件,而不是在圖形用戶界面中顯示結果。 |
/rtf | 以 RTF 格式生成輸出。 與 /text 選項一起使用則無效。 |
/text | 將結果顯示到控制臺窗口,而不是顯示在圖形用戶界面中或顯示為輸出文件。 |
/html | 以 HTML 格式生成輸出。 與 /output 選項一起使用時才有效。 |
/? | 顯示此工具的命令語法和選項。 |
以下附加選項為.exe、.dll 和.winmd 文件可用。
選項 | 描述 |
---|---|
/bytes | 以十六進制格式顯示作為指令注釋的實際字節(jié)。 |
/caverbal | 以文字形式生成自定義特性 Blob。 默認為二進制形式。 |
/linenum | 包含對原始源行的引用。 |
/nobar | 取消反匯編進度指示器彈出窗口的顯示。 |
/noca | 禁止顯示自定義特性的輸出。 |
/project | 顯示元數(shù)據(jù)時所采用的方式顯示對出現(xiàn)在本機 Windows 運行時的托管代碼,而不是該方法。 如果 PEfilename 不是 Windows 元數(shù)據(jù)(.winmd)文件,此選項不起作用。 請參見 .NET Framework 對 Windows 應用商店應用程序和 Windows 運行時的支持情況。 |
/pubonly | 只反匯編公共類型和公共成員。 等效于 /visibility:PUB。 |
/quoteallnames | 在單引號中包含所有名稱。 |
/raweh | 以原始格式顯示異常處理子句。 |
/source | 顯示作為注釋的原始源行。 |
/tokens | 顯示類和成員的元數(shù)據(jù)標記。 |
/visibility:vis[+vis...] | 只反匯編具有指定可見性的類型或成員。 以下是 vis 的有效值: PUB -- Public PRI -- Private FAM -- Family ASM -- Assembly FAA -- Family 和 Assembly FOA -- Family 或 Assembly PSC -- Private Scope 有關這些可見性修飾符的定義,請參見 MethodAttributes 和 TypeAttributes。 |
以下選項只文件或控制臺輸出的.exe、.dll 和.winmd 文件是否有效。
選項 | 描述 |
---|---|
/all | 指定 /header、/bytes、/stats、/classlist 和 /tokens 選項的組合。 |
/classlist | 包含模塊中定義的類的列表。 |
/forward | 使用前向類聲明。 |
標頭 | 在輸出中包含文件頭信息。 |
/item: 類[::成員[(sig]] | 根據(jù)所提供的參數(shù)反匯編下列內容: 反匯編指定的 class。 反匯編指定的 class 的 member。 反匯編具有指定簽名 sig 的 class 的 member。 sig 的格式如下所示: [instance] returnType(parameterType1, parameterType2, …, parameterTypeN) 必須用一個右括號按照在.NET Framework 1.0 版和 1.1 版中,sig 的附注 :(sig)。 啟動 .Net Framework 2.0 版時,必須省略右括號:(sig。 |
/noil | 取消 MSIL 程序集代碼輸出。 |
/stats | 包含映像的統(tǒng)計信息。 |
/typelist | 生成類型的完整列表,以便在往返過程中保留類型排序。 |
/unicode | 對輸出使用 Unicode 編碼。 |
/utf8 | 對輸出使用 UTF-8 編碼。 默認值是 ANSI。 |
以下選項只文件或控制臺輸出的.exe、.dll、.obj、.lib 和.winmd 文件是否有效。
選項 | 描述 |
---|---|
/metadata[=specifier] | 顯示元數(shù)據(jù),其中 specifier 為: MDHEADER -- 顯示元數(shù)據(jù)頭信息和大小。 HEX -- 以十六進制形式及文字形式顯示信息。 CSV -- 顯示記錄數(shù)和堆大小。 UNREX -- 顯示無法解析的外部對象。 SCHEMA -- 顯示元數(shù)據(jù)頭和架構信息。 RAW -- 顯示原始元數(shù)據(jù)表。 HEAPS -- 顯示原始堆。 VALIDATE -- 驗證元數(shù)據(jù)的一致性。 可以多次指定 /metadata,并且為 specifier 指定不同的值。 |
下列選項僅對用于文件或控制臺輸出的 .lib 文件有效。
選項 | 描述 |
---|---|
/objectfile=filename | 顯示指定庫中單個對象文件的元數(shù)據(jù)。 |
說明 |
---|
Ildasm.exe 的所有選項不區(qū)分大小寫,并且由前三個字母識別。 例如,/quo 等效于 /quoteallnames。 指定參數(shù)的選項既可以用冒號 (:) 也可以用等號 (=) 作為選項和參數(shù)之間的分隔符。 例如,/output:filename 等效于/output=filename。 |
備注
Ildasm.exe 只對磁盤上的 PE 文件進行操作。 它不對安裝在全局程序集緩存中的文件進行操作。
Ildasm.exe 生成的文本文件可以用作 MSIL 匯編程序 (Ilasm.exe) 的輸入。 這很有用,例如當編譯用并非支持所有運行時元數(shù)據(jù)特性的編程語言編寫的代碼時。 通過 Ildasm.exe 編譯該代碼并運行輸出后,可以手動編輯結果 MSIL 文本文件以添加缺少的特性。 然后可以通過 MSIL 匯編程序運行此文本文件以生成最終的可執(zhí)行文件。
說明 |
---|
目前,無法對包含嵌入的本機代碼的 PE 文件(例如,由 Visual C++ 生成的 PE 文件)使用此技術。 |
可以使用 MSIL 反匯編程序中的默認 GUI,在分層樹視圖中查看任何現(xiàn)有 PE 文件的元數(shù)據(jù)和反匯編代碼。 若要使用此 GUI,請在命令行中鍵入 ildasm,無需提供 PEfilename 參數(shù)或任何選項。 從“文件”菜單,可以導航到要加載到 Ildasm.exe 中的 PE 文件。 若要保存為選定 PE 顯示的元數(shù)據(jù)和反匯編代碼,請從“文件”菜單選擇“轉儲”命令。 若要只保存分層樹視圖,請在“文件”中選擇“轉儲樹視圖”命令。 有關將文件加載到 Ildasm.exe 中和解釋輸出的詳細指南,請參見 Windows 軟件開發(fā)包 (SDK) 附帶的 Samples 文件夾中的 Ildasm.exe 教程。
如果用包含嵌入資源的 PEfilename 參數(shù)提供 Ildasm.exe,則此工具生成多個輸出文件:一個包含 MSIL 代碼的文本文件,而每個嵌入的托管資源都有一個用該資源在元數(shù)據(jù)中的名稱生成的 .resources 文件。 如果 PEfilename中有嵌入的非托管資源,則用 /output 選項為 MSIL 輸出指定的文件名生成 .res 文件。