华为内核重新编译踩坑记
# 华为内核重新编译踩坑记前几天有朋友找我帮他跟一个加密,由于js太乱了,想从app入手,于是开始frida脱壳,结果发现报错
`Failed to attach: remote_write PTRACE_POKEDATA head failed: 5`
查询后发现是华为内核没有开启Ptrace,正好看到了坛里的一篇文章[华为手机重新编译内核开启Ptrace](https://www.52pojie.cn/thread-1105067-1-1.html),开始照着他的步骤开始编译,发现了很多坑点,在这里记录一下。
## 1.内核编译
"然后按照 Code_Opensource\README_Kernel.txt 文件里提示进行内核编译。"
这里的说法没有说清,可能大佬自己感觉不是难点,我参考了另一篇文章(https://www.freebuf.com/articles/terminal/229624.html),开始编译。从这里噩梦开始。
### 1.1.gcc报错
我按照文章说的一步步开始,果然发生了这个错误
![](https://cdn2.hemacdn.com/img/272ed26a0b929c394d523ed7830ad13b.png)
解决后又出现了`aarch64-linux-android-gcc not found`,
我找了很多资料没有找到,后来发现bin目录下确实没有gcc这个文件,我又去
(https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/)
看了一眼后发现
![](https://cdn2.hemacdn.com/img/45230ff234cebbae7aa8a934f06cd5ad.png)
好吧,最新的已经移除了gcc,原谅我英语不好,没看仔细,于是重新下载了8.0版本的aarch64-linux-android-gcc,终于这个报错解决了。
### 1.2. recipe for target 'xxx' failed
这个错误
`Makefile:152: recipe for target 'sub-make' failed`
是再次编译出现的,因为确实对这块编译没有做过,就再次查找资料,原因是make版本太高的问题,我的是ubuntu18 make4.1,网上说make降级到3.81就行。
### 1.3. make降级编译失败
从make4.1降级到3.81再次出现错误
`undefined reference to '__alloca' `
在[国外某站](http://gnu-make.2324884.n4.nabble.com/undefined-reference-to-alloca-td18308.html)发现了解决办法,把
`# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION`
改成
`# if _GNU_GLOB_INTERFACE_VERSION >= GLOB_INTERFACE_VERSION`
顺利编译成功make3.81。
### 1.4. error: linux/netfilter/xt_mark.h: No such file or directory
终于make降级成功,再次开始编译。又遇到了
`error: linux/netfilter/xt_mark.h: No such file or directory`
我找了很多资料也没解决。
(https://my.oschina.net/noke/blog/1506862)这里有一个解决办法,因为华为的内核目录不同,我完全按照他的解决办法没有解决成功。将`/usr/include/linux/netfilter/xt_mark.h 复制到了kernel/include/linux/netfilter/xt_mark.h`
可惜还是各种报错,一度想要放弃。
**很幸运的是**,我重新看了一下`external/iptables/include/linux/netfilter/`这个目录里面的xt_MARK.h,发现其实是存在这个文件的,**但是由于我当时是从win下修改好内核源码的配置,重新打包发给ubuntu的**,因为win的大小写不敏感,导致`xt_mark.h`和`xt_MARK.h`不能同时在一个目录,`xt_mark.h`被重命名为了`xt_mark(1).h`。
知道了问题就好解决了,于是我重新在ubuntu里下载了内核源码,修改配置,果然,这次编译很顺利。
## 2.打包刷入手机
后面就是跟着[华为手机重新编译内核开启Ptrace](https://www.52pojie.cn/thread-1105067-1-1.html)修改sh的配置了,并没有遇到什么困难。成功刷入手机,成功运行frida,脱壳成功。
## 总结
由于是一篇回忆的记录,之前并没有截图,费了一天多才搞好,后面想一想确实不是很难,最后一步差点进行不下去,直接在ubuntu下执行,应该会很顺利。遇到的几个坑在网上只找到了一些只言片语,总结一下,希望对后来人有所帮助。https://cdn.jsdelivr.net/gh/hishis/forum-master/public/images/patch.gif nws0507 发表于 2020-6-27 09:31
你要看看是不是配置修改错了正常应该不会出现没开启的情况
感谢回复!!!
我按照”华为手机重新编译内核开启Ptrace“的教程正确编译了内核,但是后面将内核打包的过程我没有搞明白。我将pack_kernerimage_cmd.sh这个文件夹的值全部更改打包后生成的镜像文件刷入手机,手机就无法开机。如果将“Kernel Hack实战:修改并编译手机内核源码对抗反调试”这个教程后面的方式生成的镜像文件刷入手机,手机可以开机,但是开启ptrace失败。
有几个问题想请教一下
1.请问您是用哪种方式生成的镜像文件呢?
2.”华为手机重新编译内核开启Ptrace“教程中的kernel文件具体指的是哪个?我找不到相同的,我只在手机里找到像kernel_a.img这种类似的镜像文件。
3.是不是不同的华为手机型号pack_kernerimage_cmd.sh文件的内容也不相同呢?还是说我下错了手机源码(我的手机是mate10pro emui8.0 已解锁刷了面具)
4.请问是不是将生成的镜像文件刷入手机的kernel分区呢?
仓鼠大大 发表于 2020-6-28 00:53
感谢回复!!!
我按照”华为手机重新编译内核开启Ptrace“的教程正确编译了内核,但是后面将内核打包的 ...
1.我是自己修改的sh的参数自己打包的。后续步骤就是参考的华为手机重新编译内核开启Ptrace这个文章。
2.你说的kernel我也是按照他说的找到的就是/dev/block/platform/hi_mci.0/by-name这个目录。这个文件解包出来的东西就是sh所需的参数。
3.sh文件应该都是相同的,可能只是里面参数的值是不同的。只是猜想,我的安卓只是也很匮乏。
4.应该这样就能刷入了。fastboot flash kernel kernel.img
ptrace是否成功启用,因为我是要用frida,正常的ida动态调试貌似也需要。我是通过frida来看成功与否的。你说的无法开机 我感觉是sh文件里的值修改的有问题。你可能要找一下kernel这个文件,我是按照吾爱那篇文章找到的,你可以百度下看看这个文件路径。https://cdn.jsdelivr.net/gh/hishis/forum-master/public/images/patch.gif 不明觉厉,看不懂,好厉害 好厉害好厉害 壮士,加油,我学习下 距离还是很大自省 看着还可以,虽然没学过安卓,做嵌入式开发的,还能看懂 楼主非常牛。好文章,谢谢。 国外某站方便透露不{:1_937:}
不明觉厉!!