我在其他Jar文件中以编程方式创建Jar文件时看到了一些有趣的问题和答案。 “制造机器的机器”,如果你愿意的话。
这在我的新手脑海中激起了一个问题:你能从String创建一个可执行的Jar文件,而不首先将它输出到源文件或临时文件吗?我用谷歌搜索了这个问题并没有找到答案,主要是因为我不确定在哪里看。
无论如何,插图可能有助于解释我的问题。说我有这样的事情:
String newClass = "class testing{ \n"+
" public static void main(String args[]){ \n"+
" System.out.println(\"This works!\"); \n"+
" } \n"+
"}";
我可以将其编译成可执行的Jar文件,而无需先将其输出到.java文件或临时文件中吗?然后,当我双击输出的Jar时,我会得到一个控制台窗口,上面写着“这个工作!”? (假设上面的代码没有暂停,所以我实际上看不到它。)
基本上,我的好奇心源于我的疑惑,如果人们理论上可以在没有源代码触及硬盘的情况下创建程序。我知道人们可以反编译程序和什么不是;但它仍然是一个合理的问题。例如,解密程序可能存储用户输入的密钥;或者是在线购买程序的用户,可以在运行中向他们注册。
答案 0 :(得分:0)
你可以这样做,但你需要一个外部库。请参阅BCEL。
但是,我不认为这对解密程序等有很大影响。解密密钥必须进入程序;它的创建者程序可能是在磁盘上,或者也许是创建者的创建者。如果密钥在磁盘或用户头上没有,它必须是动态生成的,一旦电源关闭,您将丢失解密数据。这可能没问题;但是你也可以在传统执行程序的存储器中动态生成密钥。
在安全性方面,还有一些内存管理技术(交换,休眠)模糊了某些系统上内存和RAM之间的差异。