op7t
oneplus 7t 自定义内核, 主要目的用于内核层逆向
使用github ci
https://github.com/yhnu/op7t
目前已经使用github ci进行自动化构建, 欢迎fork and star
手机环境
a. oneplus 7t
b. 对应Android版本为Hydrogen OS 10.0.7.HD65
c. 对应版本全量包
1 | OnePlus7THydrogen_14.H. 09_OTA_009_all_2001030048_d935aae55ac_1007 . zip / / 一加手机论坛下载
|
Linux编译环境
- 操作系统ubuntu20
1 2 3 4 5 | ➜ / share cat / etc / lsb - release
DISTRIB_ID = Ubuntu
DISTRIB_RELEASE = 20.04
DISTRIB_CODENAME = focal
DISTRIB_DESCRIPTION = "Ubuntu 20.04 LTS"
|
- 依赖安装
1 2 3 4 5 | sudo apt - get install git - core gnupg flex bison build - essential zip curl zlib1g - dev gcc - multilib g + + - multilib libc6 - dev - i386 libncurses5 - dev lib32ncurses5 - dev x11proto - core - dev libx11 - dev lib32z1 - dev libgl1 - mesa - dev libxml2 - utils xsltproc unzip fontconfig
sudo apt - get install libssl - dev
sudo apt - get install dos2unix
sudo apt - get install libncurses5
|
- 编译依赖
百度网盘整个工程包括编译链
链接: https://pan.baidu.com/s/1RQaPSjLPNX99XBVCCAcoZA 提取码: bbki 复制这段内容后打开百度网盘手机App,操作更方便哦
1 2 3 4 | cd / share
git clone https: / / gitee.com / yhnu / op7t.git
cd / share / op7t / buildtool
just c
|
- 编译源码
为了简单方便及稳定,我们基于第三方内核进行修改, https://github.com/engstk/op7/tree/r70
1 2 3 4 5 6 | cd / share / op7t / blu7t
just c
source env.config
source proxy.config
just make
just j16
|
- 打包image
boot.img提取
1 2 3 4 | curl - L - O https: / / github.com / yhnu / op7t / releases / download / v1. 0 / payload_dumper - win64. zip
curl - L - O https: / / otafsc.h2os.com / patch / CHN / OnePlus7THydrogen / OnePlus7THydrogen_14.H. 09_009_2001030048 / OnePlus7THydrogen_14.H. 09_OTA_009_all_2001030048_d935aae55ac . zip
unzip - q OnePlus7THydrogen_14.H. 09_009_2001030048 / OnePlus7THydrogen_14.H. 09_OTA_009_all_2001030048_d935aae55ac . zip
|
拯救OnePlus7t
开发的路上难免磕磕碰碰, 手机就启动不了, 做好防身技能
1 2 3 4 5 6 7 | curl - L - O https: / / otafsc.h2os.com / patch / CHN / OnePlus7THydrogen / OnePlus7THydrogen_14.H. 09_009_2001030048 / OnePlus7THydrogen_14.H. 09_OTA_009_all_2001030048_d935aae55ac . zip
curl - L - O https: / / github.com / yhnu / op7t / releases / download / v1. 0 / recovery - oneplus7t - 3.4 . 2 - 10.0 - b26.img
fastboot set_active a
fastboot erase recovery
fastboot.exe flash recovery recovery - oneplus7t - 3.4 . 2 - 10.0 - b26.img
fastboot.exe reboot recovery
adb sideload F:\F2021 - 07 \one7t_kernel\OnePlus7THydrogen_14.H. 09_OTA_009_all_2001030048_d935aae55ac . zip
|
开发记录
2021年9月7日 14:33:03
a. 修改内核源码绕过反调试检测
参考文章:
安卓10源码学习开发定制(6)修改内核源码绕过反调试检测
2021年9月10日 08:56:45
a. 编写hellomod模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | MODULE_NAME : = hello
ifneq ($(KERNELRELEASE),)
obj - m : = hello.o
else
CROSS_COMPILE : = / share / op7t / buildtool / aarch64 - linux - android - 4.9 - uber - master / bin / aarch64 - linux - android -
PWD : = $(shell pwd)
KDIR : = / share / op7t / blu7t / op7 - r70 / out
modules:
make - C $(KDIR) REAL_CC = $(GITHUB_WORKSPACE) / buildtool / toolchains / llvm - Snapdragon_LLVM_for_Android_8. 0 / prebuilt / linux - x86_64 / bin / clang CROSS_COMPILE = / share / op7t / buildtool / aarch64 - linux - android - 4.9 - uber - master / bin / aarch64 - linux - android - CLANG_TRIPLE = aarch64 - linux - gnu - ARCH = arm64 M = $(PWD) modules CONFIG_MODULE_UNLOAD = y CONFIG_RETPOLINE = y
clean:
rm - rf * .o * .order * .symvers * .ko * .mod * . * .cmd . * . * .cmd . * . * . * .cmd
@rm - fr .tmp_versions Module.symvers modules.order
endif
|
b. 注意:
因为内核编译使用的是Clang编译, 因此对应module的编译也需要使用Clang编译
module的加载过程
clang交叉编译
1 2 3 4 5 6 7 | triple 的一般格式为<arch><sub> - <vendor> - <sys> - <abi>,其中:
arch = x86_64、i386、arm、thumb、mips等。
sub = v5, v6m, v7a, v7m等。
vendor = pc, apple, nvidia, ibm,等。
sys = none, linux, win32, darwin, cuda等。
abi = eabi, gnu, android, macho, elf等。
|
2021年9月10日 16:33:14
a. linux设备驱动开发学习经典教程
https://lwn.net/Kernel/LDD3/
2021年9月11日 21:14:44
查看KernelLog
1 | adb logcat - b kernel,default
|
2021年9月17日 09:01:09
krhook模块开发
https://github.com/yhnu/op7t/tree/dev/krhook
参考链接:
https://bbs.pediy.com/thread-267004.htm
现在Android 手机大都使用了 MSM 平台 和 kernel, 高通下面的一个patch 引入了 kernel 代码段内存RO 属性. 因此需要做一些修改
2021年9月17日 14:28:50
友人提醒可以直接通过下面的编译器进行编译,不用改代码Makefile
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
2021年9月17日 16:28:58
/sys/fs/pstore 内核崩溃日志信息存放的位置
linux使用lwp机制, 导致task_struct的pid在线程中是线程id,需要使用tgid,或者使用uid进行识别
http://www.opensourceforu.com/2011/08/light-weight-processes-dissecting-linux-threads/
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课