帮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前的偏移量) Foundation的ASLR偏移 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]
网友评论