我认为 java 可执行文件(jar 文件)对于反编译和获取源代码是微不足道的。
其他语言呢?.net 和所有?
哪些语言只能编译成可反编译的代码?
一般来说,Java、C# 和 VB.NET 等语言相对容易反编译,因为它们被编译为中间语言,而不是纯机器语言。在它们的 IL 形式中,它们保留了比 C 代码编译成机器语言时更多的元数据。
从技术上讲,您并没有得到原始源代码,而是源代码的变体,当编译时,它会将编译后的代码返回给您。它与源代码不同,因为注释、注释和编译器指令之类的内容通常不会传递到编译后的代码中。
托管语言可以很容易地反编译,因为可执行文件必须包含大量元数据以支持反射。
像 C++ 这样的语言可以编译为本机代码。程序结构可以在编译\翻译过程中完全改变。
编译器可以轻松替换\合并\删除部分代码。原始代码和编译(本机)代码之间没有一对一的关系。
.NET 很容易反编译。最好的工具是RedGate 最近收购的.NET 反射器。
大多数语言都可以反编译,但有些语言比其他语言更容易反编译。.Net 和 Java 将有关原始程序的更多信息放在可执行文件中(方法名称、变量名称等),因此您可以获得更多原始信息。
例如,C++ 会将变量和函数等转换为内存地址(是的,我知道这是一个粗略的简化),因此反编译器将不知道调用了什么东西。但是你仍然可以得到一些程序的结构。
VB6 如果编译为 pcode 也可以使用P32Dasm反编译成几乎完整的源代码,Flash(或 actionscript)也可以使用类似Flare的东西反编译成完整的源代码