[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82663":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},82663,"xiaojianbang-stealth-hook","xiaojianbang8888\u002Fxiaojianbang-stealth-hook","xiaojianbang8888","Android kernel stealth hook。安卓内核无痕hook，目前已知的所有用户态检测都无效。","",null,"C",154,84,63,0,4,19,79,15,68.19,false,"main",true,[],"2026-06-12 04:01:38","# xiaojianbang Stealth Hook — Android 内核无痕 Hook 框架\n\n> 基于 KernelPatch + ARM64 硬件断点（HWBP）的零痕迹 Hook 方案。\n> 不修改目标进程任何内存，不注入 SO，不创建可疑映射。\n> 在最高对抗强度的反作弊环境下仍然有效。\n\n---\n\n## 作者\n\n| | |\n|------|------|\n| 作者 | **xiaojianbang** |\n| 微信 | xiaojianbang8888 |\n| 官网 | https:\u002F\u002Fxjbedu.site |\n| B站 | https:\u002F\u002Fspace.bilibili.com\u002F534838862 |\n| 公众号 | 非攻code |\n| 知识星球 | 小肩膀和他的朋友们 |\n\n**平台定位：**\n- **B站**：免费视频教程（爬虫、JS、Android、iOS逆向、浏览器内核）\n- **公众号（非攻code）**：免费技术文章\n- **知识星球（小肩膀和他的朋友们）**：可直接落地的技术方案、源码、成品工具\n\n---\n\n## 项目信息\n\n| | |\n|------|------|\n| 项目名 | xiaojianbang-stealth-hook |\n| 用户态工具 | xiaojianbang_hook |\n| 内核模块 | xiaojianbang-stealth-hook.kpm |\n| 技术栈 | ARM64 HWBP \u002F PTE-UXN \u002F DBI \u002F KernelPatch KPM |\n| License | GPL-2.0-or-later |\n\n---\n\n## 框架组成\n\n使用只需要两个文件：\n\n| 文件 | 说明 |\n|------|------|\n| `xiaojianbang-stealth-hook.kpm` | 内核模块，APatch App 直接加载 |\n| `xiaojianbang_hook` | 用户态工具，arm64 静态链接，推到设备即用 |\n\n---\n\n## 实现原理\n\n```\n用户态                              内核态 (KPM by xiaojianbang)\n\nxiaojianbang_hook ── syscall 285 ──→ stealth_hook.c dispatch\n                                      │\n                                      ├─ HWBP_HOOK → 对所有线程注册硬件断点\n                                      ├─ AUTO_THREAD → 新线程自动覆盖\n                                      ├─ SET_OVERRIDE → 配置改参\u002F跳过\n                                      ├─ QUERY → 返回 hit_count + args + mem_dump\n                                      └─ UNHOOK → 释放断点\n\n目标函数执行 ── CPU debug trap ──→ hwbp_handler()\n                                      │\n                                      ├─ 记录 X0-X7, LR\n                                      ├─ PAN bypass dump 指针内存（hex+ascii）\n                                      ├─ SKIP_ORIGIN: pc=LR, x0=ret_value\n                                      ├─ MODIFY_ARGS: regs[N]=value\n                                      └─ 状态机: BP跳到LR → 函数返回 → BP跳回入口\n```\n\n核心思路：利用 ARM64 CPU 的硬件调试寄存器，在内核态注册断点。目标函数执行时 CPU 自动 trap 到内核 handler，直接操作寄存器后返回用户态。全程不修改任何用户态内存。\n\n---\n\n## 设备要求\n\n| 条件 | 要求 | 说明 |\n|------|------|------|\n| CPU | arm64 | 仅支持 ARM64 架构 |\n| 内核 | 5.4+ GKI | Android GKI 内核（Google 通用内核镜像） |\n| KernelPatch | 0.13.x | kpimg 版本 d01，提供 KPM 加载能力 |\n| APatch | 已安装 | 用于加载 KPM 模块和提供 su 权限 |\n| Bootloader | 已解锁 | APatch\u002FKernelPatch 的前提 |\n\n### 已验证设备\n\n| 设备 | 系统 | 内核 |\n|------|------|------|\n| Pixel 6 (oriole) | Android 15 | 5.10.209 |\n\n理论上所有满足上述条件的 arm64 GKI 设备都可以使用。\n\n---\n\n## 安装\n\n```bash\n# 1. 推送文件到设备\nadb push xiaojianbang-stealth-hook.kpm \u002Fsdcard\u002F\nadb push xiaojianbang_hook \u002Fdata\u002Flocal\u002Ftmp\u002F\nadb shell \"su -c 'chmod 755 \u002Fdata\u002Flocal\u002Ftmp\u002Fxiaojianbang_hook'\"\n\n# 2. 在 APatch App 中加载 KPM\n#    打开 APatch → 模块管理 → 加载 \u002Fsdcard\u002Fxiaojianbang-stealth-hook.kpm\n\n# 3. 验证\nadb shell \"su -c '\u002Fdata\u002Flocal\u002Ftmp\u002Fxiaojianbang_hook --pid 1 --so libc.so --offset 0x1' 2>&1\"\n# 看到 \"[+] libc.so base=...\" 即正常\n```\n\n---\n\n## 使用方法\n\n### 命令格式\n\n```bash\nxiaojianbang_hook --pid \u003Cpid> --so \u003Cname> --offset \u003Chex>[,\u003Chex>...] [选项]\n```\n\n### Live Trace（默认行为）\n\n```bash\nxiaojianbang_hook --pid $PID --so libwtf.so --offset 0x41ac0,0x41d7c --dump-size 96\n```\n\n设完 hook 后自动进入持续监听。每次函数调用实时输出 X0-X7 + 指针内存 dump（hex+ascii）。Ctrl+C 退出时自动 unhook。\n\n输出示例：\n```\n[+] libwtf.so base=0x7a01a94000, 2 offset(s)\n[+] HWBP set: 156 nodes (2 offsets x 78 threads), dump_size=96, flags=0x1\n[*] live trace started, press Ctrl+C to stop & unhook...\n\n[0x41ac0 #1] tid=5852  pc=0x7574482ac0\n  X0=0x7ff2c3c2f0 →\n      0000: 01 23 45 67 89 ab cd ef  fe dc ba 98 76 54 32 10  |.#Eg........vT2.|\n  X2=0x771610cdb0 →\n      0000: 31 37 38 30 30 38 35 32  37 39 31 35 36 63 39 65  |1780085279156c9e|\n      0010: 62 37 38 34 31 2d 39 38  31 66 2d 34 61 39 66 2d  |b7841-981f-4a9f-|\n  X4=0x40\n  ...\n\n[*] stopping, unhooking...\n[+] unhooked 156 nodes\n```\n\n### 其他操作模式\n\n```bash\n# 持续监听 + 返回值\nxiaojianbang_hook --pid $PID --so libwtf.so --offset 0x4161c --listen-ret\n\n# 替换返回值（跳过原函数）\nxiaojianbang_hook --pid $PID --so libc.so --offset 0x65330 --replace-ret 12345\n\n# 修改参数\nxiaojianbang_hook --pid $PID --so libwtf.so --offset 0x4161c --modify-arg 0=0x100 --modify-arg 1=0x200\n\n# 捕获第 N 次调用\nxiaojianbang_hook --pid $PID --so libwtf.so --offset 0x3e5b0 --nth 3\n\n# 手动查询\nxiaojianbang_hook --query --pid $PID --so libwtf.so --offset 0x4161c\n\n# 卸载\nxiaojianbang_hook --unhook --pid $PID --so libwtf.so --offset 0x4161c\n```\n\n---\n\n## 完整参数列表\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--pid \u003Cpid>` | 目标进程 PID | 必选 |\n| `--so \u003Cname>` | SO 库名称 | 必选 |\n| `--offset \u003Chex>[,hex...]` | 函数偏移（逗号分隔，上限 6） | 必选 |\n| `--listen-ret` | 同时捕获返回值 | 不捕获 |\n| `--replace-ret \u003Cval>` | 跳过原函数，返回指定值 | 不跳过 |\n| `--modify-arg N=VAL` | 修改第 N 个参数（可重复，N=0~7） | 不修改 |\n| `--dump-size \u003CN>` | 每个指针 dump N 字节 | 80 |\n| `--no-dump` | 不 dump 内存 | dump |\n| `--nth N` | 从第 N 次触发开始输出 | 1 |\n| `--once` | 只抓一次就退出 | 持续监听 |\n| `--query` | 手动查询最后一次 hit | live trace |\n| `--unhook` | 卸载 hook | — |\n\n---\n\n## 核心特性\n\n- **全线程覆盖**：自动遍历 \u002Fproc\u002Fpid\u002Ftask 对所有线程设断点 + auto_thread 监听新线程\n- **多地址 hook**：逗号分隔，一次设多个断点（硬件上限 6 个）\n- **持续监听**：状态机振荡（entry→LR→entry），每次调用都输出，永不停止\n- **通用内存 dump**：寄存器值像指针就自动 dump hex+ascii，不猜类型\n- **Ctrl+C 自动清理**：退出时 unhook 所有断点\n- **动态热重载**：通过 supercall 动态加载\u002F卸载 KPM，无需重启设备\n\n---\n\n## 反检测能力\n\n| 检测手段 | Frida | Xposed | Dobby | xiaojianbang_hook |\n|----------|:-----:|:------:|:-----:|:-----------------:|\n| .text CRC 校验 | ❌ | ❌ | ❌ | ✅ 不修改代码 |\n| \u002Fproc\u002Fmaps 扫描 | ❌ | ❌ | ❌ | ✅ maps_hide |\n| ptrace 读调试寄存器 | N\u002FA | N\u002FA | N\u002FA | ✅ 假账本 |\n| perf_event_open 枚举 | N\u002FA | N\u002FA | N\u002FA | ✅ 内核态事件用户态不可见 |\n| 线程检测 | ❌ | ❌ | ✅ | ✅ 无线程 |\n| Frida 特征 | ❌ | ✅ | ✅ | ✅ 无关 |\n| TracerPid | ❌ | ✅ | ✅ | ✅ 零 |\n\n---\n\n## 注意事项\n\n1. **ARM64 硬件断点上限 6 个**：每个 offset 占一个槽位，超过会 -ENOSPC\n2. **不要 hook 高频通用函数**：如 memcpy、malloc。应 hook 目标函数内部的具体地址\n3. **su 输出问题**：APatch su 需加 `2>&1`\n4. **hit_count 爆炸 = hook 错了位置**：正常业务函数调用频率很低\n\n---\n\n## 目录结构\n\n```\nxiaojianbang-stealth-hook\u002F\n├── README.md                       # 本文档\n├── kpm\u002F                            # 内核模块源码\n│   ├── stealth_hook.c              # syscall bridge + dispatch\n│   ├── stealth_hook.h              # 命令定义 + 结构体\n│   ├── hwbp.c                      # HWBP: handler\u002F状态机\u002Fdump\u002Foverride\n│   ├── pte_hook.c                  # PTE\u002FUXN hook + DBI 重定向\n│   ├── ghost_mem.c                 # Ghost Memory\n│   ├── maps_hide.c                 # \u002Fproc\u002Fmaps 隐藏\n│   ├── ptrace_spoof.c             # ptrace 假账本\n│   └── Makefile\n├── userspace\u002F                      # 用户态源码\n│   ├── src\u002Fxiaojianbang_hook.c     # 主工具\n│   ├── src\u002Fdbi_recompiler.c        # DBI 指令重编译\n│   ├── src\u002Fdbi_decoder.c           # ARM64 指令分类器\n│   ├── src\u002Fkpm_loader.c            # KPM 动态加载\u002F卸载\n│   ├── src\u002Fsh_control.c            # KPM 状态检查\n│   ├── src\u002Fmemread.c               # \u002Fproc\u002Fpid\u002Fmem 辅助\n│   ├── include\u002Fdbi.h\n│   └── Makefile\n└── release\u002F                        # 发布文件（只需这两个）\n    ├── xiaojianbang-stealth-hook.kpm\n    └── xiaojianbang_hook\n```\n\n---\n\n## 致谢与参考\n\n完整的实现过程，会写成文章，放在知识星球：**小肩膀和他的朋友们**\n\n感谢珍惜佬，原文链接：https:\u002F\u002Fbbs.kanxue.com\u002Fthread-290718.htm\n\n---\n\n## 联系作者\n\n有问题或建议，欢迎通过以下方式联系：\n\n- **微信**：xiaojianbang8888\n- **B站**：https:\u002F\u002Fspace.bilibili.com\u002F534838862\n- **公众号**：非攻code\n- **知识星球**：小肩膀和他的朋友们\n- **官网**：https:\u002F\u002Fxjbedu.site\n","xiaojianbang-stealth-hook 是一个基于 ARM64 架构的 Android 内核无痕 Hook 框架，能够在不修改目标进程内存、不注入 SO 且不创建可疑映射的情况下实现对特定函数的拦截。该项目利用 KernelPatch 和硬件断点（HWBP）技术，在内核态注册断点，当目标函数执行时 CPU 自动触发 trap 到内核 handler，直接操作寄存器后返回用户态，从而实现了零痕迹的 Hook。该框架适用于需要在高对抗强度环境下进行反作弊检测的应用场景，如安全研究、逆向工程等。此外，项目支持所有满足 arm64 架构及指定内核版本条件的 GKI 设备，并通过 APatch 应用加载其内核模块。",2,"2026-06-11 04:08:52","CREATED_QUERY"]