修改手機的ro.debuggable配置
我們自己編譯的原始碼刷機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。
如何匯出?
首先,手機得root,才能有許可權訪問,如何root,參考:nexus5 android5.0.1 使用TWRP Recovery安裝supersu,其他版本Root搜尋 版本+twrp 即可找到解決方案。
手機root後,執行
adb root
讓adb 執行在root許可權下,假如之後的adb shell
沒有進入root的shell環境,說明沒成功,此時,可以通過安裝adbd-insecure來解決,它通過對adbd的一些修改,讓adbd能執行在root許可權下。查詢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
。
-
adb pull /dev/block/mmcblk0p34 boot.img
,這一步就需要adbd執行在root下才行,如果不想弄adbd,也可以在root下,將這個檔案複製到sdcard再pull。
注意:一定要儲存好沒有修改的boot.img,用於變磚後的自救。
0x02:修改boot.img
之前我都是通過一些指令碼進行修改,最近發現
Image Kitchen for Android這個app,將解壓、修改、打包放到了手機上,更方便,於是推薦這種方式。
adb push boot.img /sdcard/
參考修改default.prop debuggable用於真機除錯的方法一文做修改,得到image-new.img。
adb pull /sdcard/image-new.img
adb reboot bootloader
fastboot flash boot image-new.img
fastboot reboot
搞定。
0x03:boot.img相關
雖然Image Kitchen for Android幫我們做了解壓,修改,打包的事情,但是我們也可以進一步瞭解一下boot.img,通過[TOOL] Boot.img tools [unpack, repack, ramdisk]獲取到相關工具。
- 檢視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。
- 解壓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)
得到解壓結果:
可以看到手機的根目錄就是根據ramdisk掛載的。其中有我們的default.prop。
- 修改及重打包
這個工具集裡面還有其他的工具,裡面就有打包。注意在重打包的時候,一定要嚴格填寫我們在1中看到的資訊,這樣打出來的boot.img才可以正常使用。
0x04:變磚後的自救
假如你刷入修改後的boot.img,手機起不來了,別急,你可以將沒有修改的boot.img刷回去就行了。
文中提到的工具及apk: https://github.com/difcareer/AndroidImgTool
參考文件:
修改default.prop debuggable用於真機除錯的方法
[TOOL] Boot.img tools [unpack, repack, ramdisk]
相關文章
- 織夢手機網站模板修改,如何在織夢CMS中修改手機網站模板網站
- feignClient中修改ribbon的配置client
- python 修改jenkins的配置檔案PythonJenkins
- 修改Maven配置項Maven
- 買手機就選配置好的 這 4 款手機用三年都不用換機
- helm部署的服務如何修改配置
- laravel 修改器 手動修改->getRawOriginal()Laravel
- Centos修改網路配置CentOS
- Git修改配置檔案Git
- apache虛擬機器配置步驟和修改訪問埠Apache虛擬機
- linux主機名的修改Linux
- 4.2.9 修改元件的Oracle重啟配置元件Oracle
- 手錶Android Wear工程執行在手機上的配置方案Android
- Tomcat修改記憶體配置Tomcat記憶體
- GG修改器修改美食大戰老鼠手遊
- ZeroTier-One配置moon修改埠
- Jar 包執行時修改配置JAR
- 手機換IP的方法--手機PPTPpptp
- 不想eject,還咋修改create-react-app的配置?ReactAPP
- centos7 系統必要的配置(設定網路服務自啟,修改主機名)CentOS
- shell動態修改yml配置例項
- WebStrom 安裝教程_配置檔案修改Web
- hyperf 框架動態修改或追加配置框架
- Linux IP地址修改與配置問題Linux
- ordebug 手動修改Oracle sga scnOracle
- 修改帝國cms手機端模板位於 /e/api/template/phone 目錄API
- Spartacus base-url 訪問 - CSR 端需要修改的配置
- 修改Nginx配置返回指定content-type的方法詳解Nginx
- 還在run eject 修改create-react-app中的配置?ReactAPP
- 配置Charles 設定手機代理並允許https請求HTTP
- 手動配置ip
- win10增加硬碟後修改光碟機磁碟機代號的方法_win10怎麼修改光碟機磁碟機代號Win10硬碟
- 透過命令列修改nacos配置檔案命令列
- ubuntu修改mac地址及配置靜態ipUbuntuMac
- GitLab修改配置後nginx無法啟動GitlabNginx
- [20190104]bbed手動修改資料.txt
- php Nginx修改上傳視訊或者大圖片的配置PHPNginx
- 解決samba只讀,但無修改許可權的配置Samba