iOS代码加密方案

Posted FairGuard游戏加固

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS代码加密方案相关的知识,希望对你有一定的参考价值。

一、前言


   ios系统从iOS 1 (2007) 到目前iOS 13 (2020),已经经历了13代,和安卓的开源生态相比iOS一直是都是闭源生态,这确实相对安全些,但是这也容易被人们忽略了其自身App的安全性,导致大部分公司开发App时不会投入成本在自身App的安全方面,一旦系统越狱后被逆向研究App,结果往往是比安卓更恐怖的,所以说在系统闭源前提下,我们也需要对App自身的安全进行加固防护,不能太依赖系统的环境。特此FairGuard提供一套完整的iOS代码加密方案,一键傻瓜式操作。


二、 iOS App保护


iOS App客户端的加密防护工作可以分为如下几个角度:

        1、代码本身防护

            1.1    代码逻辑的混淆

            1.2    字符串的加密

            1.3    Objective-C类名和方法名的混淆

        2、代码行为防护

             2.1    本地存储时的保护(NSUserDefaults,sqlite存储文件数据加密)

             2.2    网络传输数据保护

        3、代码对抗防护

             3.1    反调试保护

     3.2    反越狱保护

             3.3    重签名保护

             3.4    反修改器保护



三、 代码本身防护

   

           目前能用的方案大部分是基于IR(LLVM编译框架的一个中间代码)层做混淆Pass,这也是针对代码逻辑混淆的比较好的方案。目前网上有一个项目是Obfuscator-LLVM,由瑞士伊夫尔东莱班的应用科学与艺术大学信息安全小组研发的,完全开源,接入的话是编译成XcodeToolchain加入混淆编译C C++ Flag,支持 控制流平坦化、伪代码插入、等但是不支持字符串混淆这个有另外一个项目。


下面我们可看看使用FairGuard iOS加固方案混淆后的效果图:


iOS代码加密方案

iOS代码加密方案

我们FairGuard目前支持代码逻辑混淆、字符串混淆,也是基于LLVM的IR层的混淆Pass,但是不是使用开源的OLLVM项目,而是通过HOOK了Xcode里面Apple的clang,在其执行优化的过程拦截执行我们优化Pass,最小程度的减少用户接入成本和体验效果。对用户来说完全无感知。


四、代码行为防护


4.1    本地存储时的保护(NSUserDefaults,sqlite存储文件数据加密)

在执行NSUserDefaults、sqlite存储操作的时候对文件进行加密处理在存储即可如:
 //获取需要加密文件的二进制数据
     NSData *data = [NSData dataWithContentsOfFile:@“~/Desktop/fairGuard.jpg"]; 
 //对Data进行加密
     NSData *deData = [data decryptDate]; 
//最后将加密后的文件存储到到 NSUserDefaults 或者 sqlite

4.2    网络传输数据保护


 对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取数据,。
               Md5(完整性): 传输前对整个数据做一个Md5保证数据的完整性。

iOS代码加密方案

        AES(机密性): 传输前对Body数据做一个加密保证数据的机密性。


iOS代码加密方案



五、代码对抗防护


        当你的代码本身和行为都做了很好的防护后,可能逆向者会进行动态调试,这时候我们就是代码运行时的对抗防护了。
        5.1反调试保护
        可以使用网上公开的ptrace、syscall、sysctl、异常等方式,之后再对这段防护代码加上之前的保护后效果会更佳。
        5.2反越狱保护
        可以从多个维度检测、例如检查某些App的安装、文件的存在、目录的访问权限来综合判断Cydia Check、Inaccessible Files Check、Plist Check、Symbolic Link Check
        5.3反重签名保护
        原理可以用加固时存储当时的BundleId和当时二进制的签名,运行时也获取一遍并且与加固时的进行对比来防护。
        5.4反修改器保护



在代码对抗防护,FairGuard不但提供本地检测代码,并且保护了检测代码,还提供了在线特征更新检测,定期更新,在最短的时间保护了App的安全性。如下:

iOS代码加密方案


六、FairGuard一键加固演示



七、写在最后

以上是关于iOS代码加密方案的主要内容,如果未能解决你的问题,请参考以下文章

iOS,一行代码进行RSADES AESMD5加密解密

iOS,一行代码进行RSADES AESMD5加密解密

iOS代码加密的几种方式

代码笔记iOS-给密码进行加密

Xcode / IOS 代码可见性

iOS常用加密算法介绍和代码实践