java maven 混淆_利用Maven+ProGuard进行代码混淆,个人心得

本文原创作者:TheMing学点知识,

未经许可禁止转载!

何为代码混淆

代码混淆就是对反编译后的代码的类名,参数名进行混淆,使得代码不容易被看懂。

Maven+ProGuard

这里我采用了Maven+ProGuard的方法进行代码混淆,可以直接修改pom文件,也可以修改pom文件同时加上ProGuard的配置文件。

将以下代码在模块的pom文件中放到build标签里面(注:options注释掉是因为我添加了ProGuard的配置文件,potions里面的内容都加到了ProGuard的配置文件中)

com.github.wvengen

proguard-maven-plugin

2.0.14

package

proguard

true

pg

-dontshrink

-dontskipnonpubliclibraryclasses

-dontskipnonpubliclibraryclassmembers

-optimizations !field/propagation/value

-keepdirectories

-keep class * extends java.lang.annotation.Annotation {*;}

-keepattributes InnerClasses,Signature,LineNumberTable,*Annotation*,Exceptions

-keepclassmembers class * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[] serialPersistentFields;

private void

writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

-->

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

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

${project.build.finalName}-pg

在与pom同等目录下添加ProGuard配置文件proGuard.conf

#关闭压缩

-dontshrink

#混淆时不生成大小写混合的类名

-dontusemixedcaseclassnames

#不忽略指定jars中的非public calsses

-dontskipnonpubliclibraryclasses

#不忽略指定类库的public类成员

-dontskipnonpubliclibraryclassmembers

-optimizations !field/propagation/value

-keepdirectories

#保留继承了注释的类

-keep class * extends java.lang.annotation.Annotation {*;}

-keepattributes InnerClasses,Signature,LineNumberTable,*Annotation*,Exceptions

-keepclassmembers class * implements java.io.Serializable {

static final long serialVersionUID;

private static final java.io.ObjectStreamField[] serialPersistentFields;

private void

writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

-keep class xxx.xxx.**

-keep class xxx.xxx.repository.** {*;}

-keepclassmembers class xxx.xxx.service.impl.** {

public ;

private ;

}

(注:被xml和jsp引用的类,采用了反射的类都应该保留下来)

完成以上步骤后,执行maven打包,就会自动将混淆后的xx-pg.jar包部署到maven的仓库中。

代码混淆—模块依赖

加入模块中存在依赖,又该如何办?这里给出一个方案。

假设a需要被混淆,b不需要被混淆,此时b依赖a

那么在b模块的pom文件应该加上classifrier标签,并加上pg:

xx.xx

a

pg

${project.version}

这时打包b模块的时候项目就会去模块仓库寻找a的pg包,如果没有classifier这句,则寻找没有混淆的a的jar包。

最后,想知道项目有没有被混淆?就需要用到反编译去查看。

反编译工具

反编译工具比较推荐jd-gui-windows-1.4.0,下载下来解压即可使用。

反编译方法,利用上述例子,从b的war包到\WEB-INF\lib目录,找出a的pg包(a-pg.jar),将其拉出来,然后用jd-gui对其进行反编译。

反编译后像图片那样就是成功了。

最后还有几个地方需要提醒:

假如混淆的是个war包,就要将pg.jar包解压后的文件覆盖掉war包中\WEB-INF\classes的文件。

以上就是代码混淆的全部内容,第一次写博客,写的不好的地方请多多包涵!!

Spring Boot是一个开发框架,用于简化基于Java的应用程序的开发和部署。它提供了一个自动化配置的方式来简化开发过程,同时也提供了一些常用的功能模块,如安全、数据库连接等。 ProGuard是一个代码混淆工具,用于保护Java代码免受逆向工程和代码分析的攻击。它通过对代码进行优化和混淆,使得反编译后的代码难以理解和修改,从而增加了代码的安全性。 Maven是一个项目管理工具,用于构建、发布和管理Java项目的依赖关系。它可以帮助我们方便地管理项目的依赖关系,包括第三方库和插件。同时,它还提供了一些命令和配置,来支持多模块的项目结构。 在使用Spring Boot、ProGuardMaven实现代码混淆时,我们可以按照以下步骤进行操作: 1. 在Maven中创建一个多模块的项目结构。通过使用Maven的父子项目关系,我们可以在一个主项目中管理多个子模块。 2. 在子模块中引入Spring Boot和ProGuard的依赖。在子模块的pom.xml文件中,添加对Spring Boot和ProGuard的相关依赖配置。 3. 配置ProGuard混淆规则。在子模块中创建一个proguard.cfg文件,并添加相关的混淆规则。这些规则可以用于指定哪些类、方法和字段需要进行混淆,以及如何进行混淆。 4. 在Maven的构建过程中,添加对ProGuard的插件配置。通过对Maven的插件进行配置,使得在构建项目时自动应用ProGuard混淆规则。 5. 构建和执行项目。在Maven中使用命令进行项目的构建和执行,观察代码是否已经被混淆。如果一切顺利,你将会得到一个经过混淆代码。 综上所述,通过使用Spring Boot、ProGuardMaven,我们可以实现对Java代码混淆保护。这种方式可以增加代码的安全性,防止代码被逆向工程和代码分析的攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值