Key chain 查看
越狱机安装OpenSSH
安装keychain_dumper
执行keychain_dunper
Hook方式
Method Swizzle (Runtime)
fishhook (C, mach-o符号)
- 查找符号表, 替换方法对应的符号地址
- Cydia Substrate (三方)
ARM汇编
ARM指令集
ARM架构处理器, arm/thumb指令集
ARM版本:armv6, armv7, arm7s, arm64
Intel芯片, x86架构, x86指令集
iOS设备:使用arm指令集
模拟器:使用x86指令集
iOS app对外发布,包含两个版本:armv7, arm64, 为了让app能够在32位和64位手机上正常运行
ARM指令集:一条指令32位
Thumb指令集: 是ARM指令集的一个子集,一条指令16位, 更节省空间, 能够提高执行效率
ARM寄存器
armv7为例
通用寄存器
未备份寄存器(R0~R7)
备份寄存器(R8~R14)
程序计数器PC(R15)
R0~R3 用于函数参数及返回值的传递
R13 SP(Stack pointer)是栈顶指针
R14 LR(link)存放函数的返回地址
R15 PC(progregisterram count),指向当前指令地址
arm指令执行过程
取址
译码
执行
状态寄存器
CPSR当前程序状态寄存器(Current Program State Register),32位

N: 正负标志, N=1表示运算结果为负数, N=0表示运算结果为正数或0
Z: 零标志, Z=1表示运算结果为零0, Z=0表示运算结果为非0
C: 进位标志, 加法运算产生了进位时, C=1, 否则C=0, 借位标志, 减法运算产生的借位时, C=0, 否则C=1
V: 溢出标志, V=1, 表示有溢出, V=0, 表示无溢出
T: 说明执行的指令是, ARM指令(0)还是Thmub指令(1)
ARM指令的基本格式
LDR R0 [R1]
CMP R0,R1
ADDEQS R0,R1,#8
格式:
<opcode> {<cond>}{s} <Rd>, <Rn>{,<operand2>}
格式中 <>表示必不可少的内容, {}表示可省略内容
<opcode> 表示操作码, 如ADD表示算数加法
{<cond>} 表示指令执行的条件域, 如EQ, NE等
{s} 表示执行的结果s是否影响CPSR的值, 使用该后缀则指令执行的结果会影响CPRS,否则不会影响
<Rd> 表示目的寄存器
<Rn> 表示第一个操作数, 为寄存器
<operand2> 表示第二个操作数, 可以是立即数、寄存器或寄存器移位操作数
寄存器访问指令
LDR/STR{<cond>} Rd,addr
LDR指令用于从内存中读取数据放入到目的寄存器Rd中 STR指令用于将寄存器中的数据保存到内存中
ARM数据处理指令
MOV R0, #0x10; R0 = 0x10
MVN R0, #1; MVN取反操作, 将0取反传入给R0
ADDS R0,R1,R2, LSL #2; R0 = R1 + R2 << 2
SUB R0,R1,R2; R0 = R1 - R2
AND R0,R1,R2; R0 = R1 & R2
MUL R0,R1,R2; R0 = R1 * R2
CMP R0, #10 R0和10比较, 设置相关标志位