首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >修改手机的ro.debuggable配置0x01:获取boot.img0x02:修改boot.img0x03:boot.img相关0x04:变砖后的自救

修改手机的ro.debuggable配置0x01:获取boot.img0x02:修改boot.img0x03:boot.img相关0x04:变砖后的自救

作者头像
用户2930595
发布2018-10-09 12:16:48
2.4K0
发布2018-10-09 12:16:48
举报

我们自己编译的源码刷机ro.debuggable就是为1,这个时候所有的进程都可以远程调试。但是自己编译的源码里面没有GooglePlay,有些应用的部分功能又依赖于GooglePlay。那怎么办呢?

有人发布过工具,通过ptrace方式,动态修改了内存值,将ro.debuggable改为1,那工具在高版本上似乎没有适配不起作用,而且是临时解决方案,重启手机就失效了。

下面说一种通过刷机永久解决方案。

虽然说刷机有风险,但是你要是按照正确的姿势来,也没有那么多风险(注意看完全文再实践)

环境: nexus6p 刷了Google发布的7.1.2(N2G48C)OTA,其他版本也没什么问题。

ro.debuggable的配置位于/default.prop, /default.prop又来源于手机每次启动时boot.img中ramdisk的挂载,所以想要直接通过修改/default.prop是不可行的(被覆盖)。 只有修改boot.img中的内容才可以。

0x01:获取boot.img

我本地就有OTA文件,所以可以直接从里面解压出boot.img,如果没有OTA文件,那就是只能从手机中导出boot.img。

如何导出?

  1. 首先,手机得root,才能有权限访问,如何root,参考:nexus5 android5.0.1 使用TWRP Recovery安装supersu,其他版本Root搜索 版本+twrp 即可找到解决方案。
  2. 手机root后,执行adb root让adb 运行在root权限下,假如之后的adb shell没有进入root的shell环境,说明没成功,此时,可以通过安装adbd-insecure来解决,它通过对adbd的一些修改,让adbd能运行在root权限下。
  3. 查找boot.img位置, 在/dev/block子目录下通过by-name查看,手机不同,具体路径可能会不同。
#  ls -al /dev/block/platform/soc.0/f9824900.sdhci/by-name/
total 0
drwxr-xr-x 2 root root  920 1970-03-19 13:19 .
drwxr-xr-x 4 root root 1000 1970-03-19 13:19 ..
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 DDR -> /dev/block/mmcblk0p8
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 aboot -> /dev/block/mmcblk0p10
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 abootbak -> /dev/block/mmcblk0p16
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 apdp -> /dev/block/mmcblk0p22
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 boot -> /dev/block/mmcblk0p34
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 cache -> /dev/block/mmcblk0p38
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 cmnlib -> /dev/block/mmcblk0p25
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 cmnlibbak -> /dev/block/mmcblk0p27
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 devinfo -> /dev/block/mmcblk0p17
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 dpo -> /dev/block/mmcblk0p28
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 frp -> /dev/block/mmcblk0p41
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 fsc -> /dev/block/mmcblk0p29
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 fsg -> /dev/block/mmcblk0p18
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 hyp -> /dev/block/mmcblk0p6
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 hypbak -> /dev/block/mmcblk0p15
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 keymaster -> /dev/block/mmcblk0p24
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 keymasterbak -> /dev/block/mmcblk0p26
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 keystore -> /dev/block/mmcblk0p40
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 limits -> /dev/block/mmcblk0p19
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 metadata -> /dev/block/mmcblk0p33
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 misc -> /dev/block/mmcblk0p39
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 modem -> /dev/block/mmcblk0p1
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 modemst1 -> /dev/block/mmcblk0p20
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 modemst2 -> /dev/block/mmcblk0p21
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 msadp -> /dev/block/mmcblk0p23
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 oem -> /dev/block/mmcblk0p36
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 oeminfo -> /dev/block/mmcblk0p31
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 persist -> /dev/block/mmcblk0p32
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 persistent -> /dev/block/mmcblk0p42
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 pmic -> /dev/block/mmcblk0p7
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 pmicbak -> /dev/block/mmcblk0p11
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 recovery -> /dev/block/mmcblk0p35
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 rpm -> /dev/block/mmcblk0p5
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 rpmbak -> /dev/block/mmcblk0p14
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 sbl1 -> /dev/block/mmcblk0p2
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 sbl1bak -> /dev/block/mmcblk0p12
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 sdi -> /dev/block/mmcblk0p3
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 sec -> /dev/block/mmcblk0p9
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 ssd -> /dev/block/mmcblk0p30
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 system -> /dev/block/mmcblk0p43
lrwxrwxrwx 1 root root   20 1970-03-19 13:19 tz -> /dev/block/mmcblk0p4
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 tzbak -> /dev/block/mmcblk0p13
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 userdata -> /dev/block/mmcblk0p44
lrwxrwxrwx 1 root root   21 1970-03-19 13:19 vendor -> /dev/block/mmcblk0p37

可以看到boot -> /dev/block/mmcblk0p34

  1. adb pull /dev/block/mmcblk0p34 boot.img,这一步就需要adbd运行在root下才行,如果不想弄adbd,也可以在root下,将这个文件复制到sdcard再pull。

注意:一定要保存好没有修改的boot.img,用于变砖后的自救。

0x02:修改boot.img

之前我都是通过一些脚本进行修改,最近发现

Image Kitchen for Android这个app,将解压、修改、打包放到了手机上,更方便,于是推荐这种方式。

  1. adb push boot.img /sdcard/
  2. 参考修改default.prop debuggable用于真机调试的方法一文做修改,得到image-new.img。
  3. adb pull /sdcard/image-new.img
  4. adb reboot bootloader
  5. fastboot flash boot image-new.img
  6. fastboot reboot

搞定。

0x03:boot.img相关

虽然Image Kitchen for Android帮我们做了解压,修改,打包的事情,但是我们也可以进一步了解一下boot.img,通过[TOOL] Boot.img tools [unpack, repack, ramdisk]获取到相关工具。

  1. 查看boot.img信息
$ ./boot_info boot.img
Page size: 4096 (0x00001000)
Kernel size: 11161941 (0x00aa5155)
Ramdisk size: 1508718 (0x0017056e)
Second size: 0 (0x00000000)
Board name:
Command line: 'androidboot.hardware=angler androidboot.console=ttyHSL0 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 boot_cpus=0-3 no_console_suspend buildvariant=user'
Base address: 31457024 (0x01dfff00)

其实boot.img 就是linux kernel + ramdisk。

  1. 解压boot.img
$ ./split_boot boot.img
Page size: 4096 (0x00001000)
Kernel size: 11161941 (0x00aa5155)
Ramdisk size: 1508718 (0x0017056e)
Second size: 0 (0x00000000)
Board name:
Command line: 'androidboot.hardware=angler androidboot.console=ttyHSL0 msm_rt                                  b.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 boot_cpus=0-3 no_co                                  nsole_suspend buildvariant=user'
Base address: (0x01dfff00)

得到解压结果:

image.png

image.png

可以看到手机的根目录就是根据ramdisk挂载的。其中有我们的default.prop。

  1. 修改及重打包 这个工具集里面还有其他的工具,里面就有打包。注意在重打包的时候,一定要严格填写我们在1中看到的信息,这样打出来的boot.img才可以正常使用。

0x04:变砖后的自救

假如你刷入修改后的boot.img,手机起不来了,别急,你可以将没有修改的boot.img刷回去就行了。

文中提到的工具及apk: https://github.com/difcareer/AndroidImgTool

参考文档:

修改default.prop debuggable用于真机调试的方法

[TOOL] Boot.img tools [unpack, repack, ramdisk]

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01:获取boot.img
    • 注意:一定要保存好没有修改的boot.img,用于变砖后的自救。
    • 0x02:修改boot.img
    • 0x03:boot.img相关
    • 0x04:变砖后的自救
    相关产品与服务
    远程调试
    远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档