-
Notifications
You must be signed in to change notification settings - Fork 764
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
hook libart.so的mmap函数,跳转不到新的new_mmap函数 #3
Comments
你是怎么判断new_mmap和new_munmap没有被执行到的? |
我试了另外一个plt hook https://github.com/MelonWXD/ELFHooker,这个可以执行到新的mmap函数 ELFHooker的例子 //got hook
ElfReader elfReader(LIB_ART_PATH, art_base);
if (0 != elfReader.parse()) {
LOGE("failed to parse %s in %d maps at %p", LIB_ART_PATH, getpid(), art_base);
return;
}
elfReader.hook("open", (void *)new_open, (void **)&old_open);
elfReader.hook("read", (void *)new_read, (void **)&old_read);
elfReader.hook("mmap", (void *)new_mmap, (void **)&old_mmap);
elfReader.hook("munmap", (void *)new_munmap, (void **)&old_munmap);
elfReader.hook("__read_chk", (void *)new_read_chk, (void **)&old_read_chk);
elfReader.hook("fstat", (void *)new_fstat, (void **)&old_fstat);
elfReader.hook("fork", (void *)new_fork, (void **)&old_fork);
用ELFHooker可以执行到新的fake函数 用xhook只执行了new_open函数,后面几个函数都没跳过去 |
@woxihuannisja Hi, 我看了下https://github.com/MelonWXD/ELFHooker 中ELFHooker部分的代码,PLT/GOT定位的核心逻辑和xhook是一样的。而且你说open是hook成功的,对于 PLT/GOT hook来说,具体hook哪个函数不应该存在差异。 我这里目前没找到可用的Nexus5,找了一台Mi3(也是arm 32bit)试了下,是可以hook到libart.so的mmap的。 怀疑的点有两个,不知道你是否有时间,能否帮忙验证一下: 1。是否触发了 xhook 自身的段错误保护(SFP),这个可以升级到最新版本的xhook,然后在refresh之前调用一次xhook_enable_sigsegv_protection(0)来关闭SFP,再执行refresh,如果APP崩溃了,说明遇到了问题。 2。xhook 和 ELFHooker 的指令缓存刷新操作不同。xhook使用的是__builtin___clear_cache,这个是兼容 32-bit和64-bit arch的调用。ELFHooker使用的是syscall(0xf0002, start, end),这个只能适用于 32-bit arch。能够帮忙试一下,在xh_util.c的xh_util_flush_instruction_cache函数中,将: 十分感谢!! |
@caikelun 使用xhook之后, 我在nexus5 红米note4x上测试都不行 |
@woxihuannisja 比较诡异。。而且根据你最初的描述,你用ida动态调试能看到got里mmap的函数地址其实是替换成功了? 如果只对libart.so hook mmap这一个函数,能被hook到正常跑吗? |
@caikelun xhook只是改了got表吗? 如果没有hook成功我的程序是跑不起来的 |
@woxihuannisja “libart.so也没有执行原始的mmap函数了”?有点糊涂了 @_@ |
@woxihuannisja 方便的话能weixin或者qq吗?能把联系方式发我邮箱([email protected])吗?我加你~ |
qq:1483943306 |
目前的情况是hook是成功的,但是hook后app逻辑中有一个native崩溃,导致程序逻辑还没有走到hook的新函数中就崩溃退出了。app逻辑有点复杂,目前没有时间配合调试了。。暂时先关闭这个issue了。 |
环境测试:
Nexus5 CM12
测试代码如下
Log如下:
hook open函数 可以跳转到new_open函数,但是mmap和munmap函数不能跳转到新的函数
我看了下hook之后libart.so的got表 open mmap都被替换为了新的函数地址
The text was updated successfully, but these errors were encountered: