如何创建加密的Jar文件?[已关闭]

2022-09-02 19:29:43

我正在从事必须保护数据(揭示代码不是主要问题)文件的项目。我们使用的是 Java + Netbeans。是否有任何工具可以创建加密格式的jar?我们也使用sqlite作为数据库 - 所以将文本文件放在加密格式对我们来说也不是正确的选择。


答案 1

创建加密的 JAR 是不可能的,因为正在执行的 JavaVM 必须能够以某种方式读取它想要执行的数据。与VM类似,任何拥有适当工具和专业知识的人都可以从JAR中提取所有数据。

如果可以加密JAR,您还必须向想要执行JAR的客户端提供一些解密密钥或工具,这完全违背了加密的目的。

你能得到的最好的是混淆,但对于雄心勃勃的攻击者来说,这不是真正的安全或障碍。


答案 2

Kosi2801几乎是正确的。我唯一能想到的你能做的就是以下几点,但它很丑陋。

  1. 附带一个小型标准 JAR 和一个加密的数据文件。
  2. 当JAR运行时,它将加密数据文件的(一些)解密到内存中(例如数据在JAR中的位置的目录,基本上是指针/长度对的简单内存中文件系统)
  3. 设置您自己的类装入器,该装入器在调用时,从 JAR 中获取正确的加密字节(使用 #2 中描述的伪 FS 表),对其进行解密,然后从那里装入类数据

这将允许您加载类。您可以执行相同的操作(无需类装入器)来装入其他资源。

虽然实现起来很有趣(对于那些喜欢挑战的人来说),但这存在一些问题:

  1. 您需要能够解密这些内容,因此用户每次都必须输入密码或类似内容。如果JAR知道足够的知识来解密它本身,那么任何人都可以查看它并弄清楚如何解密事物。这可以通过通过 Internet 联系已知良好的服务器来请求解密密钥(只要您确保该过程安全)来缓解。当然,这需要在有人想要运行程序时进行有效的“网络连接”。
  2. 一切都在记忆中结束。如果没有一个自定义的JVM来处理微小的加密字节代码(正如Cameron McKay所提到的),这些类最终会在某个时候被解密在主内存中。除非你依靠操作系统来阻止其他人读取该内存,否则你已经输掉了任何手头上有一点时间的人。对于您尝试从某些加密存储中读出的资源(例如图像/字体/等)也存在相同的问题。

因此,你可以让人们四处奔波,让事情变得更加困难,但是在你已经付出了一切的情况下,你所能做的就是试图让它不值得对方投入的时间。

软件保护是很困难的,特别是在像Java这样的东西中,它很容易被反编译,并且不能像C / Assembly那样改变它自己的代码。一些最昂贵的软件需要硬件加密狗或锁定到某个CPU或其他硬件是有原因的。


推荐