tiann / KernelSU

A Kernel based root solution for Android
https://kernelsu.org
GNU General Public License v3.0
10.2k stars 1.67k forks source link

[Custom] 如何在不具备AArch64或X64的Linux环境下从libksud.so中解压出嵌入的ko文件? #2184

Open 13584452567 opened 5 hours ago

13584452567 commented 5 hours ago

Describe your problem.

如题,我是一个桌面端工具箱的开发者。目前工具箱支持了kernelSU的内核替换和ko修补boot的安装方式,现在想要进一步支持直接选择apk然后对boot.img进行修补。这个过程中遇到了一个小问题,ksu不像magisk那样直接把所需的资源文件压缩在apk内而是使用了rust-embed嵌入了libksud.so,同时还启用了压缩。我尝试使用binwalker从libksud.so中分离ko文件但是失败了。直接观察文件二进制并未发现规律。我想知道有没有什么方法可以从libksud.so中解压出打包进去的ko文件?比如通过一个外部的rust程序来完成这一步骤或是直接进行bin分离操作

TinyHai commented 3 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

13584452567 commented 3 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

好的,感谢你的回复。那我这里准备直接放弃Apk的修补支持了。

TinyHai commented 3 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

好的,感谢你的回复。那我这里准备直接放弃Apk的修补支持了。

给你一个思路,其实boot修补的过程可以通过adb push到手机在/data/local/tmp目录下进行,ksub提供了修补boot的cli可以直接使用,这样只需要一个ksud和一个magiskboot外加一个需要修补的boot文件就行了 ksud和magiskboot都可以从apk中提取出来,然后push到手机,然后执行ksud的patch命令就行了

13584452567 commented 3 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

好的,感谢你的回复。那我这里准备直接放弃Apk的修补支持了。

给你一个思路,其实boot修补的过程可以通过adb push到手机在/data/local/tmp目录下进行,ksub提供了修补boot的cli可以直接使用,这样只需要一个ksud和一个magiskboot外加一个需要修补的boot文件就行了 ksud和magiskboot都可以从apk中提取出来,然后push到手机,然后执行ksud的patch命令就行了

但是这样的话,为什么不直接用ksu manager修补呢?

主要目标是完全离机修补镜像,不太能够指望手机环境。为了这个还特地实现了magiskboot,否则没法在loong64下正常运行。

感谢你提供的思路!

TinyHai commented 3 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

好的,感谢你的回复。那我这里准备直接放弃Apk的修补支持了。

给你一个思路,其实boot修补的过程可以通过adb push到手机在/data/local/tmp目录下进行,ksub提供了修补boot的cli可以直接使用,这样只需要一个ksud和一个magiskboot外加一个需要修补的boot文件就行了 ksud和magiskboot都可以从apk中提取出来,然后push到手机,然后执行ksud的patch命令就行了

但是这样的话,为什么不直接用ksu manager修补呢?

主要目标是完全离机修补镜像,不太能够指望手机环境。为了这个还特地实现了magiskboot,否则没法在loong64下正常运行。

感谢你提供的思路!

完全离机那就只能下载ko文件来修补了

13584452567 commented 3 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

好的,感谢你的回复。那我这里准备直接放弃Apk的修补支持了。

给你一个思路,其实boot修补的过程可以通过adb push到手机在/data/local/tmp目录下进行,ksub提供了修补boot的cli可以直接使用,这样只需要一个ksud和一个magiskboot外加一个需要修补的boot文件就行了 ksud和magiskboot都可以从apk中提取出来,然后push到手机,然后执行ksud的patch命令就行了

但是这样的话,为什么不直接用ksu manager修补呢?

主要目标是完全离机修补镜像,不太能够指望手机环境。为了这个还特地实现了magiskboot,否则没法在loong64下正常运行。

感谢你提供的思路!

完全离机那就只能下载ko文件来修补了

不过,可以考虑一下给libksud加一个自解压方法嘛?我或许可以最小化一个qemu环境来运行它进行自解压

TinyHai commented 2 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

好的,感谢你的回复。那我这里准备直接放弃Apk的修补支持了。

给你一个思路,其实boot修补的过程可以通过adb push到手机在/data/local/tmp目录下进行,ksub提供了修补boot的cli可以直接使用,这样只需要一个ksud和一个magiskboot外加一个需要修补的boot文件就行了 ksud和magiskboot都可以从apk中提取出来,然后push到手机,然后执行ksud的patch命令就行了

但是这样的话,为什么不直接用ksu manager修补呢? 主要目标是完全离机修补镜像,不太能够指望手机环境。为了这个还特地实现了magiskboot,否则没法在loong64下正常运行。 感谢你提供的思路!

完全离机那就只能下载ko文件来修补了

不过,可以考虑一下给libksud加一个自解压方法嘛?我或许可以最小化一个qemu环境来运行它进行自解压

既然你都可以做到让它自解压,那为什么不考虑直接在qemu环境里完成patch呢,同样是执行ksud

13584452567 commented 2 hours ago

我大概看了一下rust embed的实现,它是直接将文件内容在编译期以二进制bytes的方式嵌入在静态代码块中,而且这些静态变量也没有导出符号,没法直接读取到。 最简单直接的方式就是给ksub添加ko文件导出方法,而且也需要在linux环境执行才行 感觉还是手动从release下载实在点

好的,感谢你的回复。那我这里准备直接放弃Apk的修补支持了。

给你一个思路,其实boot修补的过程可以通过adb push到手机在/data/local/tmp目录下进行,ksub提供了修补boot的cli可以直接使用,这样只需要一个ksud和一个magiskboot外加一个需要修补的boot文件就行了 ksud和magiskboot都可以从apk中提取出来,然后push到手机,然后执行ksud的patch命令就行了

但是这样的话,为什么不直接用ksu manager修补呢? 主要目标是完全离机修补镜像,不太能够指望手机环境。为了这个还特地实现了magiskboot,否则没法在loong64下正常运行。 感谢你提供的思路!

完全离机那就只能下载ko文件来修补了

不过,可以考虑一下给libksud加一个自解压方法嘛?我或许可以最小化一个qemu环境来运行它进行自解压

既然你都可以做到让它自解压,那为什么不考虑直接在qemu环境里完成patch呢,同样是执行ksud

我懂了,非常感谢你的回复