华为内核重新编译踩坑记
前几天有朋友找我帮他跟一个加密,由于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.h 和xt_MARK.h 不能同时在一个目录,xt_mark.h 被重命名为了xt_mark(1).h 。
知道了问题就好解决了,于是我重新在ubuntu里下载了内核源码,修改配置,果然,这次编译很顺利。
2.打包刷入手机
后面就是跟着华为手机重新编译内核开启Ptrace修改sh的配置了,并没有遇到什么困难。成功刷入手机,成功运行frida,脱壳成功。
总结
由于是一篇回忆的记录,之前并没有截图,费了一天多才搞好,后面想一想确实不是很难,最后一步差点进行不下去,直接在ubuntu下执行,应该会很顺利。遇到的几个坑在网上只找到了一些只言片语,总结一下,希望对后来人有所帮助。
|