Skip to content

About

绕过华为 MatePad 11 (DBY-W09) HarmonyOS 4.2 内核模块签名验证

Resources

Stars

2 stars

Watchers

1 watching

Forks

Repository files navigation

DBY-W09 内核模块签名绕过

Huawei MatePad 11 2021 (DBY-W09) HarmonyOS 4.2 / Linux 4.19.157-perf+

通过 binary patch 原版内核,绕过模块签名验证,加载任意 .ko 模块。 包含一个运行时关闭 SELinux 的内核模块。

→ 完整教程看这里 ←

目标内核

目前已适配以下编译时间的内核:

Linux version 4.19.157-perf+ (HarmonyOS@localhost)
#1 SMP PREEMPT Mon Jun 24 13:57:05 CST 2024
#1 SMP PREEMPT Fri Aug 30 08:34:06 CST 2024

脚本通过 kallsyms 精确定位,偏移配置在 tools/kernel_patches.json。

如果内核时间戳不在支持列表中,请不要直接用脚本 patch。 不同编译时间的内核可能存在内部偏移差异,直接 patch 可能导致内核崩溃无法开机。如果你有未适配的内核需要支持,欢迎提 Issue。

做了什么

Patch 原版内核的两个关键点(第三个是冗余安全网):

Patch 函数 改动 必要性
#1 mod_verify_sig 签名验证函数 → 直接返回 0 必须
#3 module_sig_check 读取 sig_enforce LDRB → MOV W8, WZR 必须
#2 is_module_sig_enforced MOV X0,#0; RET 冗余(仅 trace event 调用)

tools/patch_mod_verify_sig.py 通过 kallsyms 精确定位,偏移配置在 tools/kernel_patches.json。

SELinux 模块在运行时 patch 6 个内核执行点,绕过 CONFIG_SECURITY_SELINUX_DEVELOP=n 导致的硬编码 enforcing。通过 kallsyms_lookup_name() 解析地址,用内核自带的 aarch64_insn_patch_text(stop_machine)原子切换。控制接口: /sys/kernel/selinux_permissive/selinux_permissive(echo 1 → permissive,echo 0 → enforcing)。

编译模块

CI 手动触发编译:Actions,输入平板内核 .config 的下载链接即可。 产物:all-modules.tar.gz(全部模块)+ selinux_permissive.ko。

本地编译见 完整教程。

内核日志实时转发(kmsg_dump)

调试内核崩溃时,平板没有 pstore/ramoops(无预留内存),netconsole 也被华为关闭 (CONFIG_NETCONSOLE=n,无 netpoll 符号)。kmsg_dump 模块注册一个 console, 把内核日志实时通过 UDP 转发到接收端,崩溃时用 panic notifier 尽力补发最后一段。

# 编译
make -C dby-w09-4.0 O=../output/modules_build M=../kmsg_dump modules

# 接收端(WSL/PC)先监听
nc -u -l -p 6666

# 平板加载(ip 填接收端 IP)
insmod kmsg_dump.ko ip=192.168.1.6 port=6666
# 可选:同时写本地文件(不传 path 则只发 UDP)
insmod kmsg_dump.ko ip=192.168.1.6 port=6666 path=/data/crash_kmsg

日志流式输出到 nc 终端,崩溃前的所有内核输出(含 panic trace)都能看到。 模块在中断/原子上下文放弃发送(避免死锁),进程上下文崩溃(如 usbip 驱动 Oops)可完整抓到。

目录

README.md
TUTORIAL.md              ← 完整教程
env.sh                   ← 内核编译环境
.github/workflows/       ← CI(手动触发编译模块)
tools/                   ← patch_mod_verify_sig.py, verify_bootimg.py, verify_patches.py, setup_kernel_source.py
selinux_module/           ← SELinux permissive 模块
kmsg_dump/               ← 内核日志 UDP 实时转发模块
analysis/                ← 平板内核配置
dby-w09-4.0/             ← 内核源码 (submodule → yunsmall/dby-w09-4.0 fork)

设备

  • 设备: Huawei MatePad 11 2021 (DBY-W09)
  • SoC: Snapdragon 865 (Kona, SM8250)
  • 系统: HarmonyOS 4.2
  • 内核: 4.19.157-perf+ (ARM64)
  • 配置: CONFIG_MODULE_SIG_FORCE=y, CONFIG_SECURITY_SELINUX_DEVELOP=n

以上流程略繁琐。如果你用 Claude Code 等 AI 工具, 可以直接把 stock/ 下的文件给它,让它全自动完成 patch、打包、刷入一条龙。

注意事项

  • 刷入补丁内核不影响 Magisk(ramdisk 没动)
  • OTA 更新后内核可能变化,需重新 patch
  • 更新内核前先备份 kallsyms:adb shell cat /proc/kallsyms > stock/tablet_kallsyms
  • 编译模块用 make,编译完整内核用 kmake。kmake 定义在 env.sh,将 LD 覆盖为 aarch64-linux-gnu-ld --noinhibit-exec,绕过 MSM 驱动 R_AARCH64_ABS32 重定位硬错误
  • 源码编译的完整内核不能刷入平板——华为有大量闭源驱动和 vendor patch,自编内核会导致卡 logo。编译内核仅用于获取 Module.symvers 来编译 .ko 模块

About

绕过华为 MatePad 11 (DBY-W09) HarmonyOS 4.2 内核模块签名验证

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages