对class文件的字节码完全加密
对class文件混淆:字节码混淆,主要思路就是的对类名,变量名和方法名,局部参数名进行替换
https://gitee.com/roseboy/classfinal
加密工具ClassFinal
基于字节码转换java版,其逻辑就是基于-agentJava:xxx.jar这一套原理,加密时对class文件做了两次处理,一次是对class文件的字节码完全加密,一次是对class文件混淆,这个混淆是保留成员和方法,对方法内部实现进行隐藏;解密时,判断如果该类是自己加密过的,找到完全加密的字节码进行解密,如果不是自己加密的就跳过。其对class文件混淆,就是方便类似SpringBoot等三方框架直接分析class文件。好处就是,如果你是个工具包,加密后给其它人,其他人编程时引用或者编译都不影响,但是运行时需要加密方支持,给出秘钥之类的。比较灵活和好用,也存在该方式的统一缺陷,不过其支持主程序jar加密,也支持单独的第三方工具jar加密。
1.加密
1.单独使用classfinal-fatjar.jar对demo-1.0.10.jar进行加密会得到demo-1.0.10-encrypted.jar,两个文件需在同一个目录下
加密
java -jar classfinal-fatjar-1.2.1.jar -file demo-1.0.10.jar -packages com.sjcredit.demo -cfgfiles application-dev.yml -pwd 123456 -Y
参数说明
-file 加密的jar/war完整路径
-packages 加密的包名(可为空,多个用","分割)
-libjars jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles 需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude 排除的类名(可为空,多个用","分割)
-classpath 外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd 加密密码,如果是#号,则使用无密码模式加密
-code 机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y 无需确认,不加此参数会提示确认以上信息
2.maven插件进行加密
<plugin>
<!-- https://gitee.com/roseboy/classfinal -->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>${classfinal.version}</version>
<configuration>
<password>000000</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码-->
<packages>com.yourpackage,com.yourpackage2</packages>
<cfgfiles>application.yml</cfgfiles>
<excludes>org.spring</excludes>
<libjars>a.jar,b.jar</libjars>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
运行mvn package时会在target下自动加密生成yourpaoject-encrypted.jar
2.启动加密后的jar
java -javaagent:demo-0.0.1-SNAPSHOT-encrypted.jar=’-pwd 0000000′ -jar demo-0.0.1-SNAPSHOT-encrypted.jar
3.说明
加密时-pwd参数设为#,启动时可不用输入密码
无密码模式,自动生成一个密码,密码会存在org.springframework.config.Pass中,启动时会自动从文件中获取
META-INF中 的被加密,BOOT-INF中的代码被混淆
文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————
版权声明:本文为CSDN博主「Dyn’s blog」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_25046005/article/details/125328325
转载请注明:SuperIT » 常见的class加密方式