华为内核重新编译踩坑记
2020-05-23 11:36:42 Author: bbs.pediy.com(查看原文) 阅读量:539 收藏

前几天有朋友找我帮他跟一个加密,由于js太乱了,想从app入手,于是打算用frida脱壳,结果发现报错
Failed to attach: remote_write PTRACE_POKEDATA head failed: 5
查询后发现是华为内核没有开启Ptrace,正好看到了吾爱的一篇文章华为手机重新编译内核开启Ptrace,开始照着他的步骤开始编译,发现了很多坑点,在这里记录一下。

1.内核编译

"然后按照 Code_Opensource\README_Kernel.txt 文件里提示进行内核编译。"
这里的说法没有说清,可能大佬自己感觉不是难点,我参考了另一篇文章Kernel Hack实战:修改并编译手机内核源码对抗反调试 ,开始编译。从这里噩梦开始。

1.1.gcc报错

我按照文章说的一步步开始,果然发生了这个错误

解决后又出现了aarch64-linux-android-gcc not found
我找了很多资料没有找到,后来发现bin目录下确实没有gcc这个文件,我又去
https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/
看了一眼后发现

好吧,最新的已经移除了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'
国外某站发现了解决办法,把
# 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
我找了很多资料也没解决。
Ubuntu12.04编译android4.3源码问题集锦这里有一个解决办法,因为华为的内核目录不同,我完全按照他的解决办法没有解决成功。将/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.hxt_MARK.h不能同时在一个目录,xt_mark.h被重命名为了xt_mark(1).h
知道了问题就好解决了,于是我重新在ubuntu里下载了内核源码,修改配置,果然,这次编译很顺利。

2.打包刷入手机

后面就是跟着华为手机重新编译内核开启Ptrace修改sh的配置了,并没有遇到什么困难。成功刷入手机,成功运行frida,脱壳成功。

总结

由于是一篇回忆的记录,之前并没有截图,费了一天多才搞好,后面想一想确实不是很难,最后一步差点进行不下去,直接在ubuntu下执行,应该会很顺利。遇到的几个坑在网上只找到了一些只言片语,总结一下,希望对后来人有所帮助。

[培训]科锐逆向工程师培训班38期--远程教学预课班将于 2020年5月28日 正式开班!

最后于 4天前 被nws0507编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-259586.htm
如有侵权请联系:admin#unsafe.sh