基于ebpf的xposed loader — zloader

感觉这个确实是一个 nice approach,因为他可以基于 ebpf 进加载,还完成了 ART HOOK,非常不好进行检测。这个思路确实是牛逼的只能说

除了使用 uprobe 进行加载,这个东西一个比较厉害的点就是,可以对进程进行 umount

看了下具体操作,它不需要对 zygote 进行 hook 以进行 umount,而是采用了 hook syscall 的方式

通过 hook unshare syscall 的 sys exit tracepoint,对 zygote 孵化的进程进行分离的这样一个极早的时间点就对进程进行 SIGSTOP,这样接下来的操作都不会进行,与此同时辅助系统进行 unshare

这里它采用的方法是,直接 fork 一份自己,然后将当前 fork 出的进程的 namespace 通过 setns(由于是 rust,用的是 rustix crate 的 move_into_link_name_space) 设置到 zygote child 的 ns,之后再进行 umount。这样的好处就是,不需要 ptrace 之类的高危操作,而且时机够早,足够对目标 app 完成所有的 umount 操作。看着模块的 umount 点,首先是经典的 /data/adb 路径,其次卸载了所有带有 ksu 以及 overlay 的块。不过这种毫不分别的 umount 是不是会导致一些模块不工作啊。。。

正文完
 0
评论(没有评论)