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比较, 设置相关标志位

results matching ""

    No results matching ""