在前面的文章我提到过Android内存读写检测是使用 mincore函数进行缺页检测的,那这篇文章我们来说说,如何去绕过这个检测。

方法1

我们可以通过注入到目标程序,对 libc 中的 mincore 函数进行 hook,修改它的 返回值 和 vec即可,但是如果目标程序采用 svc 调用,这个方式就没有用了。

方法2

我们都知道 mincore 是个系统调用,在 libc 中,mincore 函数只是封装了,所以,我们可以通过扫描程序内存中的 svc 调用,然后 nop 掉即可。

方法3

最好的方式,其实是自己写个内核调用 或者 编译个内核模块,在内核中判断是否存在物理页即可,这样的方式是最安全的,方法1 和 方法2 都是有办法检测到的,个人推荐使用这个方法。

这次也就不放代码和图了,有兴趣的研究下。方法3的方式,在GitHub上是能找到相关代码的。这里我也就不多说了。

最后修改:2024 年 01 月 16 日
如果觉得我的文章对你有用,请随意赞赏