可以反编译用C编写的DLL吗?

我想反编译我认为是用C编写的DLL。我该怎么做?

简答:你不能。

答案长: C / C ++的编译过程非常有用。 编译器对代码进行了大量的高级和低级优化,并且生成的汇编代码往往与原始代码完全不同。 此外,市场上有不同的编译器(每个编译器都有几个不同的有效版本),每个编译器生成的输出略有不同。 在不知道使用哪种编译器的情况下,反编译的任务变得更加无望。 在最好的情况下,我听说过一些可以给你一些部分反编译的工具,在这里和那里都能识别出一些C代码,但是你仍然需要阅读大量的汇编代码来理解它。

这就是为什么复制保护软件难以破解并需要特殊assembly技能的原因之一。

这是可能的,但是非常困难,即使你非常精通C语言,汇编以及操作系统的复杂性,这些代码应该起作用,也需要花费大量的时间。

问题是,优化使编译后的代码难以为人类识别/理解。

此外,如果反汇编程序丢失信息,则会出现歧义(例如,相同的指令可以以不同的方式编码,并且如果代码的其余部分依赖于许多反汇编程序(或其用户)未能考虑的特定编码,则结果反汇编变得不完整或不正确)。

自修改代码也使问题复杂化。

有关主题和可用工具的更多信息,请参阅此问题 。

你可以,但只能达到一定程度:

  1. 优化可能会改变代码
  2. 符号可能已被剥离(DLL允许通过索引而不是符号引用驻留在内部的函数)
  3. 某些指令组合可能无法转换为C.
  4. 以及其他一些我可能忘记的事情……