可以反编译用C编写的DLL吗?
我想反编译我认为是用C编写的DLL。我该怎么做?
简答:你不能。
答案很长: C / C ++的编译过程非常有用。 编译器对代码进行了大量的高级和低级优化,并且生成的汇编代码往往与原始代码完全不同。 此外,市场上有不同的编译器(每个编译器都有几个不同的有效版本),每个编译器生成的输出略有不同。 在不知道使用哪种编译器的情况下,反编译的任务变得更加无望。 在最好的情况下,我听说过一些可以给你一些部分反编译的工具,在这里和那里都能识别出一些C代码,但是你仍然需要阅读大量的汇编代码来理解它。
这就是为什么复制保护软件难以破解并需要特殊assembly技能的原因之一。
这是可能的,但是非常困难,即使你非常精通C语言,汇编以及操作系统的复杂性,这些代码应该起作用,也需要花费大量的时间。
问题是,优化使编译后的代码难以为人类识别/理解。
此外,如果反汇编程序丢失信息,则会出现歧义(例如,相同的指令可以以不同的方式编码,并且如果代码的其余部分依赖于许多反汇编程序(或其用户)未能考虑的特定编码,则结果反汇编变得不完整或不正确)。
自修改代码也使问题复杂化。
有关主题和可用工具的更多信息,请参阅此问题 。
你可以,但只能达到一定程度:
- 优化可能会改变代码
- 符号可能已被剥离(DLL允许通过索引而不是符号引用驻留在内部的函数)
- 某些指令组合可能无法转换为C.
- 以及其他一些我可能忘记的事情……