Android手机boot.img修改绕过TracerPid检测、打开系统调试、添加root

原文链接:https://juejin.im/post/5b1bb43b5188257d5903045b

0. 准备

设备 : nexus 5

官方刷机包:hammerhead-ktu84p-factory-1f5f26b1(详情参考https://blog.csdn.net/u012417380/article/details/72843185,我们需要把boot.img提取出来)

su文件:(从superSU中提取)

1. boot.img解包

git clone http://github.com/xiaolu/mkbootimg_tools.git
cd mkbootimg_tools
git reset --hard 07b305461d03a5b9f60cea0a969fec16f6e8270a
复制代码

然后把原刷机包中的boot.img拖出来解压

./mkboot boot.img boot
复制代码

2. 添加root

然后到boot/ramdisk下新建bin文件夹,把su文件(假设我su文件在/media目录下)放进去

cd boot/ramdisk
mkdir bin
cd bin
cp /media/su .
复制代码

修改init.environ.rc文件,把/bin添加到PATH环境变量(别忘了linux的环境变量之间是用:号分隔)

修改init.rc文件,在最末尾添加

service daemonsu /bin/su --auto-daemon
    class main
    user root
    group root
    seclabel u:r:init:s0
复制代码

搜索这个文件的内容"mount rootfs rootfs / rw remount",在这一行之前添加

(vim快捷键说明:按G可快速跳转到文档末尾,按?后接要搜索的字符串可进行检索)

修改好后,:wq保存。

3. 打开系统调试

修改default.prop文件

其中,

ro.secure=0开启root权限,默认是1

ro.debuggable=1是打开调试开关的,默认是0

ro.adb-secure=0是关闭adb鉴权,默认是1

保存退出

同理我们还可以把android_server放到/bin目录下,然后刷机之后就可以在/bin下找到了

4. 逆向修改kernel,使TracerPid保持为0

把kernel拷贝出来

用010editor打开,ctrl+F搜索1f8b0800,然后把前面的都删掉(不包括1f8b0800,1f8b0800是gz的标志,同样的ramdisk也可以解开),另存为kernel_new.gz,原文件kernel之后还要用,不要覆盖掉

然后gzip -d kernel_new.gz,得到kernel_new文件,用IDA打开

注意设置

然后Shift+F12把String窗口打开,ctrl+F搜索TracerPid

双击后使用xrefs功能找到调用位置

F5,获取sub_C02BA04C的伪代码

可以看到LABEL_47是TracerPid进行判断赋值的地方,我们要更改这里的代码,使其永远返回0

tab键还原成汇编形式

只要把MOVEQ R10,R0改成将0赋给R10MOV R10,#0(00 A0 A0 E3),BEQ loc_C02BA178判断改为直接跳转B loc_C02BA178(EC FE FF EA),

直接使用Edit -> Patch program -> Change byte

修改完后点击Edit -> Patch program -> Apply patches to input file

重新压缩

gzip -n -f -9 kernel_new  
复制代码

然后替换回去kernel文件,首先用010editor打开源文件kernel和kernel_new.gz

kernel中1f8b0800的首地址是0x48b4,大小是0x804120,而kernel_new.gz的大小是0x6ab19d,要确保复制前后kernel的大小一致,因此从0x48b4~0x6afa51(0x48b4+0x6ab19d)将kernel_new.gz替换进去

然后kernel放回mkbootimg_tools/boot文件夹下

5. 重打包&刷机

回到mkbootimg_tools目录下,打包

./mkboot boot new_boot.img
复制代码

然后把新的boot.img放回去image-hammerhead-ktu84p.zip,设备开机则adb reboot bootloader进入bootloader模式,关机则按电源键+音量下键进入rec模式,然后双击运行flash-all.bat

另外如果只需要刷boot.img的可以在bootloader模式下使用fastboot flash boot boot.img

官方的刷机脚本flash-all.bat源码是这样

@ECHO OFF

PATH=%PATH%;"%SYSTEMROOT%\System32"
fastboot flash bootloader bootloader-hammerhead-hhz11k.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot flash radio radio-hammerhead-m8974a-2.0.50.1.16.img
fastboot reboot-bootloader
ping -n 5 127.0.0.1 >nul
fastboot -w update image-hammerhead-ktu84p.zip


echo Press any key to exit...
pause >nul
exit
复制代码

测试成功root,之前放进/bin文件夹下的android_server成功启动

调试功能也成功开启

ida附加看看

6. android_server默认端口修改

同理,用ida打开android_server,String搜索port

利用xrefs,找到printf的地方,看见是R5赋值给的R1

往上找,发现R5赋值的地方,可以自行改值

0x5d8a恰巧等于23946,那么只需要利用patch byte改指令就可以了

参考

https://blog.csdn.net/QQ1084283172/article/details/57086486?locationNum=4&fps=1

展开阅读全文

没有更多推荐了,返回首页