微软Dotnet反编译工具 ILDASM 4.0,可以绕过DOTNET自身的Protected Module保护。
MSIL 反汇编程序是 MSIL 汇编程序 (Ilasm.exe) 的伙伴工具。Ildasm.exe 采用包含 Microsoft 中间语言 (MSIL) 代码的可移植可执行 (PE) 文件,并创建相应的文本文件作为 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]
参数
以下选项对.exe、.dll、.obj、.lib 和.winmd 文件可用。
选项 | 描述 |
---|---|
/out= filename | 创建具有指定 filename 的输出文件,而不是在图形用户界面中显示结果。 |
/rtf | 以 RTF 格式生成输出。 与 /text 选项一起使用则无效。 |
/text | 将结果显示到控制台窗口,而不是显示在图形用户界面中或显示为输出文件。 |
/html | 以 HTML 格式生成输出。 与 /output 选项一起使用时才有效。 |
/? | 显示此工具的命令语法和选项。 |
以下附加选项为.exe、.dll 和.winmd 文件可用。
选项 | 描述 |
---|---|
/bytes | 以十六进制格式显示作为指令注释的实际字节。 |
/caverbal | 以文字形式生成自定义特性 Blob。 默认为二进制形式。 |
/linenum | 包含对原始源行的引用。 |
/nobar | 取消反汇编进度指示器弹出窗口的显示。 |
/noca | 禁止显示自定义特性的输出。 |
/project | 显示元数据时所采用的方式显示对出现在本机 Windows 运行时的托管代码,而不是该方法。 如果 PEfilename 不是 Windows 元数据(.winmd)文件,此选项不起作用。 请参见 .NET Framework 对 Windows 应用商店应用程序和 Windows 运行时的支持情况。 |
/pubonly | 只反汇编公共类型和公共成员。 等效于 /visibility:PUB。 |
/quoteallnames | 在单引号中包含所有名称。 |
/raweh | 以原始格式显示异常处理子句。 |
/source | 显示作为注释的原始源行。 |
/tokens | 显示类和成员的元数据标记。 |
/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]] | 根据所提供的参数反汇编下列内容: 反汇编指定的 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 | 包含映像的统计信息。 |
/typelist | 生成类型的完整列表,以便在往返过程中保留类型排序。 |
/unicode | 对输出使用 Unicode 编码。 |
/utf8 | 对输出使用 UTF-8 编码。 默认值是 ANSI。 |
以下选项只文件或控制台输出的.exe、.dll、.obj、.lib 和.winmd 文件是否有效。
选项 | 描述 |
---|---|
/metadata[=specifier] | 显示元数据,其中 specifier 为: MDHEADER -- 显示元数据头信息和大小。 HEX -- 以十六进制形式及文字形式显示信息。 CSV -- 显示记录数和堆大小。 UNREX -- 显示无法解析的外部对象。 SCHEMA -- 显示元数据头和架构信息。 RAW -- 显示原始元数据表。 HEAPS -- 显示原始堆。 VALIDATE -- 验证元数据的一致性。 可以多次指定 /metadata,并且为 specifier 指定不同的值。 |
下列选项仅对用于文件或控制台输出的 .lib 文件有效。
选项 | 描述 |
---|---|
/objectfile=filename | 显示指定库中单个对象文件的元数据。 |
说明 |
---|
Ildasm.exe 的所有选项不区分大小写,并且由前三个字母识别。 例如,/quo 等效于 /quoteallnames。 指定参数的选项既可以用冒号 (:) 也可以用等号 (=) 作为选项和参数之间的分隔符。 例如,/output:filename 等效于/output=filename。 |
备注
Ildasm.exe 只对磁盘上的 PE 文件进行操作。 它不对安装在全局程序集缓存中的文件进行操作。
Ildasm.exe 生成的文本文件可以用作 MSIL 汇编程序 (Ilasm.exe) 的输入。 这很有用,例如当编译用并非支持所有运行时元数据特性的编程语言编写的代码时。 通过 Ildasm.exe 编译该代码并运行输出后,可以手动编辑结果 MSIL 文本文件以添加缺少的特性。 然后可以通过 MSIL 汇编程序运行此文本文件以生成最终的可执行文件。
说明 |
---|
目前,无法对包含嵌入的本机代码的 PE 文件(例如,由 Visual C++ 生成的 PE 文件)使用此技术。 |
可以使用 MSIL 反汇编程序中的默认 GUI,在分层树视图中查看任何现有 PE 文件的元数据和反汇编代码。 若要使用此 GUI,请在命令行中键入 ildasm,无需提供 PEfilename 参数或任何选项。 从“文件”菜单,可以导航到要加载到 Ildasm.exe 中的 PE 文件。 若要保存为选定 PE 显示的元数据和反汇编代码,请从“文件”菜单选择“转储”命令。 若要只保存分层树视图,请在“文件”中选择“转储树视图”命令。 有关将文件加载到 Ildasm.exe 中和解释输出的详细指南,请参见 Windows 软件开发包 (SDK) 附带的 Samples 文件夹中的 Ildasm.exe 教程。
如果用包含嵌入资源的 PEfilename 参数提供 Ildasm.exe,则此工具生成多个输出文件:一个包含 MSIL 代码的文本文件,而每个嵌入的托管资源都有一个用该资源在元数据中的名称生成的 .resources 文件。 如果 PEfilename中有嵌入的非托管资源,则用 /output 选项为 MSIL 输出指定的文件名生成 .res 文件。