美文网首页
java代码混淆工具ProGuard混淆插件

java代码混淆工具ProGuard混淆插件

作者: beyond阿亮 | 来源:发表于2022-05-01 21:31 被阅读0次

    java代码混淆工具ProGuard混淆插件

    介绍

    ProGuard是一个纯java编写的混淆工具,有客户端跟jar包两种使用方式。可以将程序打包为jar,然后用工具进行混淆,也可以在maven中导入ProGuard的插件,对代码进行混淆。

    大家都知道
    java代码可以反编译,因此有时候要保护自己的知识产权还真得费点心思,一般来说有三个思路:

    • 1、将class文件加密,这个是最安全的,但也费事儿,因为要重写classloader来解密class文件;
    • 2、使用花指令,使得class文件不能反编译(利用反编译工具漏洞);安全性一般,还是有花指令破解器;
    • 3、代码混淆,提高代码阅读成本;简单易操作,一般采用这种或者与其它方式结合;

    maven项目引入插件

    pom.xml

    <plugins>
    <!-- ProGuard混淆插件-->
                <plugin>
                    <groupId>com.github.wvengen</groupId>
                    <artifactId>proguard-maven-plugin</artifactId>
                    <version>2.0.14</version>
                    <executions>
                        <execution>
                            <!-- 混淆时刻,这里是打包的时候混淆-->
                            <phase>package</phase>
                            <goals>
                                <!-- 使用插件的什么功能,当然是混淆-->
                                <goal>proguard</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <!-- 是否将生成的PG文件安装部署-->
                        <attach>true</attach>
                        <!-- 是否混淆-->
                        <obfuscate>true</obfuscate>
                        <!-- 指定生成文件分类 -->
                        <attachArtifactClassifier>pg</attachArtifactClassifier>
                        <options>
                            <!-- JDK目标版本1.8-->
                            <option>-target 1.8</option>
                            <!-- 不做收缩(删除注释、未被引用代码)-->
                            <option>-dontshrink</option>
                            <!-- 不做优化(变更代码实现逻辑)-->
                            <option>-dontoptimize</option>
                            <!-- 不路过非公用类文件及成员-->
                            <option>-dontskipnonpubliclibraryclasses</option>
                            <option>-dontskipnonpubliclibraryclassmembers</option>
                            <!--不用大小写混合类名机制-->
                            <option>-dontusemixedcaseclassnames</option>
    
                            <!-- 优化时允许访问并修改有修饰符的类和类的成员 -->
                            <option>-allowaccessmodification</option>
                            <!-- 确定统一的混淆类的成员名称来增加混淆-->
                            <option>-useuniqueclassmembernames</option>
                            <!-- 不混淆所有包名-->
                            <option>-keeppackagenames</option>
                            <option>-keepdirectories</option>
    
                            <!-- 需要保持的属性:异常,注解等-->
                            <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod</option>
                            <option>-keep class javax.annotation.**</option>
                            <option>-dontwarn javax.crypto.**</option>
                            <option>-keep class javax.crypto.**</option>
                        </options>
    
                        <outjar>${project.build.finalName}-pg.jar</outjar>
                        <libs>
                            <lib>${java.home}/lib/rt.jar</lib>
                        </libs>
                        <!-- 对什么东西进行加载,这里仅有classes成功,毕竟你也不可能对配置文件及JSP混淆吧-->
                        <injar>classes</injar>
                        <!-- 输出目录-->
                        <outputDirectory>${project.build.directory}</outputDirectory>
                    </configuration>
                </plugin>
    </plugins>
    

    打包生成混淆jar包

    mvn clean install -Dmaven.test.skip=true
    

    [图片上传失败...(image-e14676-1651411890373)]

    在target目录会生成classes-pg.jar就是混淆后的jar包

    部署

    可以把jar包名修改为和spring包命名类似, 或者直接在spring源代码里加限制代码,然后打包

    参考链接:
    https://blog.csdn.net/sinat_35100573/article/details/51833294
    https://www.cnblogs.com/nevermorewang/p/8041548.html
    https://blog.csdn.net/sqzhao/article/details/50627920
    https://blog.csdn.net/wltj920/article/details/48970869
    https://blog.csdn.net/qysh123/article/details/17786163

    相关文章

      网友评论

          本文标题:java代码混淆工具ProGuard混淆插件

          本文链接:https://www.haomeiwen.com/subject/xdnpyrtx.html