GithubHelp home page GithubHelp logo

core-lib / xjar Goto Github PK

View Code? Open in Web Editor NEW
1.5K 1.5K 442.0 365 KB

Spring Boot JAR 安全加密运行工具,支持的原生JAR。

License: Apache License 2.0

Java 97.20% Go 2.80%
aes classloader decompilation decryption encryption jar springboot

xjar's People

Contributors

core-lib avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xjar's Issues

jpa兼容问题

我在我的springboot项目里使用了jpa,然后用xjar加密运行报错:
org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile
如果只是单独运行jar不会报错

打包没问题,运行报错:"main" java.lang.NoClassDefFoundError: sun/misc/URLClassPath

jdk 1.8
xjar 2.0.9

无法运行,提示:
WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by io.xjar.boot.XBootClassLoader (file:/Users/jessica/Documents/Project%20Code/dwz/target/dwz-0.0.1-SNAPSHOT.xjar) to field java.net.URLClassLoader.ucp WARNING: Please consider reporting this to the maintainers of io.xjar.boot.XBootClassLoader WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release Exception in thread "main" java.lang.NoClassDefFoundError: sun/misc/URLClassPath at io.xjar.boot.XBootClassLoader.<init>(XBootClassLoader.java:40) at io.xjar.boot.XJarLauncher.createClassLoader(XJarLauncher.java:31) at org.springframework.boot.loader.Launcher.createClassLoader(Launcher.java:65) at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) at io.xjar.boot.XJarLauncher.launch(XJarLauncher.java:26) at io.xjar.boot.XJarLauncher.main(XJarLauncher.java:22) Caused by: java.lang.ClassNotFoundException: sun.misc.URLClassPath at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 6 more

解密后 有引用的包 运行不了

a jar 包 引用了 多个三方包
a 加密 第三方包不加密
a 和 第三方包都在 lib 目录下
a jar 包中与第三方包有继承关系 必须要有第三方包才能运行
a jar 解密后 运行不要 继承的类 转换 不了 第三方父类 导致 运行错误

spring boot +jpa 打包成功后启动成功,但是访问接口时报错

项目情况

程序能加密后能正常启动成功,但是一旦访问首页或者接口就会报。
项目框架采用spring boot 2+spring data jpa,已经使用agent做了代理启动。
启动命令: java -javaagent:xjar-agent-hibernate-v1.0.0.jar -jar admin-1.0.0-SNAPSHOT.xjar

报错信息如下:

  • 2019-04-15 21:07:55.865 [http-nio-7789-exec-4] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet][182] -Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
    java.io.IOException: Skipped only 0 bytes out of 61093 required
    at org.springframework.util.StreamUtils.copyRange(StreamUtils.java:164)
    at org.springframework.http.converter.ResourceRegionHttpMessageConverter.writeResourceRegion(ResourceRegionHttpMessageConverter.java:158)

image

jdk11下springBoot2.x的jpa项目运行日志只加载banner

使用文档提到的java agent方式通过秘钥文件运行,因为使用默认加密,所以密钥文件里只填写了密码,结果运行时,只打印出来springBoot刚开始运行的banner图,后续没有日志了,访问端口也访问不了?请问是我配置问题吗?springBoot版本为2.1.7.RELEASE,采取的方式为使用maven打包出jar,再用户xjar加密得到加密包,通过clone下来的agent工程的jar和密钥文件去运行加密包

用密码去解密代码

大牛,启动时参数带了密码,如何防止被用密码解密。能否将危险模式里的密码再度加解密,使得即使有密码也不能反编译

某些第三依赖jar能不能不重新打包

前端用户密码等敏感信息会进行RSA加密传输到后台处理。
后台解密会用到如bcprov-jdk15on包,但此包是带签名的,加密时,这类jar包能不能不重新打包,重新打包签名会失效报错。
直接替换掉加密后的bcprov-jdk15on包,启动会报错
Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/bcprov-jdk15on-1.60.jar at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:87) at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:69)
能不能给个提示如何处理?

> > 修改XLauncher(最直接、最笨的办法)

修改XLauncher(最直接、最笨的办法)

public class XLauncher implements XConstants {
    public final String[] args;
    public final XDecryptor xDecryptor;
    public final XEncryptor xEncryptor;
    public final XKey xKey;

    public XLauncher(String... args) throws Exception {
        this.args = args;
        String algorithm = DEFAULT_ALGORITHM;
        int keysize = DEFAULT_KEYSIZE;
        int ivsize = DEFAULT_IVSIZE;
        **String password = "xxxxxxxxxxxxxxxx";**
        String keypath = null;
 ... ...

使用命令运行jar的时候,不报错,但不会加载jar包,直接结束了。
`D:\workspace>java -agentlib:xjar -jar xxx-encrypted.jar
(命令行下无任何信息)
D:\workspace>

OK.
C++ 解密部分代码
//解密 mbedtls_aes_crypt_ecb( &aes_ctx, MBEDTLS_AES_DECRYPT, input, outout ); if (b == 381) { // 分块后剩余字节数 memcpy(&dest[6096], outout, **9**); } else { memcpy(&dest[b * 16], outout, 16); } b++;
分块数目和输出字节需要根据生成的数据大小重新计算。本人获取得大小为6672 .b=417
if (b == 417) { // 分块后剩余字节数 memcpy(&dest[6672], outout, 0); }
成功运行

Originally posted by @Ftrybe in #1 (comment)

JDK12 springboot jar包加密后无法使用

环境:

  1. jdk 版本:
    openjdk12
  2. springboot 版本:
    2.1.8.RELEASE
  3. orm框架
    jpa

打包后报错情况:

2019-09-16 09:53:29.771  INFO 1 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.11.Final}
2019-09-16 09:53:29.775  INFO 1 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2019-09-16 09:53:29.987  INFO 1 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2019-09-16 09:53:30.304  WARN 1 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
2019-09-16 09:53:30.306  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2019-09-16 09:53:30.327  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2019-09-16 09:53:30.336  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-09-16 09:53:30.357  INFO 1 --- [           main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-09-16 09:53:30.363 ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:312)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)
	at com.fd.weretail.MerchantApplication.main(MerchantApplication.java:17)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.lang.ExceptionInInitializerError: null
	at org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:55)
	at org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:37)
	at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.buildArchiveDescriptor(AbstractScannerImpl.java:64)
	at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:46)
	at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:76)
	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:99)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:232)
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:167)
	at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:51)
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390)
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377)
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774)
	... 24 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor.<clinit>(JarFileBasedArchiveDescriptor.java)
	... 39 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at net.bytebuddy.dynamic.Nexus.initialize(Nexus.java:137)
	... 44 common frames omitted
Caused by: java.lang.UnsupportedOperationException: Cannot get package using reflection: Cannot define nest member class java.lang.reflect.AccessibleObject$Cache + within different package then class net.bytebuddy.mirror.AccessibleObject
	at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection$Dispatcher$Initializable$Unavailable.getPackage(ClassInjector.java:418)
	at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.injectRaw(ClassInjector.java:220)
	at net.bytebuddy.dynamic.loading.ClassInjector$AbstractBase.inject(ClassInjector.java:112)
	at net.bytebuddy.agent.builder.AgentBuilder$InitializationStrategy$SelfInjection$Dispatcher$InjectingInitializer.onLoad(AgentBuilder.java:3141)
	... 49 common frames omitted

spring boot 产生JAR无法加密,报错

java.util.zip.ZipException: Unexpected record signature: 0X622F2123
at org.apache.commons.compress.archivers.zip.ZipArchiveInputStream.getNextZipEntry(ZipArchiveInputStream.java:260)
at org.apache.commons.compress.archivers.jar.JarArchiveInputStream.getNextJarEntry(JarArchiveInputStream.java:56)
at io.xjar.boot.XBootEncryptor.encrypt(XBootEncryptor.java:79)
at io.xjar.boot.XBoot.encrypt(XBoot.java:364)
at io.xjar.boot.XBoot.encrypt(XBoot.java:307)
at io.xjar.boot.XBoot.encrypt(XBoot.java:249)
at io.xjar.boot.XBoot.encrypt(XBoot.java:234)
at io.xjar.boot.XBoot.encrypt(XBoot.java:220)
at io.xjar.boot.XBoot.encrypt(XBoot.java:207)
at com.ftvalue.XjarEncrypt.main(XjarEncrypt.java:17)

classLoader保密措施

我看了一下加密后的xjar,其中的XBootClassLoader很容易就反编译出来了。

请问对于ClassLoader的保密有没有什么方案?

SpringBoot的src\main\resources\static下的html文件无法访问

你好,我的SpringBoot工程src\main\resources\static下有html文件,加密时不设置任何过滤器,然后以
java -jar /path/to/encrypted.jar --xjar.password=PASSWORD 方式做解密运行,Log显示SpringBoot项目已成功启动,但是在浏览器上访问html文件,始终处于等待响应的状态。请问是什么原因呢?谢谢。

java.lang.NullPointerException

class.getSource().getParentFile().getPath()
class.getProtectionDomain().getCodeSource().getLocation().getFile()

凡是加密的代码 用类似这样的代码 都报java.lang.NullPointerException

有什么解决办法吗 老大 是为什么啊

密钥文件中的明文密码可否进行加密

可否提供一个加密算法,通过命令行对用户的密码做一次加密,加密串作为密钥文件的password值,运行时,在程序内部通过算法解密后得到解密口令,从而解密class文件,用户无法通过加密串直接解密class文件。
加密算法可不公开,或采用不易被反编译的语言编写。
正常运维中,很难保证不出现服务器重启的情况,删除密钥文件,会造成不i必要的运维成本。请酌情考虑。
感谢您喝您的团队卓越的贡献。

使用xjar-maven-plugin方式打包抛出ClassNotFoundException

通过在pom.xml文件中添加xjar-maven-plugin插件,抛出异常: java.lang.ClassNotFoundException: org.apache.commons.compress.archivers.jar.JarArchiveInputStream。
maven的本地仓库明明有org.apache.commons/commons-compress 1.18版本的jar

加密之后包变大了

加密之前是97M,加密之后是222M,这都翻倍了。有什么办法解决这个问题么,尽量小点。

非已有问题描述--静态资源无法正常访问

感谢作者的项目

问题描述:
前言: xjar是后来引入到系统中的,因为部署方式已经确定了,早期 配置的build配置已经将resource目录给排除出去了 项目最终部署环境是 linux
部分代码(去掉了 拷贝等的plugin
`

                <!--不打包资源文件-->

                <excludes>

                    <exclude>*.**</exclude>
                    <exclude>*/*.xml</exclude>
                </excludes>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <!--MANIFEST.MF 中 Class-Path 加入前缀-->
                        <classpathPrefix>lib/</classpathPrefix>
                        <!--jar包不包含唯一版本标识-->
                        <useUniqueVersions>false</useUniqueVersions>
                        <!--指定入口类-->
                        <mainClass>----</mainClass>
                    </manifest>
                    <manifestEntries>
                        <!--MANIFEST.MF 中 Class-Path 加入资源文件目录-->
                        <Class-Path>./resources/</Class-Path>
                    </manifestEntries>
                </archive>
                <outputDirectory>${project.build.directory}</outputDirectory>
            </configuration>

`

然后引入的时候采用的是 在test中执行XBoot.encrypt 将 jar包加密 然后再解密运行(使用解密文件)

但出现一个问题, 代码中有这么一句话
ResourceUtils.getURL("classpath:").getPath() + "static/xxx文件路径";
在没有加密解密的情况下是能正常返回路径的
但是加密后 变成了:
原本正确的项目路径+ /lib/log4j-api-2.10.0.jar!/META-INF/version/9/static/xxx文件路径

然后File自然索引不到路径 抛出错误
以上 (不过有可能是因为没有配置排除静态文件加密的原因 , 请原谅我没有去对比验证,如果作者没有遇到相关问题,我会去进行对比验证的~)

吐槽:
因为各种环境&实力原因 最终项目没有用混淆,也没有用docker 进行部署, 然后还要配置 服务自启动, 所以用的是sh脚本启动的jar 所以用的是 密码文件 解密的方式 进行解密 hhh 感觉ps ef 也是能找到的 只是加大了解密的难度, 毕竟不认识这个项目就不知道怎么解 hhh
谢谢.~

大神,您好, nohup 这种方式起不来呢, v2.0.6

[root@localhost project]# ll
-rw-r--r--. 1 root root 8 11月 20 13:57 a.key
-rw-------. 1 root root 598 11月 20 13:54 nohup.out
-rw-r--r--. 1 root root 214288661 11月 20 13:48 orange-encrypt.jar
[root@localhost project]# nohup java -jar ./orange-encrypt.jar --xjar.keyfile=./a.key | tailf -300 nohup.out
password:Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at io.xjar.XLauncher.(XLauncher.java:143)
at io.xjar.boot.XJarLauncher.(XJarLauncher.java:18)
at io.xjar.boot.XJarLauncher.main(XJarLauncher.java:22)
password:Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
nohup: at io.xjar.XLauncher.(XLauncher.java:143)
at io.xjar.boot.XJarLauncher.(XJarLauncher.java:18)
at io.xjar.boot.XJarLauncher.main(XJarLauncher.java:22)

建议:加密密码,解密密码,运行时密码分开

我们的业务场景是,我们对jar包加密是防止反编译,并不介意用户去使用jar包。所以对于运行时的密码并不是很在意。
现在是解密跟运行时的密码都是一个,那就增加了泄漏的风险
作者大大要不要考虑一下扩展这个功能呢?

启动jar报java.lang.NoClassDefFoundError: sun/misc/URLClassPath

Exception in thread "main" java.lang.NoClassDefFoundError: sun/misc/URLClassPath
at io.xjar.boot.XBootClassLoader.(XBootClassLoader.java:40)
at io.xjar.boot.XJarLauncher.createClassLoader(XJarLauncher.java:31)
at org.springframework.boot.loader.Launcher.createClassLoader(Launcher.java:64)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
at io.xjar.boot.XJarLauncher.launch(XJarLauncher.java:26)
at io.xjar.boot.XJarLauncher.main(XJarLauncher.java:22)
Caused by: java.lang.ClassNotFoundException: sun.misc.URLClassPath
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 6 more
难道是版本问题?

校验bcpkix-jdk15on签名时报错

hello,是这样的。最近在用xjar加密了一个spring cloud项目,加密后的程序可以运行起来,但是某个接口请求处理过程中就出错了。这个接口会调用hutool的SecurityUtil.aes()去解密一个东西,这个方法内部会创建一个Cipher,Cipher内部会校验jar包,结果校验到bcpkix-jdk15on这个jar包(在BOOT-INF/lib中)时就出错了。因为这个jar包本身做了签名,xjar处理后的jar包计算出来的签名,与这个jar包里面的manifest的签名不匹配,所以报错了。不知道之前有没有人报过这个问题,如果需要更多的信息可以找我了解,谢谢

加密war包无法运行

Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry WEB-INF/lib/netty-codec-4.1.34.Final.jar
	at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108)
	at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:86)
	at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:70)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
	at io.xjar.boot.XWarLauncher.launch(XWarLauncher.java:25)
	at io.xjar.boot.XWarLauncher.main(XWarLauncher.java:21)
Caused by: java.io.IOException: Unable to open nested jar file 'WEB-INF/lib/netty-codec-4.1.34.Final.jar'
	at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:256)
	at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:241)
	at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:103)
	... 5 more
Caused by: java.lang.IllegalStateException: Unable to open nested entry 'WEB-INF/lib/netty-codec-4.1.34.Final.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file
	at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:284)
	at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:264)
	at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:252)
	... 7 more

Springboot 打的war包

public class EncryptMyJar {
    public static void main(String[] args) throws Exception {
        String pwd = "123456";

        System.out.println("start");

        File plaintext = new File("a.war");
        File encrypt = new File("b.war");

        System.out.println("middle");

        XBoot.encrypt(
                plaintext,
                encrypt,
                pwd,
                (entry) -> {
                    String name = entry.getName();
                    System.out.println("entry");
                    System.out.println(name);
                    String pkg = "WEB-INF/classes/com/a/b";
//                    String pkg = "WEB-INF/classes/com/a/b";
                    return name.startsWith(pkg);
                }
        );

        System.out.println("end");
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.