@[toc]
引言
欢迎大家来到#公众号:iOS逆向
的《iOS应用逆向与安全》专栏
本文列出学习大纲,同时也可作为大家学习《iOS应用逆向与安全》专栏的索引。 文中的蓝字都是超级链接,点击进入即可
- 本专栏的整体大纲模块
1、快速上手部分:基本概念、环境搭建、常用逆向分析工具的原理及使用(Cliclick、cycript) 2、正向知识储备:类的结构、app签名、Mach-o、hook 3、案例实战:ASO、转换淘口令 4、安全保护:网络加密传输、动态保护、代码混淆
I、概述
iOS应用逆向的大致留存1、获取应用的 ipa 包,解密(如果是越狱应用则不需要解密),导出头文件; 2、使用工具(cycript、Reveal、Cliclick) 3、使用tweakhook、执行相关函数的输入输出以及调用栈,分析验证关键函数; 4、静态分析加动态调试进一步分析关键函数的实现逻辑 5、进行修改原有流程:案例ASO
1.1 基本概念
1.2 环境搭建
1.3 常用逆向分析工具的原理及使用
1.4 正向知识储备
类的结构、app签名、Mach-o、hook
1.4.1 hook
- 【使用substrate及runtime进行hook】定时检测app是否开启 ```objectivec %new
- (void)checkHeart { //定时检测微信是否开启 [[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.tencent.xin" suspended:0]; }
%end
### 1.4.2 app签名
# II iOS逆向进阶
- [iOS应用逆向工程指南:【1、概念2、工具3、逆向理论】](https://blog.csdn.net/z929118967/article/details/77039930)
>iOS逆向工程,指通过分析系统的功能、结构、行为,将软件的技术实现或者设计细节推导出来的过程。
- [iOS逆向 :【Cycript Useful Command & Powerful private methods】](https://kunnan.blog.csdn.net/article/details/78309400)
>_ivarDescription
_shortMethodDescription
nextResponder
_autolayoutTrace
recursiveDescription
_methodDescription
- [iOS 逆向【how_to_host_cydia_repo】 批量部署Tweak插件到iOS设备的方案](https://kunnan.blog.csdn.net/article/details/78344104)
- [iOS使用代码触发button的点击事件:【 [btn sendActionsForControlEvents:UIControlEventTouchUpInside];】及教你找到按钮action](https://kunnan.blog.csdn.net/article/details/80782694)
- [使用ssh config配置文件来管理ssh连接](https://blog.csdn.net/z929118967/article/details/78219687)
- [iOS逆向工具usbMuxd的应用:【1、通过USB方式SSH到iOS越狱设备2、端口转发】](https://blog.csdn.net/z929118967/article/details/78201784)
### 2.1.2 模拟鼠标点击
- [iOS逆向工具Cliclick:【Mac 模拟鼠标点击工具】](https://kunnan.blog.csdn.net/article/details/108949981)
>例子(定时点击特定位置,来点击保证Mac永远处于活跃状态,达到mac永不不关闭屏幕的目的)
### 2.1.3 LUA
- [获取屏幕坐标的方式](https://kunnan.blog.csdn.net/article/details/78235417)
- [1、lua脚本工具方法 httpPostJson:【发起Content-Type 为application/json; charset=UTF-8的请求 】2、使用Lua的协同程序实现生产者-消费者](https://blog.csdn.net/z929118967/article/details/78252065)
#### 2.1.3.1 设备解锁
- [iOS逆向:【lua 函数】解锁无密码的设备、判断设备是否锁定、锁定设备、打开某个程序](https://blog.csdn.net/z929118967/article/details/78234965)
- [iOS逆向:lua代码实现解锁和打开特定app的代码、tweak 实现自动解锁以及打开特定app(launchApplicationWithIdentifier、unlockUIFromSource)](https://blog.csdn.net/z929118967/article/details/78227984)
### 2.1.4 分析网络数据包
- [iOS逆向抓包工具Charles【应用场景:App联调测试】](https://kunnan.blog.csdn.net/article/details/78192383)
- [iOS逆向:tcpdump(截获分析网络数据包)、Wireshark的原理和基本使用](https://blog.csdn.net/z929118967/article/details/76914929)
### 2.1.5 日志分析
[ 【 iOS设备日志查看工具syslog和socat】(syslogd to /var/log/syslog)](https://blog.csdn.net/z929118967/article/details/78202096)
# III、案例实战
## 3.1 ASO
- [iOS逆向:【ASO项目使用的技术】(例如:1、hook CFUserNotificationCreat 截取Header 部分信息、Message内容 进行任务处理2、设备信息的修改、清理数据)](https://blog.csdn.net/z929118967/article/details/90647562)
### 3.1.1电池状态监控
- [iOS 监控体系之电池状态监控【电池的状态处理:电池状态获取及监测、电池电量获取及监测、低电量模式切换监测】应用场景:ASO机刷的场景就需要保证设备的高可用性](https://kunnan.blog.csdn.net/article/details/105866534)
### 3.1.2 切换和控制Wi-Fi
- [切换和控制Wi-Fi来解决ASO机刷网络不稳定问题](https://kunnan.blog.csdn.net/article/details/112829168)
### 3.1.3 数据清理
- [iOS逆向实践ASO之【数据清理】:1、Accounts帐号信息的分析以及清除(应用场景:ASO) 2、Keychain Dumper (keychain数据的读取)](https://blog.csdn.net/z929118967/article/details/78195794)
## 3.2 转换淘口令
- [【从app观察阿里电商的闭环生态】1、渠道漏斗公式(渠道 = 流量 x 转化率 x 客单价 x 复购率)2、引申话题:转换淘口令机器人的实现流程(涉及逆向)](转换淘口令)
# IV、 安全保护
- [iOS逆向:【代码混淆】1、基于编译器混淆静态库(StaticLib)2、字符串加密:使用clang-c接口将源代码转换成抽象语法树,并对抽象语法树进行遍历和分析,分析代码中的字符串,并进行加密处理。](https://blog.csdn.net/z929118967/article/details/85599400)
- [iOS敏感逻辑的保护方案:【把函数名隐藏在结构体里,以函数指针成员的形式存储】(敏感信息的安全设计)](https://kunnan.blog.csdn.net/article/details/83746545)
## 4.1 脱敏规范
- [iOS安全:【敏感信息的脱敏规范】(数据类型包括日志相关、账户订单、个人信息、账户认证、持卡数据)](https://kunnan.blog.csdn.net/article/details/112363835)
## 4.2 接口安全
- [iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)](https://kunnan.blog.csdn.net/article/details/108195721)
- [1、iOS网络请求安全优化:SSL证书验证, 让Charles再也无法抓你的请求数据;对请求参数进行签名;2、不走全局proxy的方案;3、允许不验证SSL证书;4、拦截请求;5、DoH &DoT](https://kunnan.blog.csdn.net/article/details/106811271)
>在使用NSURLSession时敏感的数据采用ephemeralSessionConfiguration配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存储在内存里,所以当程序退出时,所有的数据都会消失。
- [iOS安全【 SSL证书验证, 让Charles再也无法抓你的请求数据】](https://kunnan.blog.csdn.net/article/details/77115940)
- [允许不进行SSL证书验证, 来规避SSL证书过期导致的请求报错](https://kunnan.blog.csdn.net/article/details/106811957)
```objectivec
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.validatesDomainName = NO;
securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy = securityPolicy;
4.2.1 接口安全设计的Checklist
调用方来源IP控制
比如可通过防火墙、主机host deny、Nginx deny等技术措施进行实施
调用方身份认证
比如key、secret、证书等技术措施进行实施
调用参数认证
需设计参数容错机制,避免出现参数可遍历敏感数据安全问题
采用数字签名保障接口身份来源可信,数据防篡改
- 1、iOS网络请求安全优化:SSL证书验证, 让Charles再也无法抓你的请求数据;对请求参数进行签名;2、不走全局proxy的方案;3、允许不验证SSL证书;4、拦截请求;5、DoH &DoT 在使用NSURLSession时敏感的数据采用ephemeralSessionConfiguration配置,与默认配置相比,这个配置不会将缓存、cookie等存在本地,只会存储在内存里,所以当程序退出时,所有的数据都会消失。
调用方权限控制设置
调用频率、有效期进行控制
调用行为实时检测,对异常阻拦
幂等性校验,保持数据一致性
采用应用接入安全网关,实现APPID/KEY身份认证,加密传输,摘要签名安全保障
see also
#公众号:iOS逆向 CSDN认证博客专家 Swift SwiftUI Objective-C
微信公众号:【iOS逆向】
iOS逆向与安全,熟悉iphone/tweak、iphone/tool、cydia的repo 制作 、cocoapods的Specs repo制作(using-pod-lib-create、private-cocoapods)。
I am a software engineer currently living in Changsha. My interests range from technology to writing.
游戏安全
更多iOS技术文章,请关注 “iOS逆向” 公众号,一起学习,一起进步。