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

时间:2011-12-22 08:49:27

标签: c decompiling

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

3 个答案:

答案 0 :(得分:12)

简答:你不能。

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

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

答案 1 :(得分:3)

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

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

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

自我修改代码也使问题变得复杂。

请参阅this question有关该主题和可用工具的更多信息。

答案 2 :(得分:0)

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

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