Maps特征检测对抗
一、前言
maps文件在Android中一般指/proc/pid/maps,记录着每个进程的内存映射信息,也就是每个进程都会有一个对应的文件。在之前的特征分析中,发现像dobby hook框架、frida等工具都会造成maps中的数据改变,因此想深入分析下这种特征的形成原因以及可以采用什么方式进行对抗
二、maps文件形成
以微信进程为例,看看它的maps文件
StrongR Frida特征魔改
Super分区定制
一、编译环境搭建
1 物料准备
- 设备:红米note11(MIUI12 Android11)
- 原生super.img镜像文件,参考下载网站
2 工具准备
- 编译支撑系统:ubuntu14(经测试不受版本影响,正常来说ubuntu都可以安装所有的工具)
- simg2img
- lpunpack/lmake
- imjtool
二、案例说明(内置应用)
1 镜像格式转化
正常image镜像都是Android sparse image格式的
Riru原理理解
一、前言
什么是riru?正如它Github上面所提到的那样,它提供的能力是允许模块能够将自己的代码注入到各个App进程或者是system_server进程中,而这一切的实现就是基于它对于zygote进程的注入。
那具体是怎么对于zygote进行注入的呢?文档中也提到,在早期的版本中,riru通过替换libmemtrack.so这个系统库的方式,原因是一方面zygote会加载该系统库,另一方面则是因为这个库足够小,仅仅只有十个函数,也就意味着替换掉它所造成的影响面是很小的,但是后续来看,由于使用到这个so的进程比较多,除了zygote还有SurfaceFlinger(用于显示系统)、mediaserver(用于媒体处理)等等,因此会造成一些意想不到的错误。
Riru MomoHider源码分析
一、前言
同样的,作为一个riru模块,从该项目的简介中,就可以发现它的主要作用了
Riru - MomoHider (aka IsolatedMagiskHider)
主要针对isolated进程所做的隐藏,MomoHider提供了几个配置选项来从多个角度隐藏MagiskHide,如下
配置项 | 说明 |
---|---|
isolated | 对每一个isolated processes卸载magisk相关的文件,但是无法控制卸载时机,可能会导致部分模块无法正常使用 |
setns | 在isolated processes中能够更快隐藏Magisk |
app_zygote_magic | 让momo无法检测到MagiskHide是运行状态 |
initrc | 隐藏修改init.rc的堆栈 |
这些配置应该是作者最初的想法,现在某些配置已经无法正常使用了,所以还是从源码中看看现在这个模块具体做了哪些事
基于内核的改机策略
以红米Note11内核改机为例说明
- sys.c:内核版本
- statfs.c:文件信息
- stat.c:文件信息
- readdir.c:目录下的文件列表
- open.c:文件重定向
Riru Unshare源码分析
红米Note11内核编译流程
前言
涉及到需要隐藏设备特征,所以需要编译内核来抹除暴露出的特征。小米内核有现成的源码,可以根据自身设备的型号来选择,下面简单描述下编译流程
一、编译环境搭建
1 物料准备
- 设备:红米note11(MIUI12 Android11)
- 源码:selene版本内核源码
需要注意的是note11(selenes)是国内的叫法,而国际版对应的是红米10(selene)