除了混淆之外,还可以做些什么来保护jar文件?

我担心Java可执行文件的安全性。 它们几乎不提供反编译保护。 使用像Java Decompiler这样的工具,即使是小孩也可以反编译类文件以获取原始代码。

除了代码混淆,可以做些什么来保护类文件? 加密类加载器仍然是一个神话吗?

在以前的公司,我们有这样的问题,主要是由管理偏执驱动。

首先,你必须明白绝对安全只是一个神话:只要你的程序在不受信任的硬件上运行,它就可以被反编译,无论你使用什么语言。 您唯一可以改变的是攻击者了解您的软件/算法/数据的成本。

关于混淆:它可以被认为是第一级保护,因为它使Java代码完全不可读。 像ProGuard这样的优秀混淆器在变量/方法名称中使用禁用字符,从而阻止执行反编译代码。 现在,人们可以认为这是一个足够好的安全措施,因为反编译代码并不像运行Jad或其他反编译器那样简单,并且具有完美的Java代码。 但是,可以理解在这种代码中暴露的大多数算法(因为可读代码与可编译代码非常不同)。

其他安全措施包括:

  • 通过使用某种Web服务在服务器上运行敏感代码来发送结果并获取结果(使用REST / SOAP / YouNameIt)
  • 使用HTTPS和(可能)其他安全层从远程服务器加载敏感代码。

从这两个安全措施,我会诚实地选择第一个。 实际上,第二种可能会被典型的HTTPS攻击(中间人,日志记录代理等等)所破坏,并且将代码置于不受信任的硬件上会带来很大的不便,这使得它可能从那里借用。

基本上,您可以使用字节码做四件事来保护它免受Java反编译器的侵害:

  • 困惑
  • 软件加密
  • 硬件加密
  • 本地编译

所有这些都包含在我的文章中保护您的Java代码 – 通过混淆器和超越

您可以使用native编写所有代码。 无论如何都可以进行逆向工程。 但是更难。

好的,这不是严格的java解决方案。

正如nfechner在评论中所说的那样写开源应用程序。