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