侧边栏壁纸
博主头像
会飞的大象博主等级

爱运动的程序猿

  • 累计撰写 124 篇文章
  • 累计创建 162 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

代码混淆proguard

会飞的大象
2024-02-20 / 0 评论 / 0 点赞 / 384 阅读 / 891 字

pom文件调整

1.添加如下plugin

<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>
                    <proguardVersion>6.0.2</proguardVersion>
                    <obfuscate>true</obfuscate>
                    <!--是否将生成的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>-allowaccessmodification</option>
                        <!--确定统一的混淆类的成员名称来增加混淆,防止冲突-->
                        <option>-useuniqueclassmembernames</option>
                        <!--不混淆所有包名,Spring配置中有大量固定写法的包名-->
                        <option>-keeppackagenames</option>
                        <!--不混淆所有特殊的类-->
                        <option>
                            -keepattributes
                            Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
                        </option>
                        <!--不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射-->
                        <option>-keepclassmembers public class *{void set*(***);*** get*();}
                        </option>
                        <option>-keep interface * extends * { *; }</option>
                        <!--保持你的加载主类不被混淆-->
                        <option>-keep
                            class com.Application {
                            public static void main(java.lang.String[]);
                            }
                        </option>
                        <!--保持你的被注入的类不被混淆-->
                        <option>-keepclassmembers class * {
                            @org.springframework.beans.factory.annotation.Autowired *;
                            @org.springframework.beans.factory.annotation.Value *;
                            }
                        </option>
                        <!--不显示警告信息,如果显示则会出现Error无法完成混淆!-->
                        <option>-dontwarn **</option>
                    </options>
                    <!--编译过后被混淆的jar包-->
                    <outjar>${project.build.finalName}-BelenChan.jar</outjar>

                    <!--添加依赖,这里你可以按你的需要修改,每个jar包地址一定要对应  不燃build不成功-->
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                        <lib>${java.home}/lib/security/policy/unlimited/local_policy.jar</lib>
                        <lib>${java.home}/lib/security/policy/unlimited/US_export_policy.jar</lib>
                        <lib>${java.home}/lib/ext/sunjce_provider.jar</lib>
                    </libs>

                    <!--加载文件的过滤器,配置上你自己的工程目录,配置了什么目录,编译出来的jar只有你在这配置的包,其他没配置的没有编译-->

                    <!--<inFilter>com/belenchan/**</inFilter>-->

                    <!--对什么东西进行加载,这里仅有classes成功,毕竟你也不可能对配置文件及JSP混淆吧-->

                    <injar>classes</injar>

                    <!--输出目录-->

                    <outputDirectory>${project.build.directory}</outputDirectory>
                </configuration>

                <dependencies>
                    <!--使用6.0.2版本来混淆-->
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>6.0.2</version>
                        <scope>runtime</scope>
                    </dependency>

                </dependencies>

            </plugin>
2.打包运行,完成

image-1708422141622

0

评论区