首页
社区
课程
招聘
[原创] Android(Linux) 内核 Patch (root + 内核 inline hook) 方案
2023-8-22 07:39 14798

[原创] Android(Linux) 内核 Patch (root + 内核 inline hook) 方案

2023-8-22 07:39
14798
收藏
点赞15
打赏
分享
最新回复 (28)
雪    币: 1109
活跃值: (1634)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_lpcoesnt 2023-8-22 08:24
2
0
这个和skroot很像啊
雪    币: 19349
活跃值: (28971)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-8-22 09:17
3
1
感谢分享
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_晚风_407 2023-8-22 10:34
4
1
强!!  支持!
雪    币: 22
活跃值: (3619)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
New对象处 2023-8-22 10:34
5
0
666,start先,坐等大佬实现syscall hook
雪    币: 580
活跃值: (1502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bmax 2023-8-22 10:50
6
0
New对象处 666,start先,坐等大佬实现syscall hook
已经有了现在,KernelPatch 中有实现了两种模式,一种使替换 syscall table 的,但是这种方式在高版本的android内核(我测过5.10)会因为有 Control Flow Integrity 出问题,还需要适配,低版本没问题。另一种模式是 inline-hook 的,现在使用的是这种。你可以看看 KernelPatch 的 kernel/init/include/syscall.h 和 
 kernel/init/accctl/supercall.c 是如何使用的。不过现在模块模块功能没开发,可能需要直接改 KernelPatch 代码
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2023-8-22 11:03
7
0
666,强的
雪    币: 6369
活跃值: (1258)
能力值: ( LV4,RANK:156 )
在线值:
发帖
回帖
粉丝
月落之汀 1 2023-8-22 11:36
8
0
bmax 已经有了现在,KernelPatch 中有实现了两种模式,一种使替换 syscall table 的,但是这种方式在高版本的android内核(我测过5.10)会因为有 Control Flow In ...
早上就在奇怪cfi的问题,不过之前看过cfi的具体实现,感觉hook下就能过掉,不是很难,这个patch的思路真的挺不错的,读完代码研习下dalao的操作
雪    币: 1728
活跃值: (2447)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NPC2000 2023-8-22 12:10
9
0
太强了
雪    币: 187
活跃值: (551)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
Loopher 2023-8-22 12:39
10
0
这么强悍6666
雪    币: 580
活跃值: (1502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bmax 2023-8-22 13:11
11
0
月落之汀 早上就在奇怪cfi的问题,不过之前看过cfi的具体实现,感觉hook下就能过掉,不是很难,这个patch的思路真的挺不错的,读完代码研习下dalao的操作
但是其实 inline hook 也有问题,如果是内核运行中进行 hook, 因为不是原子操作,还会引入同步问题,需要 stop_machine,并且如果某个task正运行在 需要 patch 的指令上,或者 patch 指令的地方有跳转且某个task堆栈正好就在这,会很麻烦,不过概率很小,可以检测到就 hook 失败重新来。具体我也没细研究
雪    币: 580
活跃值: (1502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bmax 2023-8-22 13:16
12
0
月落之汀 早上就在奇怪cfi的问题,不过之前看过cfi的具体实现,感觉hook下就能过掉,不是很难,这个patch的思路真的挺不错的,读完代码研习下dalao的操作
有个思路,如果只是 syscall table hook,其实可以尝试下跳过 xxx.cfi 函数,不知道可不可行
雪    币: 6369
活跃值: (1258)
能力值: ( LV4,RANK:156 )
在线值:
发帖
回帖
粉丝
月落之汀 1 2023-8-22 16:04
13
0
bmax 有个思路,如果只是 syscall table hook,其实可以尝试下跳过 xxx.cfi 函数,不知道可不可行
之前尝试过是不行的,当然也可能是我的方法有问题,过段时间我试试能不能把kcfi bypass了
雪    币: 893
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
智取棋 2023-8-23 14:59
14
0
很好
雪    币: 195
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fangkang 2023-8-25 10:35
15
0

Meizu M5 Note5
kernel 是 Linux version 3.18.35+ (flyme@Mz-Builder-l7) (gcc version 4.9 20150123 (prerelease) (GCC) ) #1 SMP PREEMPT Thu Jul 9 20:02:30 CST 2020

使用kptools patch 后得到新kernel,使用AIK重新打包后再使用mtk-client写入boot分区后无法启动,
主板上的URAT脚位也不知道,不好抓preloader的启动日志信息。
不知道有没有朋友了解 MTK平台的BOOT解包、修改、打包中的注意事项

最后于 2023-8-25 10:36 被fangkang编辑 ,原因:
雪    币: 574
活跃值: (257)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
miyuecao 2023-8-25 15:00
16
0
支持下,持续关注
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_ckpefbiq 2023-8-25 16:13
17
0
app的状态栏和kernelsu 好像,实测骁龙 5.15的设备无法开机,
雪    币: 397
活跃值: (2029)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
abcz316 2023-8-26 13:12
18
0
楼主思路不错,但不是所有内核的banner都是Linux version开头,而且不是所有的内核都会开放kallsyms_lookup_name,楼主是否有考虑这点呢?
雪    币: 62
活跃值: (556)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-8-26 15:04
19
0
mark
雪    币: 62
活跃值: (556)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-8-26 23:14
20
0
abcz316 楼主思路不错,但不是所有内核的banner都是Linux version开头,而且不是所有的内核都会开放kallsyms_lookup_name,楼主是否有考虑这点呢?
活捉一位读烂了十多本内核书的大佬 
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_ipugnluu 2023-8-28 04:56
21
0
厉害大佬
雪    币: 580
活跃值: (1502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bmax 2023-8-28 07:51
22
0
确实是,没有开 CONFIG_KALLSYMS 确实不行,还没见过,不过这种设备应该只有少部分路由器啥的内存少才会这么配吧
雪    币: 580
活跃值: (1502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bmax 2023-8-28 07:53
23
0
abcz316 楼主思路不错,但不是所有内核的banner都是Linux version开头,而且不是所有的内核都会开放kallsyms_lookup_name,楼主是否有考虑这点呢?
确实是,没有开 CONFIG_KALLSYMS 确实不行,还没见过,不过这种设备应该只有少部分路由器啥的内存少才会这么配吧
雪    币: 580
活跃值: (1502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bmax 2023-8-28 08:03
24
0
fangkang Meizu M5 Note5kernel 是 Linux version 3.18.35+& ...
3.18 没测过,uart 搞了几天没搞明白就不搞了,现在都是一块块的注释代码定位问题在哪,实在不行也可以把手机寄给我我搞一下
雪    币: 195
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fangkang 2023-8-28 09:52
25
0
@bmax 这个魅族M5 Note中的kallsyms的读取需要在kallsyms.c的593行修改成   
int32_t target_offset = info->linux_banner_offset - 0x1000
主要是他的起始地址是 0xffffffc000081000 而不是 0xffffffc000080000

然后我尝试手动修补bytecode 试着在某个函数的开头使用B指令跳转到新的偏移,然后平衡堆栈后在跳回原处,但无法启动,我觉得如果您知道手动修补的注意事项,告诉我们,我们可以试试看只做简单修补,看能否完成刷机启动最好不过

如果需要手机,请私信。
游客
登录 | 注册 方可回帖
返回