iOS代码加密方案
标签:iOSApp防护、iOSApp加固保护、iOS代码加密
时间:2020-07-11

一、前言


        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加固方案混淆后的效果图:


159445974462723397.png

159445977520392910.png159445985292395091.png


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


四、代码行为防护


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


        在执行NSUserDefaults、sqlite存储操作的时候对文件进行加密处理在存储即可如:

        // 获取需要加密文件的二进制数据

        NSData *data = [NSData dataWithContentsOfFile:@“~/Desktop/fairGuard.jpg"]; 

        // 对Data进行加密

        NSData *deData = [data decryptDate]; 

        // 最后将加密后的文件存储到到 NSUserDefaults 或者 sqlite


    2.2    网络传输数据保护


            对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取数据,。

         Md5(完整性): 传输前对整个数据做一个Md5保证数据的完整性。

159445987789037968.png

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

159445989580744144.png

五、代码对抗防护

        当你的代码本身和行为都做了很好的防护后,可能逆向者会进行动态调试,这时候我们就是代码运行时的对抗防护了。

3.1反调试保护

        可以使用网上公开的ptrace、syscall、sysctl、异常等方式,之后再对这段防护代码加上之前的保护后效果会更佳。

3.2反越狱保护

        可以从多个维度检测、例如检查某些App的安装、文件的存在、目录的访问权限来综合判断

        Cydia Check、Inaccessible Files Check、Plist Check、            Symbolic Link Check

3.3反重签名保护

        原理可以用加固时存储当时的BundleId和当时二进制的签名,运行时也获取一遍并且与加固时的进行对比来防护。

3.4反修改器保护


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

159445994434788675.png


六、FairGuard一键加固演示


159445994434788675.png

   目前产品已经被FunPlus、三七互娱、游族等多家头部公司采用。TapTap排行榜以及买量排行榜上亦有多个游戏使用。

有兴趣的加QQ号:2079128588 或者 微信 fairguard001 咨询