我认为 java 可执行文件(jar 文件)很容易反编译并获取源代码。

其他语言呢?.net 等等?

哪些语言只能编译为可反编译的代码?

有帮助吗?

解决方案

一般来说,像Java、C#和VB.NET这样的语言相对容易反编译,因为它们被编译为中间语言,而不是纯机器语言。在 IL 形式中,它们在编译为机器语言时比 C 代码保留更多的元数据。

从技术上讲,您并没有获得原始源代码,而是源代码的变体,在编译时,它将返回编译后的代码。它与源代码不同,因为注释、注释和编译器指令等内容通常不会转移到编译后的代码中。

其他提示

托管语言可以轻松反编译,因为可执行文件必须包含大量元数据来支持 反射.
像 C++ 这样的语言可以编译为本机代码。程序结构在编译\翻译过程中可以完全改变。
编译器可以轻松地替换\合并\删除部分代码。原始代码和编译(本机)代码之间不存在一对一的关系。

.NET 非常容易反编译。做到这一点的最佳工具是 .NET反射器 最近被 RedGate 收购。

大多数语言都可以反编译,但有些语言比其他语言更容易反编译。.Net 和 Java 将有关原始程序的更多信息放入可执行文件中(方法名称、变量名称等),以便您获得更多原始信息。

例如,C++ 将翻译变量和函数等。到内存地址(是的,我知道这是一个粗略的简化),所以反编译器不会知道调用了什么东西。但您仍然可以获得程序的一些结构。

VB6 如果编译为 pcode 也可以使用反编译为几乎完整的源代码 P32达斯姆, ,Flash(或actionscript)也可以使用类似的东西反编译为完整源代码 耀斑

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top