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

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

2023-8-22 07:39
16612
收藏
免费 16
支持
分享
最新回复 (28)
雪    币: 1331
活跃值: (1934)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个和skroot很像啊
2023-8-22 08:24
0
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2023-8-22 09:17
1
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
强!!  支持!
2023-8-22 10:34
1
雪    币: 129
活跃值: (4485)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
666,start先,坐等大佬实现syscall hook
2023-8-22 10:34
0
雪    币: 764
活跃值: (2045)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
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 代码
2023-8-22 10:50
0
雪    币: 29
活跃值: (5647)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
666,强的
2023-8-22 11:03
0
雪    币: 6369
活跃值: (1683)
能力值: ( LV4,RANK:156 )
在线值:
发帖
回帖
粉丝
8
bmax 已经有了现在,KernelPatch 中有实现了两种模式,一种使替换 syscall table 的,但是这种方式在高版本的android内核(我测过5.10)会因为有 Control Flow In ...
早上就在奇怪cfi的问题,不过之前看过cfi的具体实现,感觉hook下就能过掉,不是很难,这个patch的思路真的挺不错的,读完代码研习下dalao的操作
2023-8-22 11:36
0
雪    币: 2264
活跃值: (3094)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
太强了
2023-8-22 12:10
0
雪    币: 210
活跃值: (626)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
10
这么强悍6666
2023-8-22 12:39
0
雪    币: 764
活跃值: (2045)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
月落之汀 早上就在奇怪cfi的问题,不过之前看过cfi的具体实现,感觉hook下就能过掉,不是很难,这个patch的思路真的挺不错的,读完代码研习下dalao的操作
但是其实 inline hook 也有问题,如果是内核运行中进行 hook, 因为不是原子操作,还会引入同步问题,需要 stop_machine,并且如果某个task正运行在 需要 patch 的指令上,或者 patch 指令的地方有跳转且某个task堆栈正好就在这,会很麻烦,不过概率很小,可以检测到就 hook 失败重新来。具体我也没细研究
2023-8-22 13:11
0
雪    币: 764
活跃值: (2045)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
月落之汀 早上就在奇怪cfi的问题,不过之前看过cfi的具体实现,感觉hook下就能过掉,不是很难,这个patch的思路真的挺不错的,读完代码研习下dalao的操作
有个思路,如果只是 syscall table hook,其实可以尝试下跳过 xxx.cfi 函数,不知道可不可行
2023-8-22 13:16
0
雪    币: 6369
活跃值: (1683)
能力值: ( LV4,RANK:156 )
在线值:
发帖
回帖
粉丝
13
bmax 有个思路,如果只是 syscall table hook,其实可以尝试下跳过 xxx.cfi 函数,不知道可不可行
之前尝试过是不行的,当然也可能是我的方法有问题,过段时间我试试能不能把kcfi bypass了
2023-8-22 16:04
0
雪    币: 893
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
很好
2023-8-23 14:59
0
雪    币: 195
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15

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

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

如果需要手机,请私信。
2023-8-28 09:52
0
游客
登录 | 注册 方可回帖
返回
//