27

我知道,这里已经提出了许多类似的问题。我不是在问我是否可以保护我编译的 Java 类——因为显然你会说“不,你不能”。我在问保护 Java 类免受反编译的最著名方法是什么?如果您知道该领域的任何研究或学术论文,请告诉我。另外,如果您使用过一些方法或软件,请分享您的经验?任何类型的信息都会非常有用。谢谢你。

4

6 回答 6

19

首先,如果您“仅”针对 Windows 市场,则很容易防止“.class to .java”反编译:使用 Excelsior Jet 之类的工具,它将.jar转换为.exe

这是万无一失的:如果您使用 Excelsior Jet,就不可能取回 .java 文件(只要所有人都说“不可能防止反编译.class文件”)。当然,攻击者可以启动SoftIce并尝试跟踪您的.exe,但这会比使用 JAD 将.class反编译为.java更棘手,而且它肯定不会允许找回.java文件。

现在,也许您也针对 OS X 和 Linux,或者您没有 $$$ 可用于 Excelsior Jet。

我正在编写一个用 Java 编写的商业软件。该软件仅在有 Internet 连接时才有意义。因此,除其他外,我们通过在服务器端进行部分计算来“保护”我们的软件:我们有几个.class除非它们是从服务器端生成的,否则它们将无法工作并且我们将它们发送到网络(并且在线发送的内容总是不同的:我们在服务器端生成唯一的一次性.class文件)。

这需要互联网连接,但如果用户不喜欢我们软件的工作方式,那么他可以自由购买我们竞争对手的劣质产品;)

反编译不会有多大好处:您需要主动破解软件(即重现服务器端正在发生的事情),否则您将无法使用它。

在使用 Proguard之前,我们使用自己的“字符串混淆” 。我们还做源代码检测(我们也可以做字节码检测),我们从代码中删除很多东西(比如我们注释掉的“断言”)并引入一些随机的“代码流混淆”[软件可以采取不同的路径却获得相同的结果,这确实使软件难以追踪])。

然后我们使用 Proguard(它是免费的)来展平我们所有的 OO 层次结构并混淆已经代码流和字符串混淆的代码。

所以我们的流程是:

  • 字符串混淆
  • 随机码流混淆
  • 保卫
  • 最终的.jar依赖于在服务器端(不同地)动态生成的.class 。

除此之外,我们发布了非常定期(和自动)的更新,始终确保修改我们的客户端/服务器保护方案(因此每次发布时,假设的攻击者都必须从头开始)。

当然,更容易放弃并思考:“我无能为力让攻击者的生活更加艰难,因为 JAD 无论如何都可以找回 .java 文件”(这在以下情况下非常有争议且明显错误您使用 .class 到 .exe 转换器来保护您的 .class 免受反编译)。

于 2010-03-14T22:03:26.847 回答
6

混淆器(请参阅http://java-source.net/open-source/obfuscators)将“打乱”代码,使其在反编译时没有任何意义。

于 2010-03-14T20:38:42.647 回答
5

有几种方法:

在我的文章中详细讨论了所有内容保护您的 Java 代码 - 通过混淆器及其他

于 2010-03-15T05:43:59.817 回答
0

那么如何保护你的类不被反编译呢?一个答案是克丽玛。Crema 对您的 .class 文件中的符号信息进行打乱,以便它们不易被反编译。Crema 打乱的符号信息包括类的名称、它的超类、接口、变量名、方法等。Java 虚拟机 (JVM) 需要这些符号名称来将您的类与库包链接。Crema 打乱这些符号名称并以相同的方式对它们进行引用,以便 JVM 仍然可以实现类和包之间的正确链接。

那么克丽玛是如何工作的呢?基本上,在 Internet 上分发您的类文件之前,在它们上运行 Crema。Crema 将打乱其中包含的符号信息,并将每个新类放在文件 1.crema 中。然后,您的工作是将 1.crema 重命名为 filename.class 之类的名称,然后再将其发布到 Internet 上。

如何投影符合 Java 的类

于 2013-04-18T06:56:40.977 回答
0

你可以试试Java Protector。这是一种比混淆更好的方法。它通过修改 OpenJDK 的源代码来制作 Native ClassLoader,可以加密你想要通过 AES 保护的类并在他们的自定义 JRE 中解析它们。你可以使用 JRE 发布你的软件并分发您的软件安全。

于 2017-06-25T02:31:17.673 回答
0

如果你使用 Linux 和 x86-64 CPU,你可以试试PackerLX

它是一个免费的基于 Web 的打包程序解决方案。将 jar 文件打包到 ELF 可执行文件中并对其进行保护。ELF 文件有一些保护技术,如加密和反编译保护。PackerLX 是一种新的解决方案,它可以保护所有类型的 linux 可执行文件免受非专业逆向工程的影响。

于 2020-11-22T19:35:03.020 回答