jmpews / Dobby

a lightweight, multi-platform, multi-architecture hook framework.
Apache License 2.0
3.93k stars 809 forks source link

关于HookZz/Plugins/MachOStaticPatcher的使用 #62

Closed calssion closed 4 years ago

calssion commented 4 years ago

还没搞懂怎么使用MachOStaticPatcher?里面的README.md是这样的:

So, Now you can hook target function as. ZzReplaceStatic("binary_image_name", function_vmaddr, your_fake_function);

但实际上在文件里找到的函数是这样的:

void ZzReplaceStatic(char image_name, void function_virtual_address, void *replace_call, void **origin_call)

README.md是不是应该更新一下使用方式了,求助大佬,在arm64直接crash了,怀疑是我的使用方式有问题。

jmpews commented 4 years ago
  1. 可以论坛问下 http://iosre.com/t/app-hook-c/15539/6
  2. 提供 demo
calssion commented 4 years ago

好的感谢,用的是里面的example,我先摸索一下源码,如果能有这部分的实现原理就更好了

calssion commented 4 years ago

好的感谢,用的是里面的example,我先摸索一下源码,如果能有这部分的实现原理就更好了

错误出现在rebase_stub,*entry->trampoline_target_stub = entry->relocated_origin_function;出现Exec Bad Access

估计是访问到了空指针,这部分rebase出错

调用方式:ZzReplaceStatic("MachOStaitcPatcherExample", 0x100006ad8, runReplace, runMainFunction);

不知这样做是否是正确调用呢?0x100006ad8为nm获取到的函数地址,与hopper虚地址一致

calssion commented 4 years ago

好的感谢,用的是里面的example,我先摸索一下源码,如果能有这部分的实现原理就更好了

错误出现在rebase_stub,*entry->trampoline_target_stub = entry->relocated_origin_function;出现Exec Bad Access

估计是访问到了空指针,这部分rebase出错

调用方式:ZzReplaceStatic("MachOStaitcPatcherExample", 0x100006ad8, runReplace, runMainFunction);

不知这样做是否是正确调用呢?0x100006ad8为nm获取到的函数地址,与hopper虚地址一致

大家遇到相同的情况,可以暂时这样处理:注视掉下面这句代码,不懂这句的作用,估计是想用来回调原函数,但hook是成功的

origin_call = (void )entry->relocated_origin_function;

主要原因是指针越界了,待读懂大佬的代码后,再看看要如何使用吧

calssion commented 4 years ago

以下提供正确的使用方式:

ZzReplaceStatic(char image_name, void function_virtual_address, void *replace_call, void **origin_call)

ZzReplaceStatic("image名称,可用dyld函数查看", 需要hook的函数的虚存地址, 替换的函数的函数指针, 这个参数是获取回调原函数的指针[所以可以自己创建个指针传参])

经过了几天的时间,本小白才勉强看懂了作者的代码,代码真的是非常地强,赞叹!