iOS 逆向开发iOS开发笔记iOS 逆

iOS逆向之fishHook原理探究

2018-05-27  本文已影响3人  WinJayQ

HOOK原理

1、MachO是被谁加载的?

DYLD动态加载

2、ASLR技术(地址空间布局随机化):MachO文件加载的时候是随机地址

3、PIC(位置代码独立)

1、在rebind_symbols处打上断点,提前加上一行代码

NSLog(@"123");
image.png

运行后,如果在rebind_symbols断点没有显示汇编代码,可以通过Debug->Debug Workflow->Always Show Disassembly设置


image.png image.png

2、在rebind_symbol函数执行之前,NSLog的懒加载符号表的地址是多少

找到可执行文件


image.png

用MachOView打开


image.png

前面为什么加上NSLog(@"123");,是为了调用一次NSLog,这样才能在懒加载表中看到NSLog。

image.png

3、怎么查看符号表

Offset偏移量 00003018(在MachO中偏移了3018)
表的位置=MachO相对于内存的偏移地址+表相对于MachO的偏移地址Offset(3018)

MachO相对于内存的偏移地址,通过image list查看

image.png

0x0000000108339000 就是MachO在内存中的真实地址

表的位置=MachO相对于内存的偏移地址(0x0000000108339000)+表相对于MachO的偏移地址Offset(0x3018)
查看内存所指向的地址
x 0x0000000108339000+0x3018
(x 相当于memory read)


image.png

反汇编:
dis -s 0x0108690a52


image.png

这就通过符号表找到了方法

2、过掉rebind_symbol后,会改变0x0000000108339000+0x3018地址的值,查看地址

image.png

查看内存所指向的地址
x 0x0000000108339000+0x3018


image.png

反汇编:
dis -s 0x0108339e00


image.png

可以看到rebind_symbol后,对应的地址的方法已经发生了改变

那么,在上一篇iOS逆向之fishhookDemo的Demo2中,因为符号表里根本没有func方法,所以Hook不成功。

上一篇 下一篇

猜你喜欢

热点阅读