模块、Hook 与扩展 / Magisk 模块

别急着刷 ZIP:第一次 Magisk 模块的审计、验证与救援

在电脑审计模块结构和脚本,确认救援通道后只安装一个低风险模块,并验证效果与完整撤销。

本篇完成任务

安全审计、安装、验证并撤销一个单一用途 Magisk 模块,证明救援路径可用。

模块是以 root 在开机阶段运行的代码包,不是主题商店插件。本教程让你在自有备用机上审计一个来源清晰、功能单一的模块 ZIP,安装前先证明 ADB 与该设备专用的原厂恢复路径可用,安装后只验证一个效果并完整撤销。

你会完成什么#

  • 识别 module.prop、安装脚本、启动脚本、overlay、二进制与网络下载行为。
  • 对作者、Release、commit、ABI、哈希、写入路径和卸载说明做最小供应链审计。
  • 一次只安装一个低风险模块并观察完整重启周期。
  • 通过禁用、卸载或官方救援命令回到无模块基线。

先看结论#

ZIP 特征风险判断行动
有源码、tag 对应 Release、只改少量属性、清楚支持版本可作为练习候选仍需哈希、脚本和回滚审计
service.sh 或 system overlay中等阅读每条命令,一次只改一个功能
post-fs-data.sh、native binary 或 sepolicy.rule新手第一次不选,早期开机错误可致 bootloop
要求 permissive、全局 root 或从短链下载 payload不接受停止并删除下载物

心智模型#

模块 ZIP → 安装器审计 → /data/adb/modules/<id>
                            ├─ post-fs-data:早期、阻塞、风险高
                            ├─ service:后期、通常非阻塞
                            └─ system overlay / props / policy
开机异常 → Safe Mode/ADB → disable/remove → 重启 → 设备专用原厂恢复兜底

“Systemless”通常表示借启动时挂载覆盖系统视图,而不是直接改只读 system 分区;它不代表无风险。脚本仍可能以 UID 0 改属性、策略和文件,甚至联网下载第二阶段内容。

工具清单#

工具角色什么时候用来源与注意
解压与文本查看器离线审计 ZIP安装前不执行包内脚本,只阅读
SHA-256绑定 Release 与本地文件下载后、归档时页面哈希应来自作者可信渠道
Magisk App/CLI安装、禁用和救援审计通过后首次不使用“一键装机包”
MMRL浏览模块元数据发现候选时索引展示不等于安全审核或作者背书
adb模块 bootloop 救援电脑已提前授权时无法在开机前临时补授权

项目全景:Magisk 模块的 3 个项目,一个不漏#

这个子类只有三个项目,因此按具体职责拆分,而不是虚构庞大生态:两个 adb root 实现分别核对维护状态,一个 TCL Flip 2 模块说明按键/应用重映射;共同的安装、救援和卸载原则放在结尾串联。

技术路线项目数处理等级在主题任务中的位置
ADB root:有说明的实现1候选路线用 wuxianlin/adb_root 解释生产版 adbd、USB 调试授权和为什么 adb root 会扩大物理连接风险。只在备用机验证,并记录卸载模块后的 adbd 身份。
ADB root:最小元数据项目1候选路线tiann/adb_root 缺少仓库描述,应以 README、提交时间和脚本内容补足判断,不能只因作者知名就默认兼容。与另一实现并列比较文件、服务和回滚差异。
设备专用应用重映射1候选路线用 tadateruu/signalremap 展示模块如何在 TCL Flip 2 上替换默认短信入口。强调设备、包名和前置项目约束,并用禁用模块恢复原始行为。

1. ADB root:有说明的实现 · 1#

用 wuxianlin/adb_root 解释生产版 adbd、USB 调试授权和为什么 adb root 会扩大物理连接风险。只在备用机验证,并记录卸载模块后的 adbd 身份。

本组共 1 项:1 个源项目、0 个 Fork,其中 0 项已归档。新手应先从“未归档的源项目”核对 README 和 Release,再用 Fork 追溯设备适配或历史差异;分组本身不等于推荐安装。

项目上游定位与识别信号状态与采用前检查
wuxianlin/adb_root主题用途:将 wuxianlin/adb_root 纳入「ADB root:有说明的实现」候选路线,根据 Shell 核对功能、平台与版本适配。 上游自述(保留原文):Magisk module to enable adb root未归档源项目 · ★ 52 · 协议未声明 · 2024-06-27。边界命中:先读 README,确认它确实属于当前任务,再决定是否使用。

2. ADB root:最小元数据项目 · 1#

tiann/adb_root 缺少仓库描述,应以 README、提交时间和脚本内容补足判断,不能只因作者知名就默认兼容。与另一实现并列比较文件、服务和回滚差异。

本组共 1 项:1 个源项目、0 个 Fork,其中 0 项已归档。新手应先从“未归档的源项目”核对 README 和 Release,再用 Fork 追溯设备适配或历史差异;分组本身不等于推荐安装。

项目上游定位与识别信号状态与采用前检查
tiann/adb_root主题用途:将 tiann/adb_root 纳入「ADB root:最小元数据项目」候选路线,根据 Shell 核对功能、平台与版本适配。 上游自述(保留原文):未提供仓库简介未归档源项目 · ★ 281 · NOASSERTION · 2026-03-26。边界命中:先读 README,确认它确实属于当前任务,再决定是否使用。

3. 设备专用应用重映射 · 1#

用 tadateruu/signalremap 展示模块如何在 TCL Flip 2 上替换默认短信入口。强调设备、包名和前置项目约束,并用禁用模块恢复原始行为。

本组共 1 项:1 个源项目、0 个 Fork,其中 0 项已归档。新手应先从“未归档的源项目”核对 README 和 Release,再用 Fork 追溯设备适配或历史差异;分组本身不等于推荐安装。

项目上游定位与识别信号状态与采用前检查
tadateruu/signalremap主题用途:将 tadateruu/signalremap 纳入「设备专用应用重映射」候选路线,根据 Shell 核对功能、平台与版本适配。 上游自述(保留原文):TCL Flip 2 Magisk module that launches another messenger app instead of com.android.mms. Requires root, check out neutronscott's flip2 repo first.未归档源项目 · ★ 5 · 协议未声明 · 2025-10-15。边界命中:先读 README,确认它确实属于当前任务,再决定是否使用。

开始前#

确认基础 Root 已稳定至少两次重启,保存 Magisk 版本、Android/build、ABI、现有模块列表、实际被 Magisk 修改目标的原厂镜像,以及完整厂商恢复包与说明。打开 USB debugging,在这台电脑上实际运行 adb devices 并确认授权;记录本机进入安全模式/bootloader/下载模式的按键。Samsung 必须准备完整 Odin 恢复与清数据路径,不能把单刷 bootinit_bootrecoveryvbmeta 当回滚。选一个不涉及 SystemUI、SELinux、认证或 adbd 的小模块作为练习。

截至 2026-08-09,模块索引与模块作者仍是两层信任关系;同名仓库也可能属于不同 owner。必须从索引回到原项目核对 owner、tag、commit、签名和支持范围。

操作步骤#

1. 解压并建立内容清单#

在电脑复制 ZIP 后计算哈希并解压到隔离目录。读取 module.prop 的 id、version、author 与 updateJson;列出 customize.shpost-fs-data.shservice.shsystem.propsepolicy.rulesystem/ 和二进制。搜索 curlwgetsusetenforcermdd 与远程 URL,并写下每个命令的目标。

2. 给候选模块做准入审计#

把 Release tag 对应到源码 commit,检查支持的 Android、Magisk 与 ABI,确认产物没有未知 native blob。评估它在开机哪个阶段运行、写哪些路径、是否改变 SELinux 或网络配置,以及卸载能否恢复。无法解释的命令不是“可能没事”,而是拒绝准入。

3. 安装一个并验证单一效果#

截图/导出现有模块列表,在 Magisk 中选择本地 ZIP,阅读安装日志后再重启。首次启动留出正常时间,不连续强制重启。只检查模块声明的一个效果,同时复测开机、解锁、无线、相机和设置;保存 adb logcat 中与模块 id 相关的异常。

4. 撤销并演练救援#

正常可启动时先在 Magisk 禁用模块、重启验证效果消失,再卸载并重启。若模块导致 bootloop 且 ADB 可用,先明确接受破坏范围:官方救援命令 adb shell magisk --remove-modules 会删除全部已安装模块并自动重启,不是只删本次模块;能读取清单时先保存,再执行一次。若 ADB 不可用,走已记录的安全模式或设备专用原厂恢复:非 Samsung 只恢复经该机型文档确认、且确实被 Root 方案修改的目标镜像;Samsung 走完整 Odin 恢复并按官方要求清数据,绝不单刷 boot/init_boot/recovery/vbmeta。不要在故障状态再安装“修复模块”。

验证#

阶段可观察证据验收标准
审计文件树、脚本目标、来源、哈希与 ABI 都有记录没有无法解释的下载或高危命令
安装安装日志与模块 id/version 对应没有额外模块或隐式 payload
效果只有声明的功能变化,系统关键功能正常完整重启后仍可复现
撤销禁用后效果消失,卸载后目录/列表恢复再重启一次仍是无模块基线

把“ADB 已连接”也纳入验证:授权必须在出问题之前完成。若设备只在 Android 完全启动后才出现,不能把它当成早期开机救援保证。

排错#

现象常见原因安全处理
安装器报格式错误ZIP 结构、下载损坏或非 Magisk 模块比对 hash 与上游格式,不改扩展名硬装
开机很慢/循环post-fs-data、policy 或二进制不兼容走已验证的禁用/移除路径,再按设备与 Root 安装方式执行完整原厂恢复
效果不存在版本、ABI、路径或执行阶段不匹配读取日志并卸载,不叠加同类模块
卸载后仍残留模块写了非 systemless 数据或 App 缓存根据审计记录恢复明确目标;未知时回备份而非乱删
OTA 后异常模块与新系统/挂载布局冲突更新前禁用,更新后按新 build 重新审计

完成清单#

  • ZIP 的 owner、Release、commit、SHA-256、Android/Magisk/ABI 支持已核对。
  • 已阅读全部安装与开机脚本,并能解释网络、写入和 policy 行为。
  • 已提前验证 ADB、按键救援、实际修改目标的原厂镜像与完整厂商恢复,而非出错后才准备。
  • 一次只安装一个低风险、单一用途模块。
  • 已验证声明效果与系统关键功能,没有把“能开机”当唯一成功标准。
  • 已完成禁用、卸载和再重启,证明能够恢复基线。

一手资料#