首页
社区
课程
招聘
[原创]一加7t自定义内核编译, 以及android10, syscalltable hook实现
发表于: 2021-9-23 08:12 6315

[原创]一加7t自定义内核编译, 以及android10, syscalltable hook实现

2021-9-23 08:12
6315

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编译环境

  1. 操作系统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. 依赖安装
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
  1. 编译依赖

百度网盘整个工程包括编译链

 

链接: 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
  1. 编译源码

为了简单方便及稳定,我们基于第三方内核进行修改, 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
  1. 打包image
1
just 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
# 然后参考payload_dumper的使用说明即可

拯救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 #is a or b
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
# Code wrire     : yhnu
# code date     : 2021年9月10日 09:46:05
# e-mail    : buutuud@gmail.com
#
# THis Makefile is a demo only for ARM-architecture
#
 
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-
    #CC = CROSS_COMPILE   
    #KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    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

 

3cb1209765988e17c4de9b078a07eea

 

2021年9月17日 16:28:58

  1. /sys/fs/pstore 内核崩溃日志信息存放的位置

  2. 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直播授课

最后于 2021-9-23 08:21 被github_yhnu编辑 ,原因: fix img
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//