sea-boat / ByteCodeEncrypt

a bytecode encryptor that can protect java source code.
128 stars 84 forks source link

加密的class放在Tomcat里会报ClassFormatError #4

Open AsGhoul opened 3 years ago

AsGhoul commented 3 years ago

问下有没有遇到过这种情况?网上查了下,说是保留class文件的前8个字节就行,但试了下还是会报错。 用的Tomcat8,已重写的spring的classloader image

varlinor commented 2 years ago

问下有没有遇到过这种情况?网上查了下,说是保留class文件的前8个字节就行,但试了下还是会报错。 用的Tomcat8,已重写的spring的classloader image

请问你解决该问题了么? 我也碰上这个问题了, 尝试了javaagent、agentpath 均没解决这个问题, 我在动态库解密那段代码添加了打印,发现在tomcat部署时,先报类似的ClassFormatError的错,然后才进入动态库方法进行解密,不知道该如何修改!

AsGhoul commented 2 years ago

问下有没有遇到过这种情况?网上查了下,说是保留class文件的前8个字节就行,但试了下还是会报错。 用的Tomcat8,已重写的spring的classloader image

请问你解决该问题了么? 我也碰上这个问题了, 尝试了javaagent、agentpath 均没解决这个问题, 我在动态库解密那段代码添加了打印,发现在tomcat部署时,先报类似的ClassFormatError的错,然后才进入动态库方法进行解密,不知道该如何修改!

Tomcat里自带的jar会先对class文件进行格式校验,此时不会调用agent的,所以会报错。 所以有3种方案: 1.置之不理,就是启动项目的时候控制台会报一堆错,但不影响使用。 2.修改Tomcat自带的jar,重写里面的加载类文件的方法,在拿到文件的byte[]后,对其进行解密。 3.不用Tomcat,改为jar启动。