iOS应用破解初探
iOS应用破解初探
1.常用破解工具
Dumpdecrypted - APP解密
通常为第一步
IDA - 静态反编译
LLDB - 动态调试
- Apple官方的调试工具
Cycript - 动态调试/UI分析
- 基于JS
- 动态打印、分析程序结构
- 通常用于UI分析
IHex - 二进制修改
对二进制进行patch
patch是什么意思?
To patch a file means to modify it, with the connotation that the modification is generally small.
Classdump - 头文件提取
- 便于对类名和方法名进行搜索
Burpsuite/WireShark - 抓包
- 大部分验证通过HTTP/HTTPS
- socket等可以通过WireShark
2.破解步骤与方法
常规步骤
以下为一个常规步骤
- 判断授权方式(Burpsuite/Shark)
- 用抓包工具判断APP的授权方式
- APP解密(Dumpdecrypted)
- 对二进制文件进行解密
- dump出头文件,利于查找
- 二进制分析(IDA/LLDB/Cycript)
- 通过动静态结合的调试方式
- 找到关键破解点
- 二进制修改/HOOK(IHex)
- 进行破解
- Patch二进制
- HOOK注入
- 签名重打包
常用方法
- UI回溯法
- 根据UI显示的授权关键字如“正式版”、“试用版”、“未授权”等,通过Cycript进行UI分析,一步步回溯到上层授权判断的关键点进行修改和破解
- 特征函数法
- 根据授权验证所需的特定函数进行定位。
- e.g. socket验证所需的固定函数connect, recv等函数,定位到程序发送、接收数据等位置。
- e.g. 部分APP将授权码写入keychain,定位keychain读写函数
- 类名检索法
- 代码的类名函数通常具有可读性,通过classdump导出头文件检索如authorize等关键文件
- 定位关键字
- 顺序跟踪法
- 大多数授权校验和机器码发送位于程序初始化,在IDA中从函数初始化开始跟踪寻址
- 栈跟踪法
- 断点关键函数,根据调用栈查找验证流程
3.实战案例
实验一:网络验证破解
http/https/socket
总的思路:通过抓包工具,找到协议,跟踪请求的函数(跟着IDA反编译后的代码),分析函数对数据的处理流程。
步骤1:通过BurtpSuite截包,分析协议,发送请求
步骤2:打开IDA查询host及HTTP发包相关函数,使用了第三方网络框架AFNetworking发送请求
步骤3:分析请求get后对response返回值的处理函数
如何破解?
- 爆破
- patch二进制,修改对get请求返回值的判断
- 注册机
实验二:本地验证的破解
以破解一个棋牌APP为例,正版/试用版。
- 步骤1:分析UI结构,关键字分析
- 步骤2:classdump出头文件,找出UI调用,跟进函数调用流程
- 步骤3:梳理验证流程,明确验证为正版的代码流程
如何破解?
- Hook,修改注册状态
- 修改数据库取值后对注册码的判断,直接修改逻辑判断、
实验三:机器码验证伪造
- utsname
- UIDevice
- MGCopyAnswer
- IORegistryEntryCreateCFProperty
Reference
[1] iOS应用破解,刘羊梓, https://www.ichunqiu.com/course/53977