0x0 前言前段时间在研究安卓的硬件断点实现和原理,本来是想尝试移植到aptach的kpm,但是尝试后发现需要补的结构太多了,有的结构不补只有前向声明的话好像也有问题,比如说用register_user_hw_breakpoint注册的断点后用户层会直接卡死,内核层正常运行。结果补来补去最后发现还不如直接用内核源码去编译ko,遂决定先用着原版的那个内核断点模块。这篇文章记录一下编译的过程和其中遇到的一些问题及解决方法,防止自己下次需要重新配置环境的时候踩坑。0x1 环境准备我只放链接吧,具体怎么配置网上都有很多方法安卓机型:mi11 安卓13 内核5.4.210虚拟机:vm-ware17pro 17.5.2 build-23775571 Ubuntu 22.04.2 LTSmake:GNU Make 4.3交叉编译工具:aarch64-linux-android-4.9-toolchain-master 这个我是在这里下的 https://github.com/Adrilaw/aarch64-linux-android-4.9-toolchain ,或者可以用去官方的这里拉https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/,据说是一定要用安卓拉出来的这个。内核源码:https://github.com/MiCode/Xiaomi ... e/tree/venus-r-oss/rwprocmem33:https://github.com/abcz316/rwPro ... eakpointProcModule/vscode:1.83.10x2 编译及刷入内核模块预编译内核1.在内核源码路径下执行shell 命令:make mrproper清除之前的配置文件。然后在自己手机下找到/proc/config.gz,这个是手机内核编译时的配置文件,解压后放到内核源码路径下,修改名称为.config2.执行 make ARCH=arm64 CROSS_COMPILE=/patch/aarch64-linux-android-4.9-toolchain-master/bin/aarch64-linux-android- menuconfig3.选择Enable loadable module support(选择和取消是y和n建),然后做如下配置,或者直接在config里修改CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y
4.选择General setup->Preemption Model(......)->Preemptible Kernel,或者直接在config里修改CONFIG_PREEMPT=y
5.输入make ARCH=arm64 CROSS_COMPILE=/patch/aarch64-linux-android-4.9-toolchain-master/bin/aarch64-linux-android- prepare,等待执行完成编译内核模块:1.打开ver_control.h,#define MY_LINUX_VERSION_CODE KERNEL_VERSION(x,x,x),这里x,x,x修改成自己的内核版本。这里定义的版本是用于判断是否大于4.14.83,大于时需要引入额外的头文件2.打开makefile,修改两处: 1).KDIR := /你的内核源码路径 2).CROSS_COMPILE=/交叉编译工具路径/bin/aarch64-linux-android-3.cd到rwprocmem33的hwBreakpoointProc目录下,shell命令执行 make,结束后会在当前目录生成ko文件4.输入modinfo xxxxx.ko,可查看当前内核模块的信息,主要观察vermagic,这个待会会用到问题1:接下来就是把ko文件push到手机/data下的任意路径,然后执行shell命令 insmod xxxx.ko,这个时候它提示 insmod: failed to load XXX.ko: Exec format error,用dmesg看内核日志发现他报的是这个错
hwBreakpointProc1: version magic '5.4.61-qgki SMP preempt mod_unload modversions aarch64' should be '5.4.210-qgki-xxxxxxxxxx SMP preempt mod_unload modversions aarch64'
这是因为vermagic不对导致的,修改vermagic的方式在 /内核源码路径/include/linux/vermagic.h。这个VERMAGIC_STRING就是最后合成的VERMAGIC
· 今 日 推 荐 ·
本文内容来自网络,如有侵权请联系删除
原文始发于微信公众号(逆向有你):安卓逆向 -- 单独编译安卓内核断点模块(rwProcMem33的hwBreakPointProcMoudle)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论