Closed cxxsheng closed 5 years ago
你需要hook的是自己so库中对execve的调用吧? 这样?
xhook_register(".*/libmy.so$", "execve", (void *)new_execve, (void**)&old_execve);
你需要hook的是自己so库中对execve的调用吧? 这样?
xhook_register(".*/libmy.so$", "execve", (void *)new_execve, (void**)&old_execve);
不是 我是需要hook libc中的execve的调用,发现貌似无法hook成果,没法拦截,我使用了 inline hook就成功了
你的情况xhook确实hook不到的。因为execve的实现就在libc.so中,所以它内部调用execve肯定被编译优化了,不走PLT/GOT了。
你的情况xhook确实hook不到的。因为execve的实现就在libc.so中,所以它内部调用execve肯定被编译优化了,不走PLT/GOT了。
但是我能够成功hook mmap或者open等等一些libc的函数,单单exec族的hook不到,这些函数是不是有什么特殊之处导致的呢?比如exec族函数会重新fork出进程来执行。
我觉得你可以先readelf确认下exec是否被加入到了so的PLT中,再反汇编看下对exec的调用是否走了PLT。
另外,你是怎么判断没有hook到exec的?可以在比如my_exec中先创建一个固定名称的空文件,再调用原exec文件,如果文件被创建了,那就说明hook到了。printf不一定靠谱。
01-13 01:01:32.946 25904-25904/com.winer.proxyapp I/xhook: libxhook 1.1.10 (arm) 01-13 01:01:32.952 25904-25904/com.winer.proxyapp I/xhook: init OK: /system/lib/libc.so (REL ELF_HASH PLT:5096 DYN:10872 ANDROID:0) hooking execve in /system/lib/libc.so found execve at symidx: 932 (ELF_HASH) found execve at .rel.plt offset: 0x69db8 01-13 01:01:32.956 25904-25904/com.winer.proxyapp I/xhook: XH_HK_OK 0xb6e86db8: 0xb6e5708c -> 0xb3598a75 execve /system/lib/libc.so
日志上是成功的 不知道是不是fork影响的?