Mac 下实现hook sub_xxxx的方法「目前是遇到问题了,所以并没有具体的方法可以提供」

终极目标:Mac 下实现hook sub_xxxx
首先下Mac 能hook c函数的库有fishhook和rd_route
这里选用了rd_route

具体操作目标:想hook 5E9518C02360EE80DD8FD7FAABFD58D4这个函数。

参考了:

两篇文章后修改下地址然后写成了这样「做了个尝试」。

运行的时候输出了Found sub_1000bae97!和iOSRE: anti-anti-debugging
但是最后 segmentation fault报错了。导致程序直接退出
但是如果用直接用hopper mov eax ,0x1 ret 是没有问题的程序可以正常运行。

目前的疑问是:
1.为什么程序代码该被hook住的函数被hook住了,程序退出了。
2.Mac是否还有其他可行的方法可以hook sub__xxx函数

1 个赞

你是在Mac上操作的,那我理解底层很多东西跟iOS不一样了,建议直接上代码,对着代码描述问题,比较直观

上面的就是代码了。:joy:
time.m (19.3 KB)
附件是完整的代码「删除了一些无关代码。保留了rd_route源码和当前代码实现」

1 个赞

挂调试器上去看看汇编不就知道了

#if defined(__x86_64__)
    opcodes[0] = 0xFF;
    opcodes[1] = 0x25;
    *((int*)&opcodes[2]) = 0;
    *((uintptr_t*)&opcodes[6]) = (uintptr_t)to;
    err = _patch_memory((void *)where, size_of_jump, opcodes);

你看一下x64的实现, 想一下需要多少字节, 再看你那个函数有几个字节, 下一个函数又是在哪个地方

这些问题调试器挂上去都是一目了然, 包括崩在哪里

请问楼主解决了这个问题么?
我在使用rd_route来hook sub_ACF0 遇到了一个问题 代码如下

image

1.无法勾住 _sub_ACF0函数地址 并未打印hook sub_ACF0
2.然后也报了Segmentation fault: 11

然后在调试器如何调试我们的注入的dylib ??

我刚刚翻出来这个两年前的话题,研究了半天,找到了解决方案:
实际上你把图片中倒数第三行| 0x1去掉就可以了。
http://iosre.com/t/hook-ida-sub-xxx/720
上面这个文章中说的加上| 0x1的方法是不对的。

Mac OSX 现在应该都是 ARM或者ARM64的指令不需要 | 0x1, Thumb指令才需要通过判断地址末尾奇偶来选择hook指令的类型类型是ARM或者Thumb

2 个赞