关于代码混淆,你不得不知道的几大基础知识
移动应用代码安全非常重要,代码逆向会导致代码逻辑被获取,进一步导致控制流被hook,安全防线被破,给APP安全带来巨大风险,因此开发者一般都会进行代码混淆保护。本文主要介绍了代码混淆的原理、方法、以及常见代码混淆的方式和工具。
代码混淆是将计算机程序的代码,转换成功能上等价,但是难于阅读和理解形式的行为。混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义,通过进行代码混淆可以有效提升应用被逆向破解的难度。
字符串加密:对应用程序中使用到的字符串进行加密,防止通过IDA等工具获取关键词定位核心业务代码;
类名、方法名混淆:将代码中类名、方法名、属性名替换为无意义符号,增加代码逆向难度;
程序结构混淆加密:对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。
常见的代码混淆方式包括Java代码混淆、C/C++代码混淆以及h5 脚本混淆等。
(1)Java代码混淆
Java代码是比较容易反编译,为了保护Java源代码,开发者通常会对编译好的class文件进行混淆处理。ProGuard就是一个混淆代码的开源项目,能够对字节码进行混淆、缩减体积、优化等处理。
Proguard处理流程包含压缩、优化、混淆、预检四个主要环节,如下图所示:
压缩:检测并移除代码中无用的类、字段、方法和特性(Attribute);
优化:对字节码进行优化,移除无用的指令。优化代码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码;
混淆:使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名;
预检:在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。
Java代码混淆,针对一些逆向的IDE环境是有一定效果的,可以考虑做一些中文混淆,这个很容易实现且有效果。混淆前后效果如下图:
(2)C/C++代码混淆
下图为C++代码的混淆,保护之后控制流大幅度伪造,逆向难度非常高。当然控制流伪造也会影响运营效率,所以一般也只是对核心的一些功能做保护。
混淆的过程中添加的一些字串的保护如下图:
介绍一个c/c++代码混淆工具,逆向对抗利器—LLVM。LLVM不仅仅提供混淆实现,通过多重Optimize(优化器),实现多种效果,例如代码控制流扁平化、虚假控制流、字符串加密、符号混淆、指令替换等。
(3)H5 脚本混淆
H5混淆是指从JS的语法和逻辑上进行混淆。H5脚本混淆很多的IDE环境均可配置,这里我不做详细介绍。H5脚本混淆主要提供字符串加密、混淆、去log、变量名处理、压缩、函数名处理、平台识别、防篡改等功能。保护前后区别如下:
代码混淆可以提升逆向分析的难度,但是并不能从跟不上解决逆向破解的问题。开发者可以对应用进行代码混淆,同时配合移动应用加固,以提升应用的安全等级。
码农必看!常见源代码混淆技术有哪些?
为了更好地了解编程中混淆的工作原理,以下是蛮犀安全整理的世界各地开发人员使用的一些最常见的混淆安全技术。
七种常见的源代码混淆技术
1.数据转换
源代码混淆的一个重要元素是将程序处理的数据转换为另一种形式,这对代码的性能影响最小,但使黑客更难以分解或逆向工程。
如何以这种方式混淆代码的示例包括使用数字的二进制形式使源代码更复杂,更改存储数据的形式或用表达式替换值。
2.代码流混淆
通过改变代码的控制流程,改变了代码的方向。这意味着尽管最终结果是相同的,但要弄清楚代码为什么朝着某个方向或前进的方向要花费更多的时间。
可以通过更改程序执行语句的顺序,通过插入任意跳转指令来更改控制图以及将树状条件构造转换为平面切换语句来执行编程中的控制流混淆。
3.地址混淆
某些源代码混淆安全工具使用的这项技术会更改程序数据和代码的地址,从而导致不可预测性并使其难以利用。构建应用程序时,混淆算法会将内存中某些代码和数据的绝对位置以及不同数据项之间的相对距离随机化。这不仅减少了成功攻击的可能性,还意味着即使黑客在一个应用程序或设备上成功,他们也将无法在其他应用程序或设备上复制它,从而降低了对程序进行反向工程的好处。
4.混淆代码的定期更新
该技术通过定期发布经过混淆的软件的更新来主动防止攻击,从而阻止了黑客破解系统的企图。通过偶尔用新混淆的实例替换现有软件,攻击者被迫放弃其现有分析。最后,突破混淆安全性的努力超过了所获得的价值。
5. Objective-C消息调用和元数据混淆
源代码混淆工具(例如蛮犀安全的应用程序屏蔽解决方案)以两种方式混淆Objective-C代码。首先,它们混淆了源代码中包含的纯文本消息调用,以确保它们不易于阅读和编辑。其次,它们对一些Objective-C元数据进行加密,以从静态分析工具中隐藏敏感信息,例如类别,类,方法,协议,类属性和实例变量的名称,以及方法参数及其类型。仅在加载混淆的应用程序时,才在运行时解密加密的数据。
6.混淆汇编代码说明
转换和更改汇编代码会使反向工程更加困难。一种这样的方法是使用重叠的汇编指令(也称为“中间跳跃”方法),这些指令将代码隐藏在其他代码中,从而导致反汇编程序产生不正确的输出。还可以通过包含不必要的控制语句和垃圾代码来增强汇编代码,以防止渗透。
7.混淆调试信息
调试信息可用于对程序进行逆向工程,以通过反编译和重新编译程序的代码来发现其源代码。因此,阻止未经授权的访问和调试很重要。源代码混淆工具通过更改调试数据中的行号和文件名或完全删除调试信息来实现此目的。
码农必看:常见源代码混淆技术详解
在项目组中,核心代码模块被部署于用户服务器上。然而,另一家公司获取了该服务器的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等工具包更小巧、更快速,适用于实时代码插装。
经过比对,我们最终选择了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应用程序的安全性和防护能力。
以springboot单体应用为例,我们需要在原有项目配置文件的基础上进行以下修改:代码混淆步骤选择要混淆保护的ipa文件
配置签名证书点击左侧的签名配置,设置ios签名证书,描述文件等信息。测试阶段用开发证书,这样可以方便安装到测试机子上检验是否测试后的app运行正常;最终配置测试ok,发布的时候再改成发布证书,混淆配置完后可以提交上架。
选择要混淆的类名称选择左侧的代码模块中的OC类名称或者Swift类名称,选择IPA种要混淆的二进制文件,然后勾选可执行文件代码里面的类名称。如果类太多可以使用搜索查看功能,ipaguard提供了级别选择,名称搜索,已选未选过滤来帮助配置混淆对象。
选择要混淆保护的函数,方法选择左侧代码模块下的oc方法或者swift方法,点击右侧的选择文件选取一个可执行二进制文件,勾选需要混淆保护的方法和函数。ipaguard提供了风险等级过滤,名称搜索过滤,根据类名称过滤条件来辅助配置混淆目标
混淆和测试运行点击开始处理按钮,ipaguard将对ipa中选中的内容进行混淆保护,并安装混淆好的ipa到手机上,运行如果ok,点击保存配置,下次直接加载配置即可,无需每次配置要混淆的内容。
ipaguard在做混淆这块还是做的很人性化的,混淆目标可控,强度可控,极大地简化了配置混淆内容的过程,可视化的操作也非常的方便。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。