使用 KernelSU 自编译 Manager APP
·
之前讲过Android14 小米8 集成 KernelSU,现在讲下不使用官方manager app,安装自己编译的app使用。
1.KernelSU 有签名等校验,目前只需要改签名就行。
- 用Android studio 打开 KernelSU/manager,打包出 apk。
- 使用官方manager apk 赋予 shell 应用root权限
- 进入shell su ,使用 ksud debug get-sign xxxx.apk 得到size 和 hash。
- 在KernelSU/kernel/Makefile 中找到 KSU_EXPECTED_SIZE 和 KSU_EXPECTED_HASH进行替换。
luo@luo-B660M-GAMING-DDR4:~$ adb shell
dipper:/ $ su
dipper:/ # ksud debug get-sign /sdcard/KernelSU_v0.9.5_11872-debug.apk
size: 0x4ac, hash: c8a2e9bccf597c2fb6dc66bee293fc13f2fc47ec77bc6b2b0d52c11f51192ab8
这是ksud debug get-sign xxxx.apk
ifndef KSU_EXPECTED_SIZE
KSU_EXPECTED_SIZE := 0x033b
endif
ifndef KSU_EXPECTED_HASH
KSU_EXPECTED_HASH := c371061b19d8c7d7d6133c6a9bafe198fa944e50c1b31c9d8daa8d7f1fc2d2d6
endif
这是 kernel/xiaomi/sdm845/KernelSU/kernel/Makefile
正常改了之后就可以了,但是我这边遇到了 自编译的 manager app 还是 提示 不支持,因为之前shell已经赋予了root, 通过 dmesg -w | grep KernelSU
130|dipper:/ # dmesg -w | grep KernelSU
[ 0.921972] KernelSU: KPROBES is disabled, KernelSU may not work, please check https://kernelsu.org/guide/how-to-integrate-for-non-gki.html
[ 21.920395] KernelSU: /init argc: 1
[ 22.092399] KernelSU: /system/bin/init argc: 2
[ 22.092402] KernelSU: /system/bin/init first arg: selinux_setup
[ 22.236574] KernelSU: /system/bin/init argc: 2
[ 22.236577] KernelSU: /system/bin/init first arg: second_stage
[ 22.236580] KernelSU: /system/bin/init second_stage executed
[ 22.248637] KernelSU: android context saved disabled
[ 22.261662] KernelSU: kernel_compat: got init_session_keyring
[ 22.290237] KernelSU: /system/bin/init argc: 4
[ 22.290710] KernelSU: /system/bin/init argc: 4
[ 22.304687] KernelSU: vfs_read: /system/etc/init/atrace.rc, comm: init, count: 1024, rc_count: 351
[ 22.304911] KernelSU: read_iter_proxy append 673 + 351
[ 22.304915] KernelSU: stop vfs_read_hook
[ 25.279645] KernelSU: exec app_process, /data prepared, second_stage: 1
[ 25.279657] KernelSU: on_post_fs_data!
[ 25.279675] KernelSU: stop input_hook
[ 25.279685] KernelSU: installing init session keyring for older kernel
[ 25.279692] KernelSU: devpts sid: 42
[ 25.279696] KernelSU: stop execve_hook
[ 25.284529] KernelSU: allowlist version: 3
[ 25.284538] KernelSU: load_allow_uid, name: com.android.shell, uid: 2000, allow: 1
[ 25.284542] KernelSU: set root profile, key: com.android.shell, uid: 2000, gid: 0, context: u:r:su:s0
[ 25.284545] KernelSU: load_allow_list read err: 0
[ 25.284546] KernelSU: ksu_show_allow_list
[ 25.284548] KernelSU: uid :2000, allow: 1
[ 29.671182] KernelSU: renameat: packages.list.tmp -> packages.list, new path: /system/packages.list
[ 29.676603] KernelSU: Searching manager...
[ 29.676657] KernelSU: cert length overlimit
[ 29.676660] KernelSU: Found new base.apk at path: /data/app/me.weishu.kernelsu-ieJ_HaAzV8w8LPoAwRjjjw==/base.apk, is_manager: 0
[ 29.676662] KernelSU: Search manager finished
[ 68.739039] KernelSU: newfstatat su->sh!
[ 68.739064] KernelSU: faccessat su->sh!
[ 68.741443] KernelSU: do_execveat_common su found
其中有一行 cert length overlimit 通过代码发现是 CERT_MAX_LENGTH 长度问题 我这边改成
#define CERT_MAX_LENGTH 1500
就可以了。
2.关于libksud.so问题
以上步骤做好之后运行,可以正常使用,但是恢复出厂设置/双清之后 Manager App 提示 “获取 root 失败!”,反复看了好久,发现 App 会 将 libksud.so 复制到 /data/adb/ksud,如果第一次使用原版签名,原版manager app。再修改签名等信息 刷boot,用新签名的app,还是可以正常使用,是因为ksud已经复制过去了。
所以将原版apk文件解压得到 libksud.so 放在 jniLibs/arm64-v8a/下 重新运行Manager App,完美运行。
更多推荐




所有评论(0)