Android 另一种检测内存读写的方式–mincore
参考了这篇文章
安卓手游安全 - 反外挂基础
原理
引用上面文章的一句话
回归主题,上面所述有个关键词叫缺页异常比如我们调用 mmap 来映射内存,为了防止内存无效分配,该内存空间在未访问时是不会创建物理内存页的。当程序需要使用这块内存区域时,会触发缺页中断,然后系统才会创建物理内存页。
简而言之,就是先用 mmap 申请一段内存,如果 ce, 或 GG 读取这段内存后,那么这段内存就会由缺页变成非缺页.
而内存的缺页与否可以通过调用 mincore 判断.
使用
1.mmap 申请内存
1 | char * memory= nullptr; |
如果不对 memory 进行读写,那么 memory 默认为缺页状态
2.mincore 判断
1 | int pageSize = getpagesize(); |
效果
当 ce 指定读取该内存时,会发现该内存已经处于非缺页状态.
但是使用 ce 全局搜索内存时,并没有检测到这段内存.