Environment Audit

Momo 异常项深度对照与修复

“在对抗侧信道检测时,每一条红字都是系统泄露的元数据。审计的目标不是欺骗,而是通过逻辑重构构建逻辑自洽的纯净态。理解检测背后的 Linux 系统调用,是实现完美隐匿的前提。”

🛡️ 核心与注入类审计

找到 Zygisk / Zygote 异常
Critical

底层原理:Momo 探测到 Zygote 进程内存映射中存在未授权的 .so 库注入。这种检测通常基于对 /proc/self/maps 的静态扫描,识别出不属于系统原生库的匿名可执行段。
修复审计:确保 Shamiko 为最新稳定版(建议 1.0.1+)。在 Magisk 设置中必须关闭“遵守排除列表”(Denylist),随后在 Shamiko 的白名单模式(Whitelist Mode)配置中勾选 Momo。重启以重置进程空间。
进阶提示:若 Shamiko 无法解决,说明环境中存在非 Zygisk 的注入式模块(如 Riru 遗留),需交叉审计模块列表。

找到可执行程序 "su"
High Risk

底层原理:Momo 会遍历全局 PATH 路径,并利用 faccessat2 等系统调用探测是否存在具有 SUID 权限的二进制文件。即便重命名,文件头的 ELF 签名特征仍可能被特征扫描。
修复审计:这是最基础的特征检测。在 Magisk 管理器中执行“隐藏 Magisk 应用”,此操作会彻底重构 Magisk 管理器并为其分配一个随机生成的 Package Name,同时擦除包名库中的已知指纹。若为 KernelSU 用户,由于其不依赖 `/system/bin/su`,只需确保 Momo 未在授权列表中即可实现物理级隐匿。

找到 Riru 痕迹
Fatal

底层原理:Riru 通过替换系统的 libriru.so 实现挂钩,这会在 `/data/adb` 目录下留下持久化的配置文件夹和 Unix Domain Socket 句柄。
修复审计:Riru 框架在现代 Android 版本上极易留存文件特征。审计建议:彻底卸载 Riru 核心及其所有依赖模块。在 2026 年的审计标准下,应全面迁移至基于内存映射更隐秘的 Zygisk 方案。若因特定模块必须保留 Riru,务必配合 Riru-Hide 模块尝试拦截文件扫描,但由于其权限等级较低,无法保证穿透 Momo 的深度审计。

⚖️ 系统安全与权限系统审计

SELinux 处于宽容模式 / 规则异常
Security Fail

底层原理:Momo 会读取 /sys/fs/selinux/enforce 节点的值。如果检测到 Permissive (0),意味着 Android 的沙箱强制访问控制已失效,App 可以随意越权读取其他应用的数据。
修复审计:首先检查模块列表中是否有强制执行 setenforce 0 的脚本。建议安装 "SELinux Enforcer" 模块强制回滚内核状态。若红字依然存在,需审计内核(Kernel)编译时是否由于兼容性问题关闭了 CONFIG_SECURITY_SELINUX。在 KernelSU 环境下,可通过修改内核配置文件重新注入安全策略,确保返回值为 1。

非 SDK 接口的限制失效
Strict Mode Fail

底层原理:为了系统稳定性,Android 强制要求 App 只能调用公开的 SDK。而许多 Root 模块(如改机工具、系统美化)通过修改 hidden_api_policy 将限制等级降为 0,从而允许反射调用私有 API。Momo 会通过反射探测该策略的标志位。
修复审计:执行以下 Shell 脚本,手动抹除数据库中的覆盖项。这些指令将移除用户层对 API 策略的篡改,恢复系统原生的严格模式(Strict Mode)。

# 提权并物理删除 Settings 数据库中的全局策略覆盖
su -c "settings delete global hidden_api_policy && \
settings delete global hidden_api_policy_p_apps && \
settings delete global hidden_api_policy_pre_p_apps && \
settings delete global hidden_api_blacklist_exe"

注:如果执行后 Momo 仍报红,请审计是否有“跳过非 SDK 接口检测”类的 LSPosed 模块正在运行。

⚙️ 底层环境与存储审计

处于调试环境 (ro.debuggable=1)
Environment

底层原理:ro.debuggable 为 1 时,系统会被判定为工程机(Userdebug/Eng)固件。这允许 `adb shell` 拥有 root 权限,并开启所有进程的调试开关,是支付级 App 的高危审计项。
修复审计:这是对系统的初始化属性 default.prop 的探测。由于该属性在启动后无法直接通过 setprop 修改,必须使用 "Reset Prop" 库。建议在 Magisk 模块的 system.prop 文件中强制声明,利用 Magisk 的属性补丁(Property Patching)机制在内核加载属性前完成覆盖:

ro.debuggable=0
ro.secure=1
ro.adb.secure=1
找到 TWRP / 异常挂载记录
Remnants

底层原理:Momo 采用深度遍历策略。它不仅通过 stat() 扫描常见的自定义 Recovery 路径(如 /sdcard/TWRP),还会检查 Mount Table。由于 Magisk 的模块挂载(OverlayFS)往往会在 /proc/self/mounts 中留下非标准的临时文件系统映射,这些映射的哈希值与原厂固件不匹配。
修复审计:
1. 文件清理:物理删除内部存储根目录下的 /TWRP/Fox/.magisk 文件夹(即使是隐藏目录)。
2. 命名空间隔离:对于高级“挂载异常”,建议安装 "Mount Namespace Fix" 模块,确保每个 App 进程都拥有独立的、经过净化的挂载视图。
3. 方案迁移:推荐迁移至 KernelSU 这种从内核驱动层面原生拦截挂载点遍历的方案,它能让 App 在调用 getmount() 时返回完全虚假的纯净列表。

最终审计闭环 (Final Audit Checklist)

环境一致性:Momo 运行结果应为“环境非常干净”,不应出现任何红色或橙色警告项。

属性掩码:通过 getprop 命令手动抽检,确认 ro.debuggable 确实已在全局作用域内被强制覆盖为 0。

隔离有效性:在 Shamiko 作用域内的 App 无法通过 /proc/net/unix 审计到 Magisk 的通信套接字。

Audit Conclusion

“消除异常项不代表系统‘绝对安全’,
而是证明了你对系统底层逻辑的完美控制。在博弈中保持静默,才是最高级的审计。”