Git Product home page Git Product logo

Comments (10)

caikelun avatar caikelun commented on August 17, 2024

你是怎么判断new_mmap和new_munmap没有被执行到的?
因为hook是在so库被加载到内存之后才进行的,是否有可能在你的测试中libart.so后续没有再调用mmap了?

from xhook.

KuNgia09 avatar KuNgia09 commented on August 17, 2024

我试了另外一个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函数,后面几个函数都没跳过去

from xhook.

caikelun avatar caikelun commented on August 17, 2024

@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函数中,将:
__builtin___clear_cache((void *)PAGE_START(addr), (void *)PAGE_END(addr));
修改为:
syscall(0xf0002, (void *)PAGE_START(addr), (void *)PAGE_END(addr));

十分感谢!!

from xhook.

KuNgia09 avatar KuNgia09 commented on August 17, 2024

@caikelun
我试了xhook_enable_sigsegv_protection(0)和syscall 还是没有效果
我是想在加载dex之前 hook函数
正常来说加载dex的操作 libart会调用open mmap 函数

使用xhook之后,
我用ida调试 在plt的mmap,open过渡函数下了断点,然后执行加载dex操作,也只有plt中的open函数断下来了

我在nexus5 红米note4x上测试都不行
感觉不是段错误问题,程序执行起来了,只是新的mmap和原mmap都不能执行

from xhook.

caikelun avatar caikelun commented on August 17, 2024

@woxihuannisja 比较诡异。。而且根据你最初的描述,你用ida动态调试能看到got里mmap的函数地址其实是替换成功了?

如果只对libart.so hook mmap这一个函数,能被hook到正常跑吗?

from xhook.

KuNgia09 avatar KuNgia09 commented on August 17, 2024

@caikelun
hook之后 libart.so里面的got表已经替换为new_mmap函数了
hook之后,执行加载dex的操作,libart.so也没有执行原始的mmap函数了,我在libc的mmap函数也下了断点

xhook只是改了got表吗?

如果没有hook成功我的程序是跑不起来的

from xhook.

caikelun avatar caikelun commented on August 17, 2024

@woxihuannisja “libart.so也没有执行原始的mmap函数了”?有点糊涂了 @_@

from xhook.

caikelun avatar caikelun commented on August 17, 2024

@woxihuannisja 方便的话能weixin或者qq吗?能把联系方式发我邮箱([email protected])吗?我加你~

from xhook.

KuNgia09 avatar KuNgia09 commented on August 17, 2024

qq:1483943306

from xhook.

caikelun avatar caikelun commented on August 17, 2024

目前的情况是hook是成功的,但是hook后app逻辑中有一个native崩溃,导致程序逻辑还没有走到hook的新函数中就崩溃退出了。app逻辑有点复杂,目前没有时间配合调试了。。暂时先关闭这个issue了。

from xhook.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.