0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SpringBoot玩一玩代码混淆,防止反编译代码泄露

jf_ro2CN3Fa 来源:芋道源码 作者:芋道源码 2022-11-23 10:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


编译

简单就是把代码跑一哈,然后我们的代码 .java文件 就被编译成了 .class 文件

a35b132a-6ad3-11ed-8abf-dac502259ad0.png

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

反编译

就是针对编译生成的 jar/war 包 里面的 .class 文件 逆向还原回来,可以看到你的代码写的啥。

比较常用的反编译工具 JD-GUI ,直接把编译好的jar丢进去,大部分都能反编译看到源码:

a39ec7dc-6ad3-11ed-8abf-dac502259ad0.png

那如果不想给别人反编译看自己写的代码呢?

怎么做?

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

混淆

该篇玩的代码混淆 ,是其中一种手段。

我给你看,但你反编译看到的不是真正的代码。

先看一张效果示例图 :

a3c97f68-6ad3-11ed-8abf-dac502259ad0.png

开搞

正文

先看一下我们混淆一个项目代码,要做啥?

a3ebd982-6ad3-11ed-8abf-dac502259ad0.png

一共就两步

第一步, 在项目路径下,新增一份文件 proguard.cfg :

proguard.cfg

#指定Java的版本
-target1.8
#proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等
-dontshrink
#是否关闭字节码级别的优化,如果不开启则设置如下配置
-dontoptimize
#混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
#对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames
#混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-adaptclassstrings

#对异常、注解信息予以保留
-keepattributesExceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
#此选项将保存接口中的所有原始名称(不混淆)-->
-keepnamesinterface**{*;}
#此选项将保存所有软件包中的所有原始接口文件(不进行混淆)
#-keepinterface*extends*{*;}
#保留参数名,因为控制器,或者Mybatis等接口的参数如果混淆会导致无法接受参数,xml文件找不到参数
-keepparameternames
#保留枚举成员及方法
-keepclassmembersenum*{*;}
#不混淆所有类,保存原始定义的注释-
-keepclassmembersclass*{
@org.springframework.context.annotation.Bean*;
@org.springframework.beans.factory.annotation.Autowired*;
@org.springframework.beans.factory.annotation.Value*;
@org.springframework.stereotype.Service*;
@org.springframework.stereotype.Component*;
}

#忽略warn消息
-ignorewarnings
#忽略note消息
-dontnote
#打印配置信息
-printconfiguration
-keeppublicclasscom.example.myproguarddemo.MyproguarddemoApplication{
publicstaticvoidmain(java.lang.String[]);
}

注意点:

a4092028-6ad3-11ed-8abf-dac502259ad0.png

其余的看注释,可以配置哪些类不参与混淆,哪些枚举保留,哪些方法名不混淆等等。

第二步,在pom文件上 加入proguard 混淆插件 :

build标签里面改动加入一下配置

<build>
<plugins>
<plugin>
<groupId>com.github.wvengengroupId>
<artifactId>proguard-maven-pluginartifactId>
<version>2.6.0version>
<executions>

<execution>
<phase>packagephase>
<goals>
<goal>proguardgoal>
goals>
execution>
executions>
<configuration>

<injar>${project.build.finalName}.jarinjar>

<outjar>${project.build.finalName}.jaroutjar>

<obfuscate>trueobfuscate>

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

<libs>
<lib>${java.home}/lib/rt.jarlib>
<lib>${java.home}/lib/jce.jarlib>
<lib>${java.home}/lib/jsse.jarlib>
libs>

<inLibsFilter>!META-INF/**,!META-INF/versions/9/**.classinLibsFilter>

<outputDirectory>${project.basedir}/targetoutputDirectory>

<options>

options>
configuration>
plugin>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<executions>
<execution>
<goals>
<goal>repackagegoal>
goals>
<configuration>
<mainClass>com.example.myproguarddemo.MyproguarddemoApplicationmainClass>
configuration>
execution>
executions>
plugin>
plugins>
build>

注意点:

a426238a-6ad3-11ed-8abf-dac502259ad0.pnga443bbd4-6ad3-11ed-8abf-dac502259ad0.png

然后可以看到:

a45c2b24-6ad3-11ed-8abf-dac502259ad0.png

然后点击package,正常执行编译打包流程就可以 :

a473ce1e-6ad3-11ed-8abf-dac502259ad0.png

然后可以看到jar的生成:

a49a9878-6ad3-11ed-8abf-dac502259ad0.png

看看效果:

a4ba91b4-6ad3-11ed-8abf-dac502259ad0.png

好了,该篇就到这。



审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    3006

    浏览量

    116828
  • 代码
    +关注

    关注

    30

    文章

    4976

    浏览量

    74375
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    16053
  • 编译
    +关注

    关注

    0

    文章

    696

    浏览量

    35279
  • SpringBoot
    +关注

    关注

    0

    文章

    178

    浏览量

    712

原文标题:SpringBoot 玩一玩代码混淆,防止反编译代码泄露

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    广和通携MagiCore AI陪伴解决方案亮相2026深圳国际玩具及潮展览会

    4月9-11日,广和通携融合AI潮与智能硬件创新成果、全栈式AI出海能力亮相国际玩具及潮(深圳)展览会11号馆11F22展台,为现场观众带来兼具科技感与趣味性的沉浸式体验。
    的头像 发表于 04-11 10:00 543次阅读
    广和通携MagiCore AI陪伴解决方案亮相2026深圳国际玩具及潮<b class='flag-5'>玩</b>展览会

    RTD 3.0.0 示例代码无法编译是哪里的问题?

    ) SDK 详细信息: 代码生成器在项目的“board”子目录中创建似乎既不需要也没有编译的文件。这可以通过几种不同的方式实现,但要重现的个分步说明如下: 1. 从示例创建
    发表于 04-03 06:51

    新手学单片机,主要是,学什么好?

    如果你是新手想学单片机,主要是为了,那我真心推荐从microbit入手。第,玩起来特别简单。不用费劲装什么专用软件,直接打开浏览器就能用MakeCode在线编程,连下载都省了。
    的头像 发表于 01-21 16:37 808次阅读
    新手学单片机,主要是<b class='flag-5'>玩</b>,学什么好?

    分析嵌入式软件代码的漏洞-代码注入

    。 鉴于此,开发人员应该了解其他避免代码注入的方法。 应该遵循的两个黄金规则以防止代码注入漏洞: 1.如果你可以避免的话,尽量不要将数据像代码
    发表于 12-22 12:53

    CW32L083的内置独立校准的RTC这般怎么

    CW32L083的内置独立校准的RTC这般怎么
    发表于 12-09 07:04

    v6编译v5的代码会报错,怎么解决?

    v6编译v5的代码会报错。要想正常编译通过,得用v6重零构建个项目才行吗
    发表于 12-08 06:21

    HarmonyOS应用代码混淆技术方案

    代码混淆技术可以增加代码的复杂性和模糊性,从而提高攻击者分析代码的难度。
    的头像 发表于 11-21 16:17 5732次阅读
    HarmonyOS应用<b class='flag-5'>代码</b><b class='flag-5'>混淆</b>技术方案

    编译器如何指定代码的地址段?

    我在官方 gcc 的基础上添加了自定义指令,目前可以正确编译出汇编代码,但是我该如何指定汇编结果的地址段,让生成的代码符合蜂鸟的地址分配呢?求助大神帮助指导下,thx~
    发表于 11-10 06:06

    ArkGuard混淆工具使用指南

    ArkGuard是款源码混淆工具,提供基础混淆功能。当软件发布后,其代码很容易被他人获取分析,通过阅读清晰的变量名、函数名,攻击者或竞争者可以非常轻松地理解
    的头像 发表于 09-28 16:05 1045次阅读
    ArkGuard<b class='flag-5'>混淆</b>工具使用指南

    东莞AI潮签下亿元出海大单,加速国产芯片走向普及

    生产基地,全国近85%的潮产自这里,全球四分之的动漫衍生品由东莞制造。据不完全统计,2024年东莞全市潮规上限上企业160家,实现营收近238亿元,同比增长19%。今年上半年,东莞有进出口实绩的玩具企业达940家,出口玩具
    的头像 发表于 09-08 07:07 4532次阅读

    移远通信 × 奥飞娱乐,共同打造AI潮2.0时代

    上海——当童年记忆中的“喜羊羊”不再只是屏幕里的动画角色,而是化身能倾听心声、感知情绪的智能伙伴,场由AI技术驱动的潮革命已悄然来临。   作为全球领先的物联网整体解决方案供应商,移远通信凭借
    发表于 06-30 17:31 1596次阅读
    移远通信 × 奥飞娱乐,共同打造AI潮<b class='flag-5'>玩</b>2.0时代

    移远通信 × 奥飞娱乐,共同打造AI潮2.0时代

    当童年记忆中的“喜羊羊”不再只是屏幕里的动画角色,而是化身能倾听心声、感知情绪的智能伙伴,场由AI技术驱动的潮革命已悄然来临。作为全球领先的物联网整体解决方案供应商,移远通信凭借前瞻性的AI
    的头像 发表于 06-30 17:02 1169次阅读
    移远通信 × 奥飞娱乐,共同打造AI潮<b class='flag-5'>玩</b>2.0时代

    【经验分享】玩转FPGA串口通信:从“幻觉调试”到代码解析

    FPGA开发,思路先行!FPGA板子,读代码是基本功!尤其对从C语言转战FPGA的“宝贝们”来说,适应流水线(pipeline)编程可能需要点时间。上篇点灯代码解读了基础,而如果能亲手写出串口通讯
    的头像 发表于 06-05 08:05 1223次阅读
    【经验分享】玩转FPGA串口通信:从“幻觉调试”到<b class='flag-5'>代码</b>解析

    信息化时代国产主板如何防止信息泄露

    在数字化时代,每份机密的泄露都可能成为我们的致命伤,尤其是如今网络如此发达的5G时代,如何防止网络信息泄密,已经成为每个人必须直面的问题。
    的头像 发表于 05-21 09:32 564次阅读

    OLED代码分享

    OLED代码
    发表于 04-29 17:04 2次下载