精华内容
下载资源
问答
  • NULL 博文链接:https://quicker.iteye.com/blog/2321714
  • 维护者的例子 如何使用Apache Maven进行ProGuard
  • WEB Maven 项目 ProGuard 混淆方案 POM文件,包含详细混淆注释 具体请参考博客: http://blog.csdn.net/wltj920/article/details/48970869#comments
  • Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献。于是,公司写的一...

    Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

    近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献。 
    于是,公司写的一大堆WEB项目也想做保护。但几大问题随之而来:

    • 公司的所有项目全部是Maven项目,网上的混淆方案不是陈旧就是无效
    • 网上的大部分解决方案感觉像是对简单DEMO进行混淆,根本不能用于复杂的WEB项目中
    • 网上的大部分解决方案是针对Android项目的,针对WEB的少之又少

    针对以上问题,本人花费一个月研究了WEB+Maven项目的混淆,终于收获果实,解决了这一大空缺难题。

    项目介绍

    就如之前所述,我们要混淆的项目绝不是一个简单的WEB DEMO,必须要包含了大量第三方框架。 
    本文中介绍的项目使用了主流的一些框架:

    • Spring 4.1.1.RELEASE
    • SpringMVC 4.1.1.RELEASE
    • JackSon 2.5.0
    • MyBatis 3.3.0
    • Shiro 1.2.3
    • Log4J 1.2.17
    • SLF4J 1.7.10
    • Druid Pool 1.0.15
    • patchca 1.0.0
    • Jetty 9.2.7.v20150116

    项目包结构

    包结构

    该项目是典型的Maven WEB项目,对于Maven WEB项目的结构不再赘述,这里对各种包做一下解释:

    • annotation 注解包,里面是自己写的注解类,主要混淆对象
    • controller SpringMVC的控制器包,主要混淆对象
    • credntials Shiro的自定义凭证,次要混淆对象
    • dao DAO包,主要混淆对象
    • exception 异常包,自定义了一些异常,主要混淆对象
    • filter Shiro的自定义过滤器,次要混淆对象
    • interceptor Shiro的自定义拦截器,次要混淆对象
    • job SpringTASK的定时任务包,次要混淆对象
    • mapper Mybatis的XML映射文件包,非混淆对象
    • model 实体包,非混淆对象
    • realm Shiro的自定义域包,次要混淆对象
    • service 实体的服务包,次要混淆对象
    • token Shiro的自定义令牌包,次要混淆对象
    • utils 公司自己的工具类,主要混淆对象

    主要混淆对象 对类的名称、属性、方法名都进行混淆 
    次要混淆对象 对类的名称不混淆,类的属性、方法名选择性混淆 
    非混淆对象 不进行混淆,混淆后可能出现异常

    Maven 配置(pom.xml)

    本文的重头戏,使用Maven集成的ProGuard插件,混淆配置不用单独建立文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>war</packaging> <groupId>...</groupId> <artifactId>zhukun.shiro-spring</artifactId> <version>1.0-SNAPSHOT</version> <!-- 属性--> <properties> <!-- 项目编码--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 单元测试包--> <junit.version>4.12</junit.version> <!-- JAVAEE支持包--> <jstl.version>1.2</jstl.version> <servlet.version>3.1.0</servlet.version> <!-- 日志包--> <log4j.version>1.2.17</log4j.version> <slf4j.version>1.7.10</slf4j.version> <aspectj.version>1.6.12</aspectj.version> <!-- commons支持--> <commons-logging.version>1.1.3</commons-logging.version> <commons-collections.version>3.2.1</commons-collections.version> <commons-fileupload.version>1.3.1</commons-fileupload.version> <!-- shiro安全框架--> <shiro.version>1.2.3</shiro.version> <!-- druid连接池--> <druid.version>1.0.15</druid.version> <!-- 数据库及数据库框架--> <mysql.version>5.1.30</mysql.version> <mybatis.version>3.3.0</mybatis.version> <mybatis-spring.version>1.2.3</mybatis-spring.version> <!-- Mybatis分页插件--> <mybatis-paginator.version>1.2.16</mybatis-paginator.version> <!-- Mybatis生成器插件--> <mybatis-generator.version>1.3.2</mybatis-generator.version> <!-- Spring及SpringMVC支持包--> <spring.version>4.1.1.RELEASE</spring.version> <jackson.version>2.5.0</jackson.version> <!-- 验证码支持包--> <patchca.version>1.0.0</patchca.version> <!-- Jetty插件--> <jetty.version>9.2.7.v20150116</jetty.version> <!-- Maven编译插件--> <maven-compiler.version>2.3.2</maven-compiler.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>${commons-logging.version}</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> 

    转载于:https://www.cnblogs.com/pangguoming/p/9625497.html

    展开全文
  • maven+proguard混淆

    千次阅读 2018-11-16 18:15:50
    混淆好处:代码难以阅读,反编译,proguard混淆代码.class文件 项目用的springBoot-2.0.4版本,proguard得用6.0.3版本,不然会报错,在pom.xml文件添加混淆插件 &lt;plugin&gt; &lt;!-- proguard混淆...

    混淆好处:代码难以阅读,反编译,proguard混淆代码.class文件

    项目用的springBoot-2.0.4版本,proguard得用6.0.3版本,不然会报错,在pom.xml文件添加混淆插件

    <plugin>
        <!-- proguard混淆插件-->
        <groupId>com.github.wvengen</groupId>
        <artifactId>proguard-maven-plugin</artifactId>
        <executions>
            <execution>
                <!-- 打包的时候开始混淆-->
                <phase>package</phase>
                <goals><goal>proguard</goal></goals>
            </execution>
        </executions>
        <configuration>
            <proguardVersion>6.0.3</proguardVersion>
            <!--指定混淆的jar,如springboot打出来的jar基于它混淆-->
            <injar>${project.build.finalName}.jar</injar>
            <!--输出的jar-->
            <outjar>${project.build.finalName}.jar</outjar>
            <!-- 是否混淆-->
            <obfuscate>true</obfuscate>
            <options>
                <option>-target 1.8</option> <!--指定java版本号-->
                <option>-dontshrink</option> <!--默认开启,不做收缩(删除注释、未被引用代码)-->
                <option>-dontoptimize</option><!--默认是开启的,这里关闭字节码级别的优化-->
                <option>-adaptclassstrings</option><!--混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代-->
                <option>-ignorewarnings</option><!-- 忽略warn消息,如果提示org.apache.http.* 这个包里的类有问题,那么就加入下述代码:-keep class org.apache.http.** { *; }    -dontwarn org.apache.http.**-->
                <option>-keep class org.apache.logging.log4j.util.* { *; }</option>
                <option>-dontwarn org.apache.logging.log4j.util.**</option>
                <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod</option><!--对异常、注解信息在runtime予以保留,不然影响springboot启动-->
                <!--不混淆所有interface接口-->
                <option>-keepnames interface **</option>
                <option>-keepclassmembers enum * { *; }</option><!--保留枚举成员及方法-->
                <option>-keepparameternames</option>
                <option>-keepclasseswithmembers public class * {
                    public static void main(java.lang.String[]);}</option> <!--保留main方法的类及其方法名-->
                <!--忽略note消息,如果提示javax.annotation有问题,那麽就加入以下代码-->
                <option>-dontnote javax.annotation.**</option>
                <option>-dontnote sun.applet.**</option>
                <option>-dontnote sun.tools.jar.**</option>
                <option>-dontnote org.apache.commons.logging.**</option>
                <option>-dontnote javax.inject.**</option>
                <option>-dontnote org.aopalliance.intercept.**</option>
                <option>-dontnote org.aopalliance.aop.**</option>
                <option>-dontnote org.apache.logging.log4j.**</option>
                <option>-dontnote module-info</option>
                <!--入口程序类不能混淆,混淆会导致springboot启动不了-->
                <option>-keep class com.kafang.atgo.restful.WebApp</option>
                <option>-keepclassmembers  class com.kafang.atgo.restful.WebApp{ *;}</option>
                <option>-keep interface * extends * { *; }</option>
                <!--不混淆所有类,保存原始定义的注释-->
                <option>-keepclassmembers class * {
                    @org.springframework.beans.factory.annotation.Autowired *;
                    @org.springframework.beans.factory.annotation.Value *;
                    }
                </option>
            </options>
            <libs>
                <!-- 添加依赖 java8-->
                <lib>${java.home}/lib/rt.jar</lib>
                <lib>${java.home}/lib/jce.jar</lib>
            </libs>
        </configuration>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/net.sf.proguard/proguard-base -->
            <dependency>
                <groupId>net.sf.proguard</groupId>
                <artifactId>proguard-base</artifactId>
                <version>6.0.3</version>
            </dependency>
        </dependencies>
    </plugin>

    看jar是否混淆了,http://jd.benow.ca/下载jd-gui-1.4.0.jar

     

     混淆后的jar如果跑不起来,报spring容器初始化bean错误,解决如下

    WebApp类加

    /**
     * 主要解决proguard混淆不能指定在basePackages下面类名混淆后唯一,
     * 不同包名经常有a.class,b.class,c.class之类重复的类名,因此spring容器初始化bean的时候会报错。
     */
    
    public static class CustomGenerator implements BeanNameGenerator{
        @Override
        public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
            if(definition != null) {
                return definition.getBeanClassName();
            }
            return null;
        }
    }
    
    public static void main(String[] args) {
    
        //SpringApplication.run(WebApp.class, args);
        new SpringApplicationBuilder(WebApp.class)
                .beanNameGenerator(new CustomGenerator())
                .run(args);
    }
    展开全文
  • Maven集成Proguard

    2019-08-22 15:07:37
    直接上代码 &amp;amp;amp;amp;amp;lt;plugin&amp;amp;amp;amp;...maven-assembly-plugin&amp;amp;amp;amp;amp;lt;/artifactId&amp;amp;amp;amp;amp;gt; &amp;amp;amp;amp;amp

    直接上代码

    <plugin>
    	<artifactId>maven-assembly-plugin</artifactId>
    	<configuration>
    		<archive>
    			<manifest>
    				<mainClass>xxx.Start</mainClass>
    			</manifest>
    		</archive>
    		<descriptorRefs>
    			<descriptorRef>jar-with-dependencies</descriptorRef>
    		</descriptorRefs>
    	</configuration>
    	<executions>
    		<execution>
    			<!-- this is used for inheritance merges -->
    			<id>make-assembly</id> 
    			 <!-- Specify to perform the jar package merge 
    			 operation on the package node. -->
    			<phase>package</phase>
    			<goals>
    				<goal>single</goal>
    			</goals>
    		</execution>
    	</executions>
    </plugin>
    <plugin><!--Confused code with obfuscated plugins -->
    	<groupId>com.github.wvengen</groupId>
    	<artifactId>proguard-maven-plugin</artifactId>
    	<version>2.0.11</version>
    	<executions>
    		<execution>
    			<phase>package</phase>
    			<goals>
    				<goal>proguard</goal>
    			</goals>
    		</execution>
    	</executions>
    	<configuration>
    		<attach>true</attach>
    		<attachArtifactClassifier>pg</attachArtifactClassifier>
    		<proguardInclude>${basedir}/src/main/resources/confs/proguard.conf</proguardInclude>
    		<!--Specify the confusing jar package, I am here to confuse the jar 
    			package output in the previous step. -->
    		<injar>spa-posbridge-simphony-pat-0.0.1-SNAPSHOT-jar-with-dependencies.jar</injar>
    		<!--Specify the output of the jar -->
    		<outjar>${project.build.finalName}-pg</outjar>
    		<obfuscate>true</obfuscate>
    		<!-- add dependency jar for exception -->
    		<libs>
    			<lib>${java.home}/lib/rt.jar</lib>
    			<lib>${java.home}/lib/jce.jar</lib>
    			<!-- <lib>D:/workspace3/datacube/lib/apache-axiom-api-1.2.7.jar</lib> -->
    			<!-- <lib>D:/workspace3/datacube/lib/axis2-kernel-1.7.1.jar</lib> -->
    		</libs>
    	</configuration>
    </plugin>
    

    比较麻烦的是第三方的jar必须手动一个一个忽略.
    配置文件proguard.conf:

    
    -ignorewarnings
    #donot shrink
    -dontshrink    
    #donot optimize 
    -dontoptimize 
    -dontskipnonpubliclibraryclasses 
    -dontskipnonpubliclibraryclassmembers 
    -dontnote 
    -keepattributes Signature
    #Keep the source name and line number (there is a clear stack information 
    #when the exception occurs), annotate (by default, all annotations will be 
    #filtered out, which will affect the annotation of the framework) 
    -keepattributes
    	Exceptions,InnerClasses,*Annotation*,Signature,LineNumberTable
    -keep class
    	com.xxx.Start
    -keepclassmembers class
    	com.xxx.Start{ *;}
    # Keep the bean class name and attribute name unchanged
    -keep class
    	xxx.dto.**
    -keepclassmembers class
    	xxx.dto.** { *;}
    -keepclasseswithmembers class * { 
        public <init>(xxx); 
    } 
    -keep class org.apache.commons.logging.** { *; }
    -dontwarn org.apache.commons.logging.**
    -keep class javax.annotation.** { *; }
    -dontwarn javax.annotation.**
    -keep xxx.dto.**
    -keep interface * extends * { *; }
    
    #The following configuration of third-party packages does not participate in confusion
    
    -keepclassmembers class ch.qos.logback.** { *;}
    -dontwarn ch.qos.logback.**
    -keep class ch.qos.logback.**
    
    -keepclassmembers class com.alibaba.** { *;}
    -dontwarn com.alibaba.**
    -keep class com.alibaba.**
    
    -keepclassmembers class io.netty.** { *;}
    -dontwarn io.netty.**
    -keep class io.netty.**
    
    
    -keepclassmembers class javax.ws.** { *;}
    -dontwarn javax.ws.**
    -keep class javax.ws.**
    
    -keepclassmembers class com.sun.** { *;}
    -dontwarn com.sun.**
    -keep class com.sun.**
    
    -keepclassmembers class sun.** { *;}
    -dontwarn sun.**
    -keep class sun.**
    
    -keepclassmembers class javax.** { *;}
    -dontwarn javax.**
    -keep class javax.**
    
    -keepclassmembers class retrofit2.** { *;}
    -dontwarn retrofit2.**
    -keep class retrofit2.**
    
    -keepclassmembers class com.google.** { *;}
    -dontwarn com.google.**
    -keep class com.google.**
    
    -keepclassmembers class okhttp3.** { *;}
    -dontwarn okhttp3.**
    -keep class okhttp3.**
    
    -keepclassmembers class springfox.** { *;}
    -dontwarn springfox.**
    -keep class springfox.**
    
    -keepclassmembers class com.fasterxml.** { *;}
    -dontwarn com.fasterxml.**
    -keep class com.fasterxml.**
    
    -keepclassmembers class org.** { *;}
    -dontwarn org.**
    -keep class org.**
    
    
    -keepclassmembers class net.** { *;}
    -dontwarn net.**
    -keep class net.**
    
    

    需要注意的是如果在程序中有用到 getResource() 方法,一定要将使用方法的类加入如下配置,因为混淆后此方法位的到的值为null.
    -keepdirectories foo.MyClass
    -keeppackagenames foo.MyClass

    展开全文
  • <artifactId>proguard-maven-plugin <!-- 打包的时候开始混淆--> <phase>package <goals><goal>proguard</goal></goals> <proguardVersion>6.0.3 ...
  • ProGuard Maven插件 在您的构建中运行 。 对于用法,请阅读生成的。 开发发生在。 该插件处于成熟状态,因此预计不会进行重大开发更改。 欢迎提出请求。 这是的的继承者。
  • 修改proguard-maven-plugin插件默认可以对proguard打包后的jar重新打包
  • IDEA 使用JDK1.8使用ProGuard混淆Maven项目代码

    万次阅读 热门讨论 2018-09-14 16:48:30
    这里面的坑实在是太多了,整这个...坑1:proguard-maven-plugin下载非常慢,以及跑mvn clean package下载非常慢。 解决方法:在C:\Users\${用户名}\.m2文件夹下创建settings.xml,然后填入: <?xml version="1...

    这里面的坑实在是太多了,整这个东西整到心态爆炸,要不是公司要求搞这个东西,我都想放弃了!最终在我的坚持下完成了这个混淆。

    前面的一些小坑:

    坑1:proguard-maven-plugin下载非常慢,以及跑mvn clean package下载非常慢。

    解决方法:在C:\Users\${用户名}\.m2文件夹下创建settings.xml,然后填入:

    <?xml version="1.0" encoding="UTF-8"?>

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

        <mirrors>

            <mirror>

                <id>alimaven</id>

                <name>aliyun maven</name>

                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

                <mirrorOf>central</mirrorOf>

            </mirror>

            <mirror>

                <id>maven.net.cn</id>

                <name>oneof the central mirrors in china</name>

                <url>http://maven.net.cn/content/groups/public/</url>

                <mirrorOf>central</mirrorOf>

            </mirror>

        </mirrors>

    </settings>

    使用阿里云的Maven库即可。

     

    坑2:maven unmappable character for encoding GBK

    Maven用GBK去编译UTF-8编码的Java文件。

    解决方法:在pom.xml的project标签下增加:

        <properties>

                    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

                    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        </properties>

     

    如果没用呢,就在project下建立build标签(如果存在请忽略)、建立一个plugins标签(如果存在请忽略),加上一个plugin:

        <plugin>

                                            <groupId>org.apache.maven.plugins</groupId>

                                            <artifactId>maven-compiler-plugin</artifactId>

                                            <configuration>

                                                        <source>1.8</source>

                                                        <target>1.8</target>

                                                        <encoding>UTF-8</encoding>

                                            </configuration>

       </plugin>

     

     

    然后IDEA右下角Import Changes即可。

    坑3:IDEA Maven Lifecycle install出现Perhaps you are running on a JRE rather than a JDK

    解决方法:老老实实配置JAVA_HOME,配置Java环境变量,IDEA虽然不需要配置,但是Maven需要。

    参考:https://blog.csdn.net/nobb111/article/details/77116259

    配置完:

    path:

    配置完后最好重启IDEA

     

    坑4:IDEA Maven Lifecycle install测试类报错

    由于项目有其他同事使用Eclipse提交的代码,IDEA就会出现报'\ufeff'错误,解决方法当然也有:https://blog.csdn.net/DCTANT/article/details/81708393

    当然还是跳过比较方便,在pom.xml中添加一个plugin:

    <plugin>

                                            <groupId>org.apache.maven.plugins</groupId>

                                            <artifactId>maven-surefire-plugin</artifactId>

                                            <configuration>

                                                        <skip>true</skip>

                                            </configuration>

                                </plugin>

    添加之后Maven Install就会跳过测试类了。

     

    进入正题,IDEA Maven配置ProGuard。此处是参考了:https://blog.csdn.net/sinat_35100573/article/details/51833294,这篇博客给我了非常大的帮助,但是还是过时了,不能使用了,这里列出我的配置文件:

    <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 public class * {

                                                                                public protected *;

                                                                                }</option>

     

                                                                    <!--不显示警告信息,如果显示则会出现Error无法完成混淆!-->

                                                                    <option>-dontwarn **</option>

                                                        </options>

                                                        <outjar>${project.build.finalName}-pg.jar</outjar>

                                                        <!-- 添加依赖,这里你可以按你的需要修改,这里测试只需要一个JRE的Runtime包就行了 -->

                                                        <libs>

                                                                    <lib>${java.home}/lib/rt.jar</lib>

                                                                    <lib>${java.home}/lib/jce.jar</lib>

                                                                    <lib>${java.home}/lib/security/local_policy.jar</lib>

                                                                    <lib>${java.home}/lib/security/US_export_policy.jar</lib>

                                                                    <lib>${java.home}/lib/ext/sunjce_provider.jar</lib>

                                                        </libs>

                                                        <!-- 加载文件的过滤器,就是你的工程目录了-->

                                                        <!--<inFilter>com/test/prog/**</inFilter>-->

                                                        <inFilter>com/chisalsoft/wordsdk/**</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>

     

    在IDEA的terminal中输入:mvn clean package即可开始编译和混淆。

     

     

    各种让人炸毛的坑(基于https://blog.csdn.net/sinat_35100573/article/details/51833294的坑):

    最常报的就是MojoExecutionException,Obfuscation failed (result=1) -> [Help 1],也不说清楚是什么原因导致的问题。其中有篇博客说加入-Dproguard.skip=true,那就是骗自己的一个方法,直接跳过混淆,以至于根本无法混淆代码!!所以根本没用!!

    Maven提示说输入-e -X开启详细的报错信息。那就这么做:在terminal中输入mvn clean package -e -X,这回详细的报错信息出来了:

     

    提示(Unsupported class version number [53.0] (maximum 52.0, Java 1.8)),明显ProGuard不支持1.8,搜了很久搜到了https://blog.csdn.net/testcs_dn/article/details/45622331,这篇博客,其中为ProGuard指定了一个版本,但是!这个5.2版本也不支持Java1.8,然后我只能去ProGuard官网找新版本,我找的是6.0.2版本,算是非常新的了,加上后这个错误终于是不报了,但是新错误就来了:

     

    Note: there were 1 duplicate class definitions.然后是一个Warning:

    there were 2 classes in incorrectly named files.这个错误命名的classes有时候不止2个,网上我看到有报1000多个的,而这些Warning通常来自各个引入的jar包,包括Java自己的rt.jar,我一怒之下把ProGuard Plugin中的所有lib都注释掉了,结果后面又导致了新的Error。

    这个ProGuard最变态的就是必须要你解决掉所有Warning才给你继续混淆,不然就给你报个Error!然后编译就无法继续下去了。

    解决方法:在各种option标签中增加:<option>-dontwarn **</option>,作用是拒绝提示任何Warning,以至于ProGuard想报都报不了,顺利通过编译。

     

    新的错误又来了,这是由于我把plugin标签中的所有lib都注释导致的,找不到父类了!以至于ArrayList这样类都因为找不到源文件而报错。

    解决方法:把rt.jar包加进去。

     

    然后新的错误又来了,Error: You have to specify '-keep' options for the shrinking step.这个是因为没有加上-keep参数,这个参数是用来保留文件的,如果一个-keep都没有,那么将会生成一个空的jar包,所以就报错了。

    解决方法:加入<option>-keep public class * {

                                                                                public protected *;

                                                                                }</option>

     

     

    最终……终于解决了……顺利编译,生成了一个叫classes-pg.jar的一个jar包,解压后用IDEA反编译打开,发现代码已经混淆好了,终于成功了……

    截个图表示纪念:

    当然这些令人炸毛的坑都不用你们踩了,我在上面的配置清单中都加上了,应该不会有什么问题了。

     

    =============================== 来自2019.10.22的分割线 ===============================

    我发现pom配置不能直接复制到CSDN上,会被添加不明字符导致idea报错,我这里重新放一下pom中的最关键的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 public class * {
                                public protected *;
                                }
                            </option>
                            <!--不显示警告信息,如果显示则会出现Error无法完成混淆!-->
                            <option>-dontwarn **</option>
                        </options>
                        <outjar>${project.build.finalName}-pg.jar</outjar>
    
                        <!--添加依赖,这里你可以按你的需要修改,这里测试只需要一个JRE的Runtime包就行了-->
                        <libs>
                            <lib>${java.home}/lib/rt.jar</lib>
                            <lib>${java.home}/lib/jce.jar</lib>
                            <lib>${java.home}/lib/security/local_policy.jar</lib>
                            <lib>${java.home}/lib/security/US_export_policy.jar</lib>
                            <lib>${java.home}/lib/ext/sunjce_provider.jar</lib>
                        </libs>
    
                        <!--加载文件的过滤器,就是你的工程目录了-->
    
                        <!--<inFilter>com/test/prog/**</inFilter>-->
    
                        <!--<inFilter>com/itdct/es/**</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>

     

     

     

     

    展开全文
  • maven+proguard第三方jar打包混淆

    万次阅读 2016-03-24 14:49:10
    maven+proguard第三方jar打包混淆
  • 本文中介绍的项目使用了SSM框架。项目包结构: 该项目是典型的Maven WEB项目 主要混淆对象 对类的名称、属性、...Maven 配置(pom.xml)使用Maven集成的ProGuard插件,混淆配置不用单独建立文件<project xmlns="http:/
  • maven proguard混淆代码

    千次阅读 2019-07-13 12:47:37
    在pom.xml中插入以下代码:然后根据自己需要修改<option>...}</option>...-- ProGuard混淆插件--> <plugin> <groupId>com.github.wvengen</groupId> <...
  • 这里我采用了Maven+ProGuard的方法进行代码混淆,可以直接修改pom文件,也可以修改pom文件同时加上ProGuard的配置文件。 将以下代码在模块的pom文件中放到build标签里面(options注释掉是因为我添加了ProGuard的配置...
  • 今天在制作混淆发布包的时候,老是抛出内存溢出错误。仔细查看后,发现问题出在Proguard插件上,异常如下: [proguard] Exception in thread &...在maven的pom.xml中proguard配置处,加入以下配置 true xxxx...
  • 第一种方法 仅做参考,因为没有实现出来 大体方式是通过一个main工具来做 但是要自己扣到jar包才能执行。 而且执行好像不太成功 所以选择放弃 仅做参考 ...Proguard使用最新,最全教程,亲自试验 2...
  • springboot项目使用ProGuard加密工具加密的过程如下: 在springboot项目的pom.xml文件中,引入插件相关依赖 <build> <plugins> <plugin> <groupId>com.github.wvengen<...
  • &lt;plugins&gt;  &lt;plugin&gt;...org.apache.maven.plugins&lt;/groupId&gt;  &lt;artifactId&gt;maven-resources-plugin&lt;/artifactId&gt;  ...
  • <artifactId>proguard-maven-plugin <phase>package <goal>proguard <obfuscate>true ${basedir}/proguard.conf <!-- 添加依赖,这里你可以按你的需要修改 --> <libs> ${java.home}/...
  • 如题:springboot maven项目使用代码混乱工具proguard的时候,发现类名称变成a\b\c了,但是局部变量名称还是原来的。 我想保持类名是原来的,方法里面的局部变量改成a、b、c之类的应该要添加哪个配置呢? ...
  • 实现maven管理的Javaweb项目的proguard代码混淆功能、工具包下载及错误解决
  • @ ProGuard+Maven混淆Java代码 ProGuard+Maven混淆Java代码 maven的pom.xml写如下代码 导入ProGuard的依赖 打包成功 maven的pom.xml写如下代码 // An highlighted block <!-- ProGuard混淆插件--> <plugin...
  • 一、场景介绍 两个工程 Project1,Project2(将被混淆的工程)。Project1 将通过 Maven 依赖配置的方式引用混淆后的 Project2。后面我会详细介绍 pom.xml 的配置。 二、Maven 配置 1、Project1 的 pom...
  • java代码混淆(使用 ProGuard maven插件)

    千次阅读 2020-05-29 15:26:44
     2、使用花指令,使得class文件不能反编译(利用反编译工具漏洞);安全性一般,还是有花指令破解器;  3、代码混淆,提高代码阅读成本;简单易操作,一般采用这种或者与其它方式结合;  我们项目中用到的即为...
  • Springboot+proguard+maven 混淆

    万次阅读 热门讨论 2017-11-14 14:04:55
    最近在弄项目混淆的,proguard是最为广为使用的工具之一,可是用他的客户端来混淆springboot项目的时候最后总得不到可执行的jar。后来发现了proguard-maven-plugin这个插件,所有proguard的指令都可以在pom中实现,...
  • ProGuard代码混淆插件Maven配置
  • proguard-maven-plugin 配置

    千次阅读 2018-12-07 17:08:15
    &lt;plugin&gt; &lt;groupId&gt;com.github.wvengen&lt;/groupId&gt;...proguard-maven-plugin&lt;/artifactId&gt; &lt;version&gt;2.0.11&lt;/v...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,990
精华内容 2,396
关键字:

maven使用proguard