iOS逆向开发小贴士

帮debugserver减肥

lipo -thin armv7s ~/debugserver -output ~/debugserver

添加task_for_pid权限

/opt/theos/bin/ldid -Sent.xml debugserver

//移回iOS设备

scp ~/debugserver root@iOSIP:/usr/bin/debugserver

//ASLR

随机偏移量

LLDB  image list -o -f打印出来

(已知 迁移后地址在尾部)            (在LLDB 前[x] 前的地址)

 迁移后基地址    =    偏移前基地址    +    ASLR偏移量

//需计算

(尾部)              -        (前部)

偏移前基地址    =    迁移后基地址  -    ASLR偏移量

————————————————————————

//符号基地址

例如

NSLog的基地址  =  “就是在IDA中查看SUB SP SP #0xC左边的那个”  0x2261AB94

“Foundation的基地址  = 0x2260A000  (偏移前模块地址)

“就是在IDA中查看SUB SP SP #0xC左边的那个数”0x2261AB94  代表NSLog在Foundation中位置  -    0x2260A000  (偏移前模块地址)  =  0x10B94就是“NSLog函数在Foundation中的相对位置  “

                    IDA中查看的) NSLog偏移前0x2261AB94                (在LLEB前的偏移量) FoundationASLR偏移  0x1645000

偏移后符号基地址=        偏移前符号基地址                                          +                            符号所在模块的ASLR偏移

 偏移后符号基地址=  0x23C5FB94

根据           

偏移后模块基地址 = 偏移前模块基地址 + ASLR

得出符号及地址

偏移后符号基地址 = 偏移前符号基地址 + 符号所在模块的ASLR偏移

举一反三,指令基地址的计算也可以套用上面的公式:

偏移后指令基地址 = 偏移前指令基地址 + 指令所在模块的ASLR偏移

自然,符号基地址=符号对应函数第一条指令的基地址

“偏移前基地址从IDA里看,ASLR偏移从LLDB里看,两者相加就是偏移后基地址。”

NSLog函数第一条指令“SUB SP,SP,#0xC”左边的那个数0x2261AB94  ——  IDA

在以刚才“image list-o-f”输出中的第4个模块(即Foundation)为例,它的ASLR偏移是0x1645000  ——LLDB

[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] 

你可能感兴趣的:(iOS逆向开发小贴士)