我使用 JD-GUI 反编译了一个 .jar 文件,以及许多奇怪地命名为a
、b
、c
、等的包d
。类也一样,所以一些.class
文件也被命名为a.class
,b.class
依此类推。
我不相信开发人员以这样一种方式命名包或 Java 文件,以至于他们以后无法识别每个文件的作用。我相信这是因为其他一些技术问题。有人可以清楚这个问题吗?
我使用 JD-GUI 反编译了一个 .jar 文件,以及许多奇怪地命名为a
、b
、c
、等的包d
。类也一样,所以一些.class
文件也被命名为a.class
,b.class
依此类推。
我不相信开发人员以这样一种方式命名包或 Java 文件,以至于他们以后无法识别每个文件的作用。我相信这是因为其他一些技术问题。有人可以清楚这个问题吗?
您反编译的 Jar 可能使用ProGuard保护:
默认情况下,编译后的字节码仍然包含大量调试信息:源文件名、行号、字段名、方法名、参数名、变量名等。这些信息可以直接反编译字节码和对整个程序进行逆向工程。有时,这是不可取的。诸如 ProGuard 之类的混淆器可以删除调试信息并用无意义的字符序列替换所有名称,从而使对代码进行逆向工程变得更加困难。它进一步压缩代码作为奖励。除了在异常堆栈跟踪中给出的类名、方法名和行号之外,该程序在功能上保持相同。
仍然可以对程序进行逆向工程,但是这样做然后重用代码通常是非法的(至少在美国,我唯一有经验的国家),因为这是违反许可的。使用此类工具的人几乎总是不编写开源软件。