SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

这篇具有很好参考价值的文章主要介绍了SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编译

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

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

反编译

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

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

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

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

怎么做?

混淆

该篇玩的代码混淆 ,是其中一种手段。Java技术进阶路线:https://www.yoodb.com/

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

先看一张效果示例图 :

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

开搞

正文

先看一下我们混淆一个项目代码,要做啥?
SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

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

proguard.cfg

#指定Java的版本
-target 1.8
#proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等
-dontshrink
#是否关闭字节码级别的优化,如果不开启则设置如下配置
-dontoptimize
#混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
# 对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames
#混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-adaptclassstrings
 
#对异常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此选项将保存接口中的所有原始名称(不混淆)-->
-keepnames interface ** { *; }
# 此选项将保存所有软件包中的所有原始接口文件(不进行混淆)
#-keep interface * extends * { *; }
#保留参数名,因为控制器,或者Mybatis等接口的参数如果混淆会导致无法接受参数,xml文件找不到参数
-keepparameternames
# 保留枚举成员及方法
-keepclassmembers enum * { *; }
# 不混淆所有类,保存原始定义的注释-
-keepclassmembers class * {
                        @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
-keep public class com.example.myproguarddemo.MyproguarddemoApplication {
        public static void main(java.lang.String[]);
    }

注意点:

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

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

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

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

<build>
    <plugins>
        <plugin>
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <version>2.6.0</version>
            <executions>
                <!-- 以下配置说明执行mvn的package命令时候,会执行proguard-->
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>proguard</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- 就是输入Jar的名称,我们要知道,代码混淆其实是将一个原始的jar,生成一个混淆后的jar,那么就会有输入输出。 -->
                <injar>${project.build.finalName}.jar</injar>
                <!-- 输出jar名称,输入输出jar同名的时候就是覆盖,也是比较常用的配置。 -->
                <outjar>${project.build.finalName}.jar</outjar>
                <!-- 是否混淆 默认是true -->
                <obfuscate>true</obfuscate>
                <!-- 配置一个文件,通常叫做proguard.cfg,该文件主要是配置options选项,也就是说使用proguard.cfg那么options下的所有内容都可以移到proguard.cfg中 -->
                <proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>
                <!-- 额外的jar包,通常是项目编译所需要的jar -->
                <libs>
                    <lib>${java.home}/lib/rt.jar</lib>
                    <lib>${java.home}/lib/jce.jar</lib>
                    <lib>${java.home}/lib/jsse.jar</lib>
                </libs>
                <!-- 对输入jar进行过滤比如,如下配置就是对META-INFO文件不处理。 -->
                <inLibsFilter>!META-INF/**,!META-INF/versions/9/**.class</inLibsFilter>
                <!-- 这是输出路径配置,但是要注意这个路径必须要包括injar标签填写的jar -->
                <outputDirectory>${project.basedir}/target</outputDirectory>
                <!--这里特别重要,此处主要是配置混淆的一些细节选项,比如哪些类不需要混淆,哪些需要混淆-->
                <options>
                    <!-- 可以在此处写option标签配置,不过我上面使用了proguardInclude,故而我更喜欢在proguard.cfg中配置 -->
                </options>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.example.myproguarddemo.MyproguarddemoApplication</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

注意点:

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

然后可以看到:

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

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

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

然后可以看到jar的生成:

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

看看效果:

SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...

好了,该篇就到这。文章来源地址https://www.toymoban.com/news/detail-461312.html

到了这里,关于SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 再也不用担心变量类型错误!学会JS中如何轻松检查变量类型

    今天要分享的问题就是: 如何在JS中检查一个变量的类型? 先上结论: 如果判断的是基本数据类型或JavaScript内置对象,使用toString;如果要判断的是自定义类型,请使用instanceof。 在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类。 基本类型

    2024年02月08日
    浏览(39)
  • 使用ChatGPT+MindShow一键生成PPT,以后再也不用担心制作PPT啦

    💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜 📝 个人主页:馆主阿牛🔥 🎉 支持我:点赞👍+收藏⭐️+留言📝 💬格言:迄今所有人生都大写着失败,但不妨碍我继续向前!🔥 我们经常会有制作ppt的需求,尤其大学里面的小组报告,什么班会团课之类的,

    2023年04月23日
    浏览(40)
  • Z-Libary最新地址检测,再也不用担心找不到ZLibary了

    Z-Library。世界上最大的数字图书馆。 如果你知道了一本书的书名,那在Z-Library上基本上都可以找到进行下载, Z-Library 有很多入口,分为官方和民间镜像。官方自己做了个跳转站点,会自动寻找官方可用网站。一般用官方入口即可,但也存在所有官方入口均封闭情况,此时建议

    2024年02月08日
    浏览(28)
  • 解析不同种类的StableDiffusion模型Models,再也不用担心该用什么了

    Stable Diffusion是一个基于Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。具体来说,Stable Diffusion在 LAION-5B 的一个子集上训练了一个Latent Diffusion Models,该模型专门用于文图生成。Latent Diffusion Models通过在一个潜在表示空间中迭代“去噪”数据来生成图

    2023年04月19日
    浏览(31)
  • C语言——程序环境和预处理(再也不用担心会忘记预处理的知识)

    先简单了解一下程序环境,然后详细总结翻译环境里的编译和链接,然后在总结编译预处理。 在 ANSI C 的任何一种实现中,存在两个不同的环境 翻译环境:这个环境中源代码被转换为可执行的机器指令。 执行环境:执行二进制代码。 计算机如何执行二进制指令? 我们写的C语

    2024年02月09日
    浏览(43)
  • 初识Linux(上),看了这篇文章,妈妈再也不用担心我Linux找不到门了。

    “我会定期分享我的学习经验,也欢迎大家留言和交流,让我们共同学习和进步!感谢大家的支持,让我们一起开启这段充满技术乐趣的旅程吧!” 系列文章 初识Linux(上).妈妈再也不用担心我Linux找不到门了。 初识Linux(中).妈妈再也不用担心我Linux找不到门了。 初识Linux(下

    2024年02月05日
    浏览(31)
  • 有了它,你再也不用担心作曲啦!智能作曲新纪元:Suno AI引领音乐创作的未来之路!

    Suno AI:赋予音乐无限想象,你的个人智能作曲家,让灵感瞬间跃动成曲! - 精选真开源,释放新价值。 Suno AI,这一开创性的人工智能音乐创作平台,是由全球顶尖的科技创新企业Anthropic公司以及相关前沿科研团队深度研发并精心打磨的结晶。该解决方案以革新性的视角,

    2024年04月17日
    浏览(42)
  • Selenium教程05:使用webdriver-manager自动下载浏览器驱动,再也不用担心driver版本的问题了

    WebDriverManager是一个用于管理Web驱动程序的工具,主要用于自动化测试领域。在进行 Selenium 测试时,需要一个与浏览器相匹配的 Web 驱动程序,以便控制和操作浏览器。WebDriverManager可以自动下载和管理浏览器驱动程序,会自动检测本地系统中安装的浏览器,并下载对应的浏览

    2024年01月17日
    浏览(53)
  • 【大麦小米学量化】使用xtquant调用迅投MiniQMT客户端定时操作逆回购,再也不担心忘了赚零花钱了(含完整源代码)

    前面很多人提到逆回购,但是经常一忙就忘了收盘后下单逆回购,白给的肉又飞了。这里我们使用xtquant玩玩逆回购,代码简单,复制到本地,配置好即可运行,收益无负担,送你的钱不要白不要。 简单来讲,逆回购从本质上讲是一种短期贷款,就是你把钱借给别人,获得固

    2024年02月02日
    浏览(23)
  • 学会这几招,再也不担心电脑被黑客入侵

    人们常说Mac不能被黑客入侵,但事实并非如此。虽然Mac可能不像Windows PC频繁的受到攻击,但黑客成功入侵Mac的例子有很多,从虚假程序到利用漏洞。 Windows PC比MacBook更频繁成为目标的重要原因之一是市场占用份额。截至 2022 年,Windows 在桌面市场的操作系统中的全球市场份额

    2024年01月22日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包