xjar icon indicating copy to clipboard operation
xjar copied to clipboard

运行是输入密码,这样别人也可以通过密码解密代码,请问是否可以避免,谢谢

Open hotcatteam opened this issue 7 years ago • 56 comments

hotcatteam avatar Dec 02 '18 06:12 hotcatteam

你有什么好建议呢,或者说你想要达到的效果是怎样?

core-lib avatar Dec 02 '18 07:12 core-lib

主要是我考虑到,运行的时候输入了密码,这样对方可以根据密码进行解密操作,起不到保护代码的作用。我目前也没有比较好的方案。

hotcatteam avatar Dec 02 '18 12:12 hotcatteam

这个工具的使用场景是运维 实施 或者开发者为客户本地化部署服务时先把jar加密了 然后在客户本地服务端运行 因为密码是自己掌握 所以别人能解密的难度是比较大的 可能你的场景不一样 并不是把加密好的jar和密码都给别人

core-lib avatar Dec 03 '18 00:12 core-lib

不知道我理解的是否正确,我看说明中运行时,必须输入密码。谢谢 1、// 命令行运行JAR 因为程序要发布给客户,由于运行时需要输入密码,这样密码如果不给客户,客户无法运行程序 java -jar /path/to/encrypted.jar 2、// 在提示输入密码的时候输入密码后按回车即可正常启动,也可以通过传参的方式直接启动 此种情况,也是需要把密码写入到命令行中的,这样的话是不是密码就泄露了。 java -jar /path/to/encrypted.jar --xjar.password=PASSWORD

hotcatteam avatar Dec 03 '18 14:12 hotcatteam

我理解你的担心,所以XJar针对的场景是公司有自己的运维或实施去给客户部署,然后要求只有他们自己知道密码而且采用第一种方式来启动。接下来我也会考虑更优化的方案来避免这种问题。

core-lib avatar Dec 03 '18 14:12 core-lib

请问下那个XJarLauncher,具体是如何使用的,这边我看到有自定义classloader,然后具体是如何使用呢,请教下哈

lineezhang avatar Dec 05 '18 07:12 lineezhang

这样的使用场景,如果公司的运维去客户现场用密码解密jar包的话,得到的是基本明文的class文件,然后客户那边的懂技术的还是可以通过反编译工具来反编译源码,从而达不到保护源码的目的。

lineezhang avatar Dec 05 '18 08:12 lineezhang

不是这样的哦,并不需要解密jar包,只不过我们在客户的服务器上部署的时候通过一个密码来启动了程序,解密的过程是程序在内存中按需执行的,即加载某个class时当class时加密了的才在内存中解密并加载,源码并不会泄露,因为磁盘中不可能会有解密了的class,客户那边懂技术的人拿到的jar永远是加密了的。

core-lib avatar Dec 05 '18 08:12 core-lib

哦...终于明白了你这个使用场景了,是针对的是springboot这种可以将应用服务器都打成可执行的文件或者是可执行的jar包,都可以 可以通过定制的过滤器来过滤jar包,来指定不加密或者不解密的资源。

lineezhang avatar Dec 05 '18 08:12 lineezhang

哈哈哈 都怪我文档写的不好,明白了就好:)

core-lib avatar Dec 05 '18 08:12 core-lib

这里的密码其实可以修改成 提交数字证书的形式,这样的话就不会给客户看到明文密码了,数字证书了解一下,类似非对称加解密,私钥加密,公钥解密,还可以设置过期时间。

lineezhang avatar Dec 05 '18 09:12 lineezhang

没想到怎么做,说下你的思路呢

core-lib avatar Dec 05 '18 09:12 core-lib

这里使用java自带的keystore生成一对自己签名的公钥和私钥,这一对秘钥,公钥给客户解密用,私钥就是我们用来加密需要。这样使用的时候,直接指定私钥文件的路径就可以啦,这样在你的应用上直观上就不用输入明文密码了。体现在这就是在使用的时候不用输入明文密码,保证密钥安全

lineezhang avatar Dec 05 '18 09:12 lineezhang

那怎么避免客户拿着公钥去解密class呢?

core-lib avatar Dec 05 '18 10:12 core-lib

哈哈,你俩聊得好欢乐.....

ilaotan avatar Dec 25 '18 07:12 ilaotan

大神,如果springboot后台运行,例如 java -jar /path/to/encrypted.jar --xjar.password=PASSWORD & 。但是这样的话,通过ps -ef 不就可以发现密码了吗?有什么办法可以解决

chenjiayi0218 avatar Feb 13 '19 02:02 chenjiayi0218

启动时不指定密码 运行过程中输入密码

core-lib avatar Feb 13 '19 02:02 core-lib

启动时不指定密码 运行过程中输入密码

启动是不指定密码?不太理解,因为我加密jar后,不输入密码直接运行的话,是会报错终止的。能描述大概步骤吗? 我现在的脚本如下: #!/bin/sh java -jar -Dspring.profiles.active=test /path/to/encrypted.jar --xjar.password=PASSWORD > /path/to//out.x.file 2>&1 & 但是这样执行ps -ef就会出现密码了

chenjiayi0218 avatar Feb 13 '19 02:02 chenjiayi0218

不加 --xjar.password=PASSWORD 参数会报错终止?

core-lib avatar Feb 13 '19 02:02 core-lib

不加 --xjar.password=PASSWORD 参数会报错终止?

通过脚本使用后台运行jar,不加--xjar.password=PASSWORD 就会报错的 错误如下: Exception in thread "main" java.lang.NullPointerException at io.xjar.boot.XBootLauncher.(XBootLauncher.java:44) at io.xjar.boot.XBootLauncher.main(XBootLauncher.java:53)

chenjiayi0218 avatar Feb 13 '19 02:02 chenjiayi0218

版本多少

core-lib avatar Feb 13 '19 02:02 core-lib

版本多少

maven插件编译,1.0.8

chenjiayi0218 avatar Feb 13 '19 02:02 chenjiayi0218

你这种启动方式 在程序运行时无法获取当前的控制台 java.io.Console 也就无法获取输入的密码 你试试 java -jar -Dspring.profiles.active=test /path/to/encrypted.jar 这样启动

core-lib avatar Feb 13 '19 02:02 core-lib

你这种启动方式 在程序运行时无法获取当前的控制台 java.io.Console 也就无法获取输入的密码 你试试 java -jar -Dspring.profiles.active=test /path/to/encrypted.jar 这样启动

如果这样执行的话,无法是程序在后台运行的,还有什么办法吗?

chenjiayi0218 avatar Feb 13 '19 02:02 chenjiayi0218

目前没有

core-lib avatar Feb 13 '19 03:02 core-lib

目前没有

那请问你们现在的jar是怎么运行的?业务场景是怎么样的? 打开命令窗口运行jar,然后输入密码,命令窗口不关闭?

chenjiayi0218 avatar Feb 13 '19 03:02 chenjiayi0218

是的 这种方式是最安全的 但也不是绝对安全

core-lib avatar Feb 13 '19 03:02 core-lib

或者你可以尝试 使用 javaw 命令 加密码参数 来启动试试

core-lib avatar Feb 13 '19 03:02 core-lib

javaw

用的是centos,没有javaw命令o(╥﹏╥)o

chenjiayi0218 avatar Feb 13 '19 03:02 chenjiayi0218

或者你可以尝试 使用 javaw 命令 加密码参数 来启动试试

我重写了XBootLauncher这个类,通过其他方式传入xjar.password参数,从而简单实现了可以后台运行和ps -ef看不到命令进程了(^-^)V

chenjiayi0218 avatar Feb 13 '19 05:02 chenjiayi0218