Jar混淆及加密(proguard/xjar)

目录

混淆

混淆工具

项目目录

混淆步骤

maven setting.xml

zhny-core模块

zhny-api模块

参考博客地址

加密

加密工具

如何安装go环境 


混淆

混淆工具

proguard(具有压缩,混淆,优化代码功能,此处只用到了混淆功能)    官网地址      官网说明文档

项目目录

混淆步骤

  • maven setting.xml

修改中心库为

<mirror>
    <id>alimaven</id>
    <mirrorOf>central,!jitpack.io</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
  • zhny-core模块

1.pom.xml文件新增proguard插件

<plugin>

                <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包名 -->

                    <injar>${project.build.finalName}.jar</injar>

                    <!-- 混淆之后的jar包名 -->

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

                    <obfuscate>true</obfuscate>

                    <!-- 指定该模块是否是项目的一部分 -->

                    <attach>true</attach>



                    <!-- proguard配置文件 -->

                    <proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>

                    <!-- 依赖的jar包 -->

                    <libs>

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

                    </libs>

                </configuration>

                <dependencies>

                    <dependency>

                        <groupId>net.sf.proguard</groupId>

                        <artifactId>proguard-base</artifactId>

                        <version>6.0.3</version>

                    </dependency>

                </dependencies>

            </plugin>

2.pom.xml同级目录新增proguard.cfg,配置如下

# JDK目标版本1.8

-target 1.8

# 不做收缩(删除注释、未被引用代码)

-dontshrink

# 不做优化(变更代码实现逻辑)

-dontoptimize

-ignorewarnings

# 不路过非公用类文件及成员

-dontskipnonpubliclibraryclasses

-dontskipnonpubliclibraryclassmembers

# 混淆时不生成大小写混合的类名,默认是可以大小写混合

-dontusemixedcaseclassnames

# 优化时允许访问并修改有修饰符的类和类的成员

-allowaccessmodification

# 确定统一的混淆类的成员名称来增加混淆  对于类成员的命名的混淆采取唯一策略

-useuniqueclassmembernames

# 不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有 大量固定写法的包名

-keeppackagenames

## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代

-adaptclassstrings

#指定要保持的目录结构,默认情况下会删除所有目录以减小jar的大小。

-keepdirectories

# 不混淆所有特殊的类

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod

# This option will save all original methods parameters in files defined in -keep sections, otherwise all parameter names will be obfuscate.

#-keepparameternames

-keep interface * extends * { *; }

# 所列出到的注解不被混淆,类名会被混淆

-keepclassmembers class * {

    @org.springframework.beans.factory.annotation.Autowired *;

    @javax.annotation.Resource *;

    @org.springframework.beans.factory.annotation.Value *;

    }



# 混淆这个包下的类   此处需要更改

-keep class !com.movitech.product.zhny.** { *; }

-keep class com.movitech.product.zhny.anno.* { *; }

-keep class com.movitech.product.zhny.anno.** { *; }

-keep class com.movitech.product.zhny.base.* { *; }

-keep class com.movitech.product.zhny.base.** { *; }

-keep class com.movitech.product.zhny.common.* { *; }

-keep class com.movitech.product.zhny.common.** { *; }

-keep class com.movitech.product.zhny.enums.* { *; }

-keep class com.movitech.product.zhny.enums.** { *; }

-keep class com.movitech.product.zhny.formula.* { *; }

-keep class com.movitech.product.zhny.formula.** { *; }

-keep class com.movitech.product.zhny.infusion.message.* { *; }

-keep class com.movitech.product.zhny.infusion.message.** { *; }

-keep class com.movitech.product.zhny.lbpm.* { *; }

-keep class com.movitech.product.zhny.lbpm.** { *; }

-keep class com.movitech.product.zhny.load.* { *; }

-keep class com.movitech.product.zhny.load.** { *; }

-keep class com.movitech.product.zhny.mongodb.* { *; }

-keep class com.movitech.product.zhny.mongodb.** { *; }

-keep class com.movitech.product.zhny.mzm.* { *; }

-keep class com.movitech.product.zhny.mzm.** { *; }

-keep class com.movitech.product.zhny.mzmcache.* { *; }

-keep class com.movitech.product.zhny.mzmcache.** { *; }

-keep class com.movitech.product.zhny.project.base.* { *; }

-keep class com.movitech.product.zhny.project.base.** { *; }

-keep class com.movitech.product.zhny.project.cache.* { *; }

-keep class com.movitech.product.zhny.project.cache.** { *; }

-keep class com.movitech.product.zhny.project.calc.* { *; }

-keep class com.movitech.product.zhny.project.calc.** { *; }

-keep class com.movitech.product.zhny.project.energy.storage.* { *; }

-keep class com.movitech.product.zhny.project.energy.storage.** { *; }

-keep class com.movitech.product.zhny.project.eval.* { *; }

-keep class com.movitech.product.zhny.project.eval.** { *; }

-keep class com.movitech.product.zhny.project.install.service.* { *; }

-keep class com.movitech.product.zhny.project.install.service.impl.ProjectInstallDetailsImpl { *; }

-keep class com.movitech.product.zhny.project.install.service.impl.ProjectInstallDeviceSplitServiceImpl { *; }

-keep class com.movitech.product.zhny.project.install.service.impl.ProjectKezaishengInstallSchemeServiceImpl { *; }

-keep class com.movitech.product.zhny.project.install.service.impl.ProjectInstallSchemeServiceImpl

-keep class com.movitech.product.zhny.project.load.* { *; }

-keep class com.movitech.product.zhny.project.load.** { *; }

-keep class com.movitech.product.zhny.project.model.* { *; }

-keep class com.movitech.product.zhny.project.model.** { *; }

-keep class com.movitech.product.zhny.project.power.tech.* { *; }

-keep class com.movitech.product.zhny.project.power.tech.** { *; }

-keep class com.movitech.product.zhny.project.price.* { *; }

-keep class com.movitech.product.zhny.project.price.** { *; }

-keep class com.movitech.product.zhny.project.rengongGanyu.* { *; }

-keep class com.movitech.product.zhny.project.rengongGanyu.** { *; }

-keep class com.movitech.product.zhny.project.resource.* { *; }

-keep class com.movitech.product.zhny.project.resource.** { *; }

-keep class com.movitech.product.zhny.project.run.* { *; }

-keep class com.movitech.product.zhny.project.run.service.* { *; }

-keep class com.movitech.product.zhny.project.run.service.impl.ProjectRunServiceImpl

-keep class com.movitech.product.zhny.project.share.* { *; }

-keep class com.movitech.product.zhny.project.share.** { *; }

-keep class com.movitech.product.zhny.project.subsidy.* { *; }

-keep class com.movitech.product.zhny.project.subsidy.** { *; }

-keep class com.movitech.product.zhny.project.tech.road.comp.service.* { *; }

-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.AsyncLiangHuaBiXuanServiceImpl { *; }

-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.AsyncProjectService { *; }

-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompPriceService { *; }

-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompTechRoadServiceImpl

-keep class com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompServiceImpl

-keep class com.movitech.product.zhny.project.tech.road.service.* { *; }

-keep class com.movitech.product.zhny.project.tech.road.service.** { *; }

-keep class com.movitech.product.zhny.**.entity.** { *; }

-keep class com.movitech.product.zhny.**.dao.** { *; }

-keep class com.movitech.product.zhny.**.model.** { *; }

-keep class com.movitech.product.zhny.**.mode.** { *; }

-keep class com.movitech.product.zhny.**.event.** { *; }

-keep class com.movitech.product.zhny.**.callback.** { *; }

-keep class com.movitech.product.zhny.**.util.** { *; }

-keep class com.movitech.product.zhny.**.config.** { *; }

-keep class com.movitech.product.zhny.**.enums.** { *; }

-keep class com.movitech.product.zhny.**.scheme.** { *; }



# 指定摸个方法不被混淆

#-keep class !com.movitech.product.zhny.project.tech.road.comp.service.impl.ProjectTechRoadCompServiceImpl{

#    public com.movitech.product.zhny.project.tech.road.scheme.model.LhbxResult update(com.movitech.product.zhny.project.tech.road.comp.model.LiangHuaBiXuanModel);

#}

# 指定Keep类名不被混淆,类中的方法和成员仍然会被混淆

#-keep class com.movitech.product.zhny.project.calc.service.NyProCalcParamService

# 指定Keep类名不被混淆,且Keep的sayHello方法和成员helloStr不被混淆

#-keep class com.movitech.product.zhny.project.calc.service.impl.NyProCalcParamServiceImpl {

#    public void update(com.movitech.product.zhny.project.calc.entity.NyProCalcParamEntity);

##    private static final java.lang.String helloStr;

#}

-dontwarn **

# 不混淆main方法

#-keep class com.movitech.ZhnyApiApplication { *; }



# 不混淆所有的set/get方法,毕竟项目中使用的部分第三方框架(例如Shiro)会用到大量的set/get映射

#-keepclassmembers public class * {void set*(***);*** get*();}



# 不对包类的类名进行混淆,但对类中的属性和方法混淆



# 不混淆包下的所有类名,且类中的方法和属性也不混淆

 

  • zhny-api模块

在引用zhny-core的地方新增标签 <classifier>small</classifier>

修改完后的变化为:比如之前引用的为zhny-core-zhny-1.0.0-SNAPSHOT.jar,增加后则引用jar为zhny-core-zhny-1.0.0-SNAPSHOT-small.jar

 

注:small是默认生成,若需要修改,则在zhny-core的<attach/>标签下方增加  <attachArtifactClassifier>自定义名称</attachArtifactClassifier>  标签,此标签作用为指定生成文件分类,增加完后将<classifier/>处也改成自定义名称

 

参考博客地址

ProGuard代码混淆详细攻略

Spring boot多模块项目使用proguard实现代码混淆

Spring boot使用ProGuard实现代码混淆-单模块

 


 

加密

加密工具

xjar  github地址及详细说明文档

:github已有完整文档,此处不再赘述

友情提示:xjar加密过程不需要go环境,但是的加密后的jar包运行需要安装go环境(即运行服务器需要go环境)

如何安装go环境 

win10安装 >>

linux安装 >>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值