java class 混淆_java混淆了吗

前言

最近在项目中碰到个一个场景,我们需要把自己的java项目jar包部署到一个第三方的服务器上,虽然双方互相信任,但是综合考虑,避免别人拿到jar包后可以很快的编译出源码,我们决定给代码加一层混淆,虽然此方法不能从根源上解决问题,但是做了一层混淆,也可以增加阅读源码的难度,总结了一下,写下这篇文章。

如何反编译java代码

我用的是mac电脑,从官网:http://java-decompiler.github...下载JD-GUI,官网有很多版本,下载后安装打开即可,导入你想反编译的jar,我这里随便找了个jar包做演示

9e4fd6306d172bf68dc0475ddf6768f8.png

何为java混淆

细心的小伙伴肯定发现了,上面的截图有的包名是a,b,c这样命名的,但凡有点节操的程序员都不会这样命名的,这就是被混淆后的代码,让人不会一眼看出来代码里面的逻辑,效果会像下面这样

cfe65fd358a9cd4bc09aee7392868a76.png

可以看到类名,包名都被修改了

进行java混淆

我们以之前springboot项目为例,进行service层的代码的混淆,混淆前效果如下:

6efc1789356287dcfc7b1ef16755a3d4.png

f597f604f657442ea83d8160b7c7fa56.png

接下来我们只需要在pom里面加入如下插件

org.apache.maven.plugins

maven-compiler-plugin

3.1

1.7

1.7

UTF-8

com.github.wvengen

proguard-maven-plugin

2.0.14

package

proguard

6.1.0beta2

${project.build.finalName}.jar

${project.build.finalName}.jar

true

-dontshrink

-dontoptimize

-adaptclassstrings

-keepdirectories

-keepattributes

Exceptions,

InnerClasses,

Signature,

Deprecated,

SourceFile,

LineNumberTable,

*Annotation*,

EnclosingMethod

-keepnames interface **

-keepparameternames

-dontusemixedcaseclassnames

-keep

class com.stone.zplxjj.Application {

public static void main(java.lang.String[]);

}

-keep class com.stone.zplxjj.autoconfiguration.** { *; }

-keep class com.stone.zplxjj.config.** { *; }

-keep class com.stone.zplxjj.controller.** { *; }

-keep class com.stone.zplxjj.dao.** { *; }

-keep class com.stone.zplxjj.entity.** { *; }

-keep class com.stone.zplxjj.event.** { *; }

-keep class com.stone.zplxjj.interceptor.** { *; }

-keep class com.stone.zplxjj.listener.** { *; }

-keep class com.stone.zplxjj.properties.** { *; }

-keep class com.stone.zplxjj.filter.** { *; }

-ignorewarnings

-keep interface * extends * { *; }

-keepclassmembers class * {

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

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

}

true

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

net.sf.proguard

proguard-base

6.1.0beta2

org.springframework.boot

spring-boot-maven-plugin

执行打包命令:mvn package,会看到生成如下

0fff8e8a49b7b79e7756a49bc627fe96.png

我们看到了生成了不只一个jar包,还有一些别的文件,这个我们放后面介绍,我们先看下划红线的jar反编译后的效果

4285bb2202b5084cbb041c02a72eba54.png

c12d18be245989aca14d8a3883a21caa.png

可以看到我们针对service包下面的类混淆成功了

注意点

zplxjj_proguard_base.jar是没有经过混淆的jar

两个.txt文件说明了混淆前和混淆后的对应关系

如果项目中引入了spring框架,类的注入id要保持唯一性,否则就要重写生成bean的id规则的方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值