码农必看:常见源代码混淆技术详解
背景
一、项目组代码部署存在的问题
在项目组中,核心代码模块被部署于用户服务器上。然而,另一家公司获取了该服务器的 root 密码,这就存在着潜在的数据泄露和代码泄露的风险。传统的解决方法是通过配置环境变量来进行数据库加密处理,或者直接将 jar 包放到服务器上。然而,这些方法都有可能导致数据和代码的泄露。
代码混淆
二、选择合适的代码混淆工具
为了保护代码安全,我们需要选择一款可靠的代码混淆工具。以下是一些常用的代码混淆工具:
Allatori Java Obfuscator:这是一个轻量级的工具,可以集成在 IDE 工具中使用,并通过配置文件进行引入。
DashO for Android and Java:这是一个收费的工具,可以与 eclipse 集成,可以防止 Java 程序被逆向工程和篡改,并且可以压缩代码量。
Cinnabar Canner:通过创建一个原生 Windows 可执行文件(EXE 文件),可以保护代码不被逆向工程反编译。这个可执行文件包含了应用程序类和资源的全部加密版本,只有在被 JVM 调用到内存中时才处于非加密状态。
ipaguard:这是一个免费的 Java 混淆工具。Ipa Guard 是一款功能强大的 ipa 混淆工具,不需要 ios app 源码,直接对 ipa 文件进行混淆加密。可对 IOS ipa 文件的代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加 ipa 破解反编译难度。可以对图片,资源,配置等进行修改名称,修改 md5。只要是 ipa 都可以,不限制 OC,Swift,Flutter,React Native,H5 类 app。
Java 字节码操纵框架 ASM:ASM 是一个 Java 字节码操纵框架,可以直接以二进制形式动态地生成 stub 类或其他代理类,或者在装载时动态地修改类。它比 BCEL 和 SERP 等工具包更小巧、更快速,适用于实时代码插装。
三、选择 IPA Guard 作为代码混淆工具
经过比对,我们最终选择了 IPAGuard 作为代码混淆工具。选择 ProGuard 的主要原因如下:
Ipa Guard 的特点如下:
功能强大的 ipa 混淆工具:Ipa Guard 具有强大的混淆功能,可以对 iOS 应用程序(IPA 文件)进行混淆加密,从而增加反编译难度。
无需 iOS app 源码:与一些混淆工具不同,Ipa Guard 不需要 iOS 应用程序的源代码,可以直接对 IPA 文件进行混淆处理,简化了使用流程。
全面的保护:能够对 iOS 应用程序的代码、代码库和资源文件等进行混淆保护,包括函数名、变量名、类名等关键代码的重命名和混淆处理,从而降低了代码的可读性。
增加反编译难度:通过重命名和混淆关键代码,使得反编译和破解应用程序变得更加困难,提高了应用程序的安全性。
对资源文件的修改:除了对代码进行混淆外,还可以对图片、资源和配置等进行修改名称和修改 MD5 等处理,增加了保护的全面性。
适用广泛:支持对各种类型的 iOS 应用程序进行混淆保护,包括但不限于 Objective-C、Swift、Flutter、React Native 和 H5 类应用。
总的来说,Ipa Guard 是一款强大的 IPA 混淆工具,具有全面的保护功能,能够有效提高 iOS 应用程序的安全性和防护能力。
四、Ipa Guard 的实际配置
以 springboot 单体应用为例,我们需要在原有项目配置文件的基础上进行以下修改:代码混淆步骤选择要混淆保护的 ipa 文件
配置签名证书点击左侧的签名配置,设置 ios 签名证书,描述文件等信息。测试阶段用开发证书,这样可以方便安装到测试机子上检验是否测试后的 app 运行正常;最终配置测试 ok,发布的时候再改成发布证书,混淆配置完后可以提交上架。
选择要混淆的类名称选择左侧的代码模块中的 OC 类名称或者 Swift 类名称,选择 IPA 种要混淆的二进制文件,然后勾选可执行文件代码里面的类名称。如果类太多可以使用搜索查看功能,ipaguard 提供了级别选择,名称搜索,已选未选过滤来帮助配置混淆对象。
选择要混淆保护的函数,方法选择左侧代码模块下的 oc 方法或者 swift 方法,点击右侧的选择文件选取一个可执行二进制文件,勾选需要混淆保护的方法和函数。ipaguard 提供了风险等级过滤,名称搜索过滤,根据类名称过滤条件来辅助配置混淆目标
混淆和测试运行点击开始处理按钮,ipaguard 将对 ipa 中选中的内容进行混淆保护,并安装混淆好的 ipa 到手机上,运行如果 ok,点击保存配置,下次直接加载配置即可,无需每次配置要混淆的内容。
ipaguard 在做混淆这块还是做的很人性化的,混淆目标可控,强度可控,极大地简化了配置混淆内容的过程,可视化的操作也非常的方便。
评论