微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

常见的class加密方式

java aide_941 9℃

对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加密方式

喜欢 (0)or分享 (0)