iOS代码混淆的探索

目的
  • 为了进一步增加应用的安全性,防止我们的应用程序很容易的被攻击者分析、破解、重打包,提高攻击者逆向分析应用的难度
应用的加固方案
  • 数据加密:静态字符串、本地存储和网络传输的加密
  • 静态混淆:类名、方法名、属性的混淆
  • 动态保护:反调试、注入检测、hook检测、越狱检测、签名检测等
  • 代码混淆:将代码分快、扁平化、增加干扰代码,以提高分析者的分析难度
下面结合具体应用场景说明下各个加固方案
  • 数据加密:在我们的应用中已经有了,对数据进行加密之后,实质上我们已经给攻击者提高了逆向分析的难度了,但是攻击者依然可能通过动态调试或者编写IDA脚本的方式来还原算法。

  • 静态混淆:程序中的类名和方法名,在逆向分析中只要通过class-dump获取程序中的所有类、定义的方法和属性,就能很快从名字中猜到某个方法的作用是什么,所以,我们就需要做混淆了。

    tips:
    1. 类名和方法名混淆有很多坑,一个类是通过文件、网络或者字符串动态获取的,如果被混淆了就会出错,相同名称但不同功能的参数进行混淆,也会造成错误,还有其他很多坑需要踩踩才知道了


    2. 目前AppStore对应用代码混淆的审核比较严格,一旦做了混淆,有可能会导致延迟审核或者直接驳回,具体可参考混淆上架风险参考1混淆上架风险参考2

    有可能就很不幸就收到这样的审核反馈
    在这里插入图片描述
    3. 那怎么办呢?别慌,我们可以对少量涉及核心业务的重要参数的生成做点混淆,然后试探试探

那么具体的静态混淆我们如何去做呢?
接下来就要get新技能啦~

我这里演示的是对方法名和属性的混淆,实质上就是就是字符串替换,最后抛出来的都是宏,可以跑脚本自动生成混淆后的乱七八糟的字符,我这里的脚本是网上搜的,当然有能力的可以自己写哟。

类名的混淆做法是相同的,参考链接,但是否需要对类名混淆可以依据实际的项目需求,当然这坑也是比较多的,踩踩才知道了,关于其他可能存在的问题还需要更多的摸索

  1. 首先创建一个demo工程,我的工程名是LFHelpers
    假设我现在需要对UIbutton+LFCategories文件中的imageDirectionWithButtonImageType方法做混淆,还有viewcontroller中的titles属性做混淆
    在这里插入图片描述
    在这里插入图片描述

调用的时候现在是这个样子的~
在这里插入图片描述

在开始混淆之前我们先来看看我class-dump出来的demo头文件(嘛?不懂怎么dump?别急,翻到文档最后就能知道啦~)
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值