试了很多方法,走了很多坑,花了一天之久。方便他人写下了这套方法。
使用到的工具为Android Image Kitchen,这个外国大神很牛,自带WINDOWS,LINUX,MAC,3个系统的版本,一定要用最新的,因为android系统在不断升级,比如里面的kernel,网上版本全是头尾都有,现在我弄的这个MUI10,android9只有尾部有,具体往下看,如何找出尾部,真的是呕心力作,排除若干问题,为你开路。
BL必须解锁,不然是没法操作的,ROOT不用说。BL解锁虽然也很麻烦,这里不多说了。
官网下Android.Image.Kitchen比较卡,要翻墙,我这里放出Android.Image.Kitchen.v3.5-Win32.zip windows的下载地址
一:导出boot.img,这步没什么难的,如果你跟我说adb都不会用,那还是不要往下看了
cd /dev/block/platform/[你的设备目录]/by-name
比如我的目录是/dev/block/platform/soc/c0c4000.sdhci/by-name
ls -l
dd if=/dev/block/mmcblk0p68 of=/data/local/tmp/boot.img
chmod 777 /data/local/tmp/boot.img
然后ADB导出
adb pull /data/local/tmp/boot.img boot.img
二:修改boot.img
解压Android Image Kitchen后,
boot.img放入同一目录下,拖入把boot.img直接拖入unpackimg.bat
文件夹下生成split_img,ramdisk两个新文件夹
在split_img文件下找到boot.img-zImage,这个就是kernel
取出方法很简单它是一个gzip的文件,因为我们是在windows下嘛,
加文件后缀名.gz,我用的2345好压直接拖出,你可以网上找一个gunzip,然后用命令行解压,这个不重要。具体如何确定尾部,后面再说。
然后需要用到二进制编辑神器 010Editor
直接打开解压后的kernel
ctrl+f搜索 选择ASCII搜索 输入TracerPid
把这个%d 对应的十六进制改为 30 09
保存
这里插一个题外话小米开发版ROOT后,debuggable默认就是1,
有的手机debuggable为0,可以在解压后ramdisk文件夹里里default.prop将ro.debuggable改为1
小米开发版的default.prop文件里为system/etc/prop.default,它这是一个链接,也就是手机现在系统文件里这个位置保存着配置文件,只要挂载系统盘,修改重启后,立即生效,并不需要刷boot.img
三:重新打包boot.img-zImage
用android_win_tools工具里的gzip,命令行操作
gzip -n -f -9 boot.img-zImage
体积会小了很多,莫惊慌。但重点来了!!!
根据网上查了一堆资料,耗时若干。gz最后四位是某些长度的一个CRC校验,如果我们不改变文件大小的话,理论上来说,最后四位应该是一样的(当然是指的同样的文件),我们就靠这个来确定kernel里gz部分文件的尾巴在哪。
010Editor打开压缩好的boot.img-zImage.gz,查看文件结尾,我的文件结尾是0800B302
复制出来,010Editor打开原始版boot.img-zImage,十六机制搜索0800B302。
复制我们刚才压缩后的boot.img-zImage.gz里所有数据把02结尾之前包括02全部粘贴掉
保存
把这个新生成的文件覆盖掉split_img/boot.img-zImage
四:重新打包boot.img
点击repackimg.bat
会生成一个image-new.img文件,移动到adb目录下
五:刷入boot-new.img
小米手机嘛得用小米自带的miflash_unlock(我这里是3.3.1212.33版)里的fastboot(这里不一定,我windows10系统,android studio自带的无法刷入,同时也无法使用他们几年开发的miflash_unlock,所以这一步我是在win7下操作成功)
关机后,关机键和下键一起按,进入fastboot模式
fastboot flash boot image-new.img
六:开机成功
深夜1:26开机成功,我不多说什么,程序员,不就享受这一刻嘛?最后再来测试一下TracerPid是否为0
开着ida pro调试的情况下 TracerPid为0,完结。已是凌晨两点。累