首页
社区
课程
招聘
[原创] sukinject:跨进程 arm64 DBI hook / 注入框架
发表于: 1天前 1063

[原创] sukinject:跨进程 arm64 DBI hook / 注入框架

1天前
1063

 看了网上很多关于 arm64 无痕 hook 的方法,然后自己理解下加上 ai 帮忙

 整理并开源了一个自己在用的 Linux / Android arm64 跨进程 hook 框架:sukinject


 ### 它是什么


 sukinject 做的是跨进程、内核辅助的 hook,不是同进程 inline hook。


 公开语义很简单:


 ```text

   target -> replacement -> origin

 ```


 - target:目标进程里的函数地址

 - replacement:也在目标进程地址空间里的代码(内核生成的 ABI wrapper / 已有 VA / agent 装进去的代码)

 - origin:目标进程里可回调原函数的 trampoline(ghost 页入口)


 调用方进程里的普通 C 函数指针,不能直接当 replacement——地址空间隔离决定了这一点。


 和 Dobby 那类同进程 inline hook 是不同模型,不追求 Dobby 兼容。需要同进程改字节插跳的,继续用 Dobby 即可。


 ### 技术路线(简要)


 依赖 root + 匹配内核的 kmod(/proc/sukinject)。


 大致思路:


 1. 目标代码页通过 PTE 翻转 UXN,执行会 instruction fault

 2. kprobe 挂在 fault 路径上,把 PC 重定向到 ghost / 重编译页

 3. 原始页字节尽量不改;执行走 shadow,读路径仍可对准原页(隐蔽性谱系更接近 wxshadow / 整页 DBI 那条线,而不是改 .text 插 B)


 能力边界也说清楚:


 - 主线 AArch64;compat32 会 fail closed

 - 需要自己能加载 suk_step4.ko(内核版本/树要对上)

 - 不是完整动态链接器,也不是「任意 C++ / TLS / 完整 so 语义」运行时

 - agent 路径支持受限 ELF / package 装进目标再绑入口,不是 ptrace+dlopen 主线


 ### 2. 四条 hook 路径


 ┌───┬────────────────────────────┬───────────┬──────────────────────────────────────────────────────┬────────────────────────────────┐

 │ # │ 路径                       │ kmod 命令 │ 核心做法                                             │ 代价/限制                      │

 ├───┼────────────────────────────┼───────────┼──────────────────────────────────────────────────────┼────────────────────────────────┤

 │ 1 │ DBI 整页重编译(默认主线) │ dbi-hook  │ UXN + fault 改 PC → ghost 重编译页;原页字节尽量不动 │ 复杂页/热页可能踩坑;有 origin │

 ├───┼────────────────────────────┼───────────┼──────────────────────────────────────────────────────┼────────────────────────────────┤

 │ 2 │ 指针换槽                   │ ptr-hook  │ 只改 8B 槽,不改 .text                               │ 只覆盖「过指针」调用           │

 ├───┼────────────────────────────┼───────────┼──────────────────────────────────────────────────────┼────────────────────────────────┤

 │ 3 │ HW-BP persistent           │ bp-hook   │ 硬件执行断点,命中改 pc;可 origin island            │ 每 hit 进内核;槽位少          │

 ├───┼────────────────────────────┼───────────┼──────────────────────────────────────────────────────┼────────────────────────────────┤

 │ 4 │ PFN-swap                   │ pfn-hook  │ 页帧/执行视图交换(实验)                            │ 非默认;隐蔽模型与 DBI 不同    │

 └───┴────────────────────────────┴───────────┴──────────────────────────────────────────────────────┴────────────────────────────────┘


 安装窗口还有 break-arm(oneshot 断点汇合)、task-hold、fork-watch 等,用来卡安装时机,本身不是第 3 条长期 hook。


 主路径:业务上优先 DBI +(可选)agent 装载;能指针化的用 ptr;低频零改字节再考虑 bp-hook;pfn 当实验后端。


 ### 你能直接用的东西



[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 1天前 被PPKun编辑 ,原因:
收藏
免费 0
打赏
分享
最新回复 (22)
雪    币: 112
活跃值: (8945)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
tql
1天前
0
雪    币: 411
活跃值: (386)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
tql
1天前
0
雪    币: 347
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
把 PC 重定向到 ghost,这条路对于libart不行,直接崩溃
1天前
0
雪    币: 686
活跃值: (805)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看样子得高内核手机才行对吧,试用一下
1天前
0
雪    币: 641
活跃值: (2056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
666
1天前
0
雪    币: 88
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
大内核hook时代
1天前
0
雪    币: 18
活跃值: (554)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
666
1天前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
6666
1天前
0
雪    币: 2856
活跃值: (5672)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
测试 依旧无痕hook大时代
1天前
0
雪    币: 109
活跃值: (445)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
666
1天前
0
雪    币: 158
活跃值: (5136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
666
1天前
0
雪    币: 216
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
1
1天前
0
雪    币: 2790
活跃值: (6558)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
感谢分享!
1天前
0
雪    币: 31
活跃值: (476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
mb_cfjwplfo 把 PC 重定向到 ghost,这条路对于libart不行,直接崩溃
我readme里已经说了不行了,会卡死的
1天前
0
雪    币: 31
活跃值: (476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
x1a0f3n9 看样子得高内核手机才行对吧,试用一下
不知道低版本行不行,我没低版本的手机了
1天前
0
雪    币: 28
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
1
1天前
0
雪    币: 5
活跃值: (1663)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
666
1天前
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
太强了,向大佬学习
1天前
0
雪    币: 347
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
PPKun 我readme里已经说了不行了,会卡死的
为什么不行啊大佬,我也好奇这个
19小时前
0
雪    币: 31
活跃值: (476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
mb_cfjwplfo 为什么不行啊大佬,我也好奇这个
ART很多地方会自改,ghost不会自动同步,要手动重编,没同步就会看起来是新代码,但是跑的是旧代码
然后很多涉及跳转的地方,也不好处理
17小时前
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
牛逼
14小时前
0
雪    币: 758
活跃值: (1755)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
666
5小时前
0
游客
登录 | 注册 方可回帖
返回