【问题标题】:Decompiling code (language independent) [closed]反编译代码(与语言无关)[关闭]
【发布时间】:2026-02-20 03:00:01
【问题描述】:

无论源代码使用何种编程语言,都可以使用什么软件查看 .dll 文件中的源代码?

【问题讨论】:

    标签: dll decompiling


    【解决方案1】:

    如果它是托管 DLL (.NET),您可以使用 ReflectorILDASM 等工具打开它,您将看到 IL 代码。 (编辑 2017-02-03:在 7 年多的时间里,.NET 反汇编程序当然取得了很大进步,现在能够生成非常体面的 C# 代码)

    如果它是非托管 DLL(本机),那么您就不走运了。你能做的最好的就是加载一个反汇编程序。除非你确切地知道你想去哪里,否则你几乎无处可去。

    【讨论】:

      【解决方案2】:

      您对反编译程序集感兴趣。好吧,这是反编译 .NET 程序集的开始:http://aspnet.4guysfromrolla.com/articles/080404-1.aspx

      .NET 社区中用于反编译程序集的流行工具是.NET Reflector

      【讨论】:

      • 对于“查看源代码”的各种定义。干杯。
      • ya.. .net DLL 代码我可以看到,但我有 win32 语言 DLL。是否可以为此进行反编译。
      【解决方案3】:

      不可能(1) 将目标代码反编译为源代码。检查接口完全是另一回事。有一些工具存在,但我不知道任何副手。

      (1) - 好吧,在某些语言和特定条件下,这是可能的,但生成的代码不会完全可读...

      您将获得的唯一可读代码是汇编语言(为此有很多程序)。有一些语言可以反编译为原始(或接近)源代码,例如 Visual Basic 3。但是现在谁用 VB3 编写程序?没有人。至于查看 DLL 的导入/导出,您可以使用以下 Dependency walker 程序: http://www.dependencywalker.com/

      对于某些语言,例如 Visual Basic 或 C#,如果您使用良好的反编译器并且代码没有经过混淆(大多数时候没有混淆),您可以获得可读的源代码

      如果您对反编译感兴趣,请查看此网站: http://www.program-transformation.org/Transform/DecompilationPossible

      对于 .Net,.NET Reflector 是必经之路。它会将你的 dll 反编译成 C# 或 VB.NET http://www.aisto.com/roeder/dotnet/

      【讨论】:

        【解决方案4】:

        对于 .NET,Reflector 将执行此操作; "Pro" version(现在为预览版)有一个 Visual Studio 插件,可让您在 VS IDE 本身中调试大多数托管代码,而不是作为一个单独的工具。到目前为止,它看起来非常甜蜜。

        Reflector EAP http://www.simple-talk.com/community/blogs/alex/attachment/74919.ashx

        【讨论】:

          【解决方案5】:

          它们是不同的格式。

          对于 .NET dll,您可以使用 ildasm.exe(随 .net 框架安装)或 .NET Reflector(下载)

          【讨论】:

          • 谢谢,但是 win32 DLL 怎么样?
          • 它们不是那么容易反编译成它们的原始语言。我不知道有什么好的工具,除了反汇编器(然后你只会看到 x86 汇编......)
          【解决方案6】:

          关于反编译 .NET 已经说得够多了。如果您决定从逆向工程原生二进制文件开始,我建议使用IDA

          它支持不同的操作系统、处理器架构、检测和显示标准库的使用情况(因此您可以轻松找到感兴趣的地方)、显示子例程之间的依赖关系图、显示堆栈中的过程参数等。它也可以编写脚本并且有重新编写detect C++ classes and try-catch blocksfinds COM interfaces names for UUIDs 的脚本并执行许多其他操作。这是一个很棒的工具,而且有免费版本。

          【讨论】:

          • 关于 IDA 的一些警告: 1. 免费版本(可在download center 获得)比商业版本落后许多版本,仅支持 32 位二进制文​​件; 2.“starter”商业版目前售价589美元,“不支持64位文件”; 3.“专业”版(支持64位文件)售价1129美元。
          【解决方案7】:

          要反编译 .Net DLL,您可以使用 .Net Reflector。它适用于以任何 .Net 语言编写的 DLL。

          要反编译 Java JAR 文件,请尝试 Java Decompiler

          反编译本机代码 (C++) 要困难得多。

          【讨论】:

            【解决方案8】:

            除非您在 .NET 领域,否则 DLL 中的内容是二进制代码。您可以在其中看到的唯一语言是汇编程序——它只是呈现机器语言的一种助记方式。

            【讨论】:

              【解决方案9】:

              无论您使用哪种 .Net 语言 - 所有内容都将编译为 MSIL(Microsoft 中间语言)。您可以使用 Ildasm 之类的工具将其转换为可读的“反汇编文本”:

              http://msdn.microsoft.com/en-us/library/f7dy01k1.aspx

              你也可以使用反射器: http://www.builderau.com.au/program/asp/soa/Look-inside-NET-DLL-files-with-Reflector/0,339028371,339287377,00.htm

              检查类和方法(它支持不同的 .Net 语言)

              【讨论】:

                【解决方案10】:

                对于原生 DLL 的 this program,Hex-Rays Decompiler(优秀的 IDAPro 反汇编调试器之上的一层)可能与您所能获得的一样接近。它不会恢复原始代码,而是将反汇编转换为类似 C 的伪代码。不过也不便宜。

                【讨论】: