吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1754|回复: 17
上一主题 下一主题
收起左侧

[Android 原创] 单独编译安卓内核断点模块(rwProcMem33的hwBreakPointProcMoudle)

  [复制链接]
跳转到指定楼层
楼主
jbczzz 发表于 2024-12-13 17:01 回帖奖励
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 LTS
make: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.1
0x2 编译及刷入内核模块
预编译内核
1.在内核源码路径下执行shell 命令:make mrproper清除之前的配置文件。然后在自己手机下找到/proc/config.gz,这个是手机内核编译时的配置文件,解压后放到内核源码路径下,修改名称为.config
2.执行 make ARCH=arm64 CROSS_COMPILE=/patch/aarch64-linux-android-4.9-toolchain-master/bin/aarch64-linux-android- menuconfig
3.选择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看内核日志发现他报的是这个错
[Asm] 纯文本查看 复制代码
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

那个UTS_RELEASE定义在 /内核源码目录/include/linux/utsrelease.h,这个文件是在make prepare之后才会生成的,直接在这个文件里修改保存就行。修改完之后进入rwprocmem33的hwBreakpoointProc目录下先make clean,然后再make一次。make成功后,用modinfo再看一次vermagic,确认后之前报错提示的那个一致就行,至此就可以成功加载那个ko文件了。

问题2:
过程中他一直报这个错warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement],还有一些跟这个C90标准相关的警告,而且他会把警告当成错误在make语句中添加编译选项都没用。查看报错,他是在/内核源码/scripts/gcc-wrapper.py报的,解决方法为注释掉run_gcc()里的interpret_warning(line)
0x3 小结
这篇文章大概记录了一下单独编译安卓内核模块的流程,其实中间还遇到了很多奇葩的问题,比如说因为中间换了几次交叉编译工具,导致内核的编译标准跟模块的不一致,导致编译失败等。因为是上周完成的所以有些问题不记得也无法复现了,后续想起来或者有人问的话了再更新吧。

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ioyr5995 + 1 + 1 我很赞同!
hxw0204 + 1 热心回复!
debug_cat + 2 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
debug_cat 发表于 2024-12-13 17:58
jbczzz 发表于 2024-12-13 17:55
rw的位置没关系,只要makefile里的KDIR是内核源码的路径就行

我之前编译时候是p3内核,一直用Google提供的那个工具编译的,然后把rw放外面,kdir的路径就不知道怎么写,这个路径是写out目录吗,比如上面的内核代码,kdir是写内核根目录,还是编译之后产物的某个目录呢。
推荐
debug_cat 发表于 2024-12-13 17:52
大佬现在编译rw是把代码放到内核代码driver中编译的吗,还是放在内核代码之外的目录编译的呢。
4#
qi1990 发表于 2024-12-13 17:12
5#
 楼主| jbczzz 发表于 2024-12-13 17:55 |楼主
debug_cat 发表于 2024-12-13 17:52
大佬现在编译rw是把代码放到内核代码driver中编译的吗,还是放在内核代码之外的目录编译的呢。

rw的位置没关系,只要makefile里的KDIR是内核源码的路径就行
6#
 楼主| jbczzz 发表于 2024-12-13 18:06 |楼主
debug_cat 发表于 2024-12-13 17:58
我之前编译时候是p3内核,一直用Google提供的那个工具编译的,然后把rw放外面,kdir的路径就不知道怎么写 ...

那个KDIR直接写拉的内核源码的根目录就行
头像被屏蔽
7#
pomxion 发表于 2024-12-13 18:16
提示: 作者被禁止或删除 内容自动屏蔽
8#
xixicoco 发表于 2024-12-13 19:45
这个硬件断点很厉害
9#
hanbazhen 发表于 2024-12-13 20:10
楼主安卓10内核能发个最新的吗?锤子R2的webview
10#
Ok166 发表于 2024-12-13 21:33
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-5 10:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表