发布于: 2024-9-7最后更新: 2025-4-27字数 2653阅读时长≈ 7 分钟

目标: 支持非官方管理器, 开机静默授权, kernelSU源码简要分析

为什么要使用kernelSu?

因为我们修改自定义rom, 如果需要root权限则要编译userdebug版本, 本身就不是一个正常的用户版本, 其次userdebug的su是会被检测出来的, 当然可以修改su的名字来达到隐藏, 但是还有其他手段可以检测是否root
有没有更好的解决方案呢?
编译成user版本, 然后通过内核级别的root方案: kernelSU
所以应用层的app是无法检测的, 降维打击!(当然这里有个侧信道检测的方式, 也就是发送命令给内核的ksu, 如果有回复则认为是有kernelSU, 需要自己修复)
 
首先, kernelSU不支持自己编译或者第三方的管理器, 因为他的内核源码有对管理器的签名做校验, 需要修改kernelSU源码

去掉检测是否官方管理器

D:\work\KernelSU-0.9.5\kernel\throne_tracker.c
这个is_manager_apk会去检查管理器apk的签名,来验证是不是官方管理器, 我们改成根据dirpath来判断是否包含包名
notion image

解决管理器显示不支持内核

我这里还需要改下(不知道为什么我这个is_manager地方一直返回false)
kernel-4.14/KernelSU/kernel/manager.h
//todo 这个地方改动后, 可能有bug
 
我的内核是4.14, 不管是kprobe集成还是手动修改代码集成, 安装官方的管理器都会显示不支持内核
他的表现是先安装kernelSU 0.95→再安装1.01管理器, 就正常, 但是重启后又显示不支持内核, 但是之前授权的su是正常的, 说明是manager的问题
这样就可以愉快的自己编译manager玩耍了 :)

如何修改kernelSU源码, 重新编译内核来达到开机静默授权呢?

我是将app制作成系统应用, 然后kernelSU 静默授权给系统app root来实现, 当然也可以自己修改代码, 通过包名来判断
分析KernelSU-0.9.5\kernel\allowlist.c
 

become_manager

根据包名和uid来构建app的路径
然后传递到内核
D:\work\KernelSU-0.9.5\manager\app\src\main\cpp\ksu.cc
看下接收方实现
D:\work\KernelSU-0.9.5\kernel\core_hook.c
上面的包名就是arg3
 
核心
kernel-4.14/KernelSU/kernel/throne_tracker.c
主要流程track_throne → search_manager → crown_manager验证包名并设置manager uid

Loading...
android 11 ota 静默升级

android 11 ota 静默升级

Sandhook elfutil 简单学习

Sandhook elfutil 简单学习


公告
 
花有重开日, 人无再少年~