资讯专栏INFORMATION COLUMN

java混淆了吗

mumumu / 2792人阅读

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

前言

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

如何反编译java代码

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

何为java混淆

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

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

进行java混淆

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



接下来我们只需要在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
                    
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                    
                    true
                    
                        
                        ${java.home}/lib/rt.jar
                    
                
                
                    
                        net.sf.proguard
                        proguard-base
                        6.1.0beta2
                    
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            

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

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


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

注意点

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

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

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

更多pom文件细节可以参考:https://www.guardsquare.com/e...

更多文章可关注个人博客:https://www.zplxjj.com和公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74918.html

相关文章

  • 你有freestatic吗?

    摘要:小节也有类似的栗子,其结论是静态方法不具有多态性。来自一个有趣的问题静态字段论述的问题大致是说以上两个类中各有几个方法本质其实就是有无时的区别。 Demo1 来自关于java中static一个有意思的小案例: class Employee { private static Employee employee = new Employee(); public static...

    cppprimer 评论0 收藏0
  • 关于python编码,你真的明白了吗

    摘要:二进制位,是计算机内部数据储存的最小单位,是一个位二进制数。由于源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为编码。 计算机存储的几个概念 想要彻底搞清楚编码问题,我们必须要先搞清楚计算机是怎么存储数据的,这就涉及到了计算机基础的几个概念了,开篇我们就先来捋捋这几个容易混淆的概念。 bit 二进制位, 是计算机内部数据储存的最小单位,1...

    darcrand 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<