iOS-安全逆向

397 阅读3分钟

逆向概述

逆向分析

静态分析

数据的提取:

数据库文件信息的提取

plist文件信息的提取

Keychain文件信息提取

若涉及网路通信,抓包即可抓取所需数据信息(抓包、拦截请求、篡改请求数据、模拟弱网络环境等)

动态分析

LLDB: 结合debugserver动态调试程序。

Cycript: 进行运行时特定类分析及调试以及方法替换(Method Swizzling)。 Introspy: 黑盒测试,用其追踪器对应用执行问价进行运行时分析,用分析器对生成的数据库文件进行分析,生成一个详尽的HTML报告。

Hook和注入

安全建议

混淆和签名

*编译:

就是把预处理完的文件进行一系列词法分析、语法分析、语义分析、优化后生成相应的汇编代码文件。

词法分析:字符序列分割成一系列记号(token),eg:array、index、=、+、4、(、*、[、]

语法分析:生成语法树-表达式为节点的树

语义分析:静态语义-每个表达式被标识类型

中间语言生成:源码级优化器-优化编译器可以确定的表达式,语法树的顺序表示。 中间代码使得编译器可以被分为前端和后端。

目标代码生成与优化:合适的寻址方式、使用位移来代替乘法运算...

混淆策略

*常用:宏替换(#define)或脚本替换方法名

*Hikari:

混淆参数: -mllvm -enable-bcfobf 启用伪控制流
-mllvm -enable-cffobf 启用控制流平坦化 -mllvm -enable-splitobf 启用基本块分割
-mllvm -enable-subobf 启用指令替换
-mllvm -enable-acdobf 启用反class-dump
-mllvm -enable-indibran 启用基于寄存器的相对跳转,配合其他加固可以彻底破坏IDA/Hopper的伪代码(俗称F5)
-mllvm -enable-strcry 启用字符串加密
-mllvm -enable-funcwra 启用函数封装

*OLLVM

默认支持 -fla 、-sub 、-bcf 三个混淆参数,这三个参数可以单独使用也可以配合着使用。

-fla 参数默认表示使用控制流平展(Control Flow Flattening)模式,

-sub 参数表示使用指令替换 (Instructions Substitution)模式,

-bcf 参数表示使用控制流伪造(Bogus Control Flow)模式。

签名策略

证书的一系列生成流程。

加固加壳

有效阻止第三方程序反汇编分析和逆向破解的方案,其原理是向二进制的程序中植入一段代码,执行前优先获得程序控制权,做一些额外工作,是一种应用加固手段。

第三方加固平台: 爱加密、360加固、阿里、百度、腾讯乐固、

安全编码和隐私

本地数据存储

keychain:非越狱下安全的存储容器,可存储机密敏感信息(如用户密码、网络密码、认证令牌)。

CoreData:内部使用sqlite保存信息,默认数据没有加密。

NSUserDefaults:单例类,key-value形式存储一系列偏好设置,把对象存储到相应的plist文件中或者读取相应数据。

网络通信

禁止明文密码传输,不可采取发送密码的MD5值方式。