Java加密内存类加载器

时间:2011-10-22 10:10:34

标签: java class memory loader encryption

我会说得对,所以你不必阅读很多。

基本上,我有一个 AES-128bit加密Jar文件。我想制作一个启动器,以便我可以将这个加密的Jar加载到内存中并运行它(使用密钥)。

我有一个简单的类加载器工作,虽然除非我将它解密到一个目录并运行它,它显然不会做我需要的东西(解密和内存加载)。

TL; DR:我需要在内存中运行AES-128bit加密Jar。

非常感谢任何帮助,随时提出问题!

2 个答案:

答案 0 :(得分:8)

有关如何从byte[]加载jar /类的示例代码(应该是在内存中解密后得到的结果/无需将其保存在文件系统中的任何位置),请参阅http://www.javaworld.com/javaworld/jw-10-1996/indepth/indepth.src.html

基本上你需要使用defineClass来实现你想要的目标。

但请注意,这并没有提供真正的安全性,因为所有内容都在(在解密之后)作为内存中的Java字节代码结束,因此可以被访问/操作/保存等。

通过实现自定义JVM和/或预先编写代码以使其为原生代码,可以实现一点点安全性...对于某些信息,请参阅例如How to create encrypted Jar file?

答案 1 :(得分:1)

This article是一本很好的读物,很好地说明了为什么无法对代码进行气密保护。即使保持尽可能低的水平,你也可以使它更难,更难,例如,将代码编译为使用常规语言结构不能(干净地)表示的本机指令。

但是你应该记住,在任何情况下,最终你的加密数据都必须使用某个密钥进行解密,即使只是短暂的,这个密钥也会被解密,但重要的一点是,它会在内存中结束。使用常见的操作系统和硬件无法解决这个问题。因此,作为一名黑客,你总是可以回过头来从内存中获取密钥并从那里开始向后工作。不是普通用户能够做到的,但肯定是可能的。