美文网首页
修改手机的ro.debuggable配置

修改手机的ro.debuggable配置

作者: difcareer | 来源:发表于2018-09-12 17:15 被阅读968次

    我们自己编译的源码刷机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]

    相关文章

      网友评论

          本文标题:修改手机的ro.debuggable配置

          本文链接:https://www.haomeiwen.com/subject/svpvgftx.html