写点什么

Spring Boot 项目代码混淆实战:保护代码安全,防止泄露

作者:
  • 2023-12-04
    广东
  • 本文字数:3019 字

    阅读完需:约 10 分钟


目录

摘要:

引言:

1.编写混淆配置文件

2.配置Maven插件

3.执行混淆

下载ipa代码混淆保护工具

获取ipaguard登录码

代码混淆

文件混淆

IPA重签名与安装测

4.查看混淆效果




摘要:

本篇博客介绍了如何使用 Proguard 实现代码混淆,从而保护自己的代码不被反编译。通过给出配置文件和 maven 插件的搭配,详细阐述了混淆的具体步骤和注意点。

引言:

在开发中,我们经常会遇到需要保护代码不被反编译的需求。这时候,就需要使用代码混淆来保护自己的代码。本文将介绍使用 Proguard 实现代码混淆的具体步骤和注意事项。

1.编写混淆配置文件

在项目路径下,新增一份名为 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 ** { *; } # 保留枚举成员及方法 -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[]); }
复制代码


需要注意的是,每种类别的配置都有其具体的语法和参数,需要按照文档进行正确的编写。

2.配置 Maven 插件

在项目的 pom.xml 文件中,加入 Proguard 混淆插件。具体代码如下:

<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>
复制代码


其中,我们需要注意以下几点:

  • 配置 Proguard 插件的版本号、执行时机等基本信息;

  • 指定输入、输出 jar 包的名称;

  • 指定 Proguard 配置文件的位置;

  • 配置额外需要引入的 jar 包;

  • 配置混淆的选项。


3.执行混淆

在 Maven 中执行 package 命令即可进行代码混淆。执行完成后,会在 target 目录下生成一个混淆后的 jar 包。

iOS 加固保护是直接针对 ios ipa 二进制文件的保护技术,可以对 iOS APP 中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对 APP 进行完整性保护,防止应用程序中的代码及资源文件被恶意篡改。Ipa Guard 通过修改 ipa 文件中的 macho 文件中二进制数据(代码模块配置)进行操作,无需源码。不限定开发技术平台。支持 oc,swift,cocos2d-x、unity3d、quick-cocos,html5 ,react native 等等各种开发技术。Ipa Guard 主要包含代码混淆全面、资源文件处理、不需要源代码更安全、调试信息清理、即时测试运行。 

下载 ipa 代码混淆保护工具

Ipa Guard 是一款功能强大的 ipa 混淆工具,不需要 ios app 源码,直接对 ipa 文件进行混淆加密。不限制 OC,Swift,Flutter,React Native,H5 类 app。工具跨平台版,windows,linux,mac 系统都可用直接去官网下载https://www.ipaguard.com 



获取 ipaguard 登录码

双击 ipaguard.exe 启动 ipaguard 后点击右上角的登录按钮,输入邮箱后,没登录码的点击获取登录码,有的可以直接输入登录码 



代码混淆

Ipa Guard 可以对 ipa 文件中的类、方法、方法参数、变量等进行全面修改混淆,使其名称成为没有意义的乱码,极大地增加应用破解的难度。 选择要处理的 ipa 文件,点击左侧的代码菜单,里面可以分别对 oc 类,方法,swift 类,方法等进行选择配置要处理的内容 



文件混淆

Ipa Guard 代码混淆工具支持对代码中的各种资源图片、js、mp3、xib、sb、json、html 等名称进行修改,使其变得无意义,增加破解 ipa 的难度。 



IPA 重签名与安装测试

ipaguard 有签名和重签名功能,能在 windows,mac,和 linux 上运行。在对 ipa 进行混淆和保护后,可以直接通过签名安装到测试手机,非常的方便测试检查混淆后的效果。 



4.查看混淆效果



使用 JD-GUI 等反编译工具,查看混淆后的代码。可以看到,经过代码混淆后,原本明文的代码已被替换为无意义的字符串和符号,大大提高了代码的安全性。

总结:

通过本文的介绍,我们了解到了使用 Proguard 实现代码混淆的基本步骤和注意事项。在实际开发中,我们应该根据具体情况,对混淆配置进行适当的调整,以达到最佳的保护效果。

参考资料


用户头像

关注

还未添加个人签名 2023-03-27 加入

还未添加个人简介

评论

发布
暂无评论
Spring Boot 项目代码混淆实战:保护代码安全,防止泄露_世_InfoQ写作社区