修改手機的ro.debuggable配置

weixin_34236497發表於2018-09-12

我們自己編譯的原始碼刷機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)

得到解壓結果:


1784193-5565730729570d83.png
image.png

1784193-04791eed59b59326.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]

1784193-66da70aad5576fc4.png

相關文章