【发布时间】:2012-01-25 22:41:58
【问题描述】:
我想反编译一个我认为是用 C 语言编写的 DLL。我该怎么做?
【问题讨论】:
标签: c decompiling
我想反编译一个我认为是用 C 语言编写的 DLL。我该怎么做?
【问题讨论】:
标签: c decompiling
简答:你不能。
长答案: C/C++ 的编译过程非常有损。编译器对您的代码进行了大量的高级和低级优化,并且生成的汇编代码通常与您的原始代码完全不同。此外,市场上有不同的编译器(每个都有几个不同的活动版本),每个编译器生成的输出都略有不同。在不知道使用了哪个编译器的情况下,反编译任务变得更加无望。充其量,我听说过一些工具可以为您提供一些部分反编译,并在各处识别出一些 C 代码,但您仍然需要通读大量汇编代码才能理解它。
顺便说一句,这也是软件复制保护难以破解并需要特殊组装技能的原因之一。
【讨论】:
.jar 文件,那么这些文件肯定需要硬编码到 DLL 中并在反编译中出现?
这是可能的,但非常困难,并且即使您非常精通 C、汇编和该代码应该工作的操作系统的复杂性,也将花费大量时间。
问题是,优化使编译后的代码很难被人类识别/理解。
此外,如果反汇编器丢失信息(例如,相同的指令可以以不同的方式编码,并且如果其余代码依赖于许多反汇编器(或其用户)未能考虑到的特定编码),则会出现歧义,由此产生的反汇编变得不完整或不正确)。
自修改代码也使事情复杂化。
在this question 中查看有关该主题和可用工具的更多信息。
【讨论】:
你可以,但只能在一定程度上:
【讨论】: