1. 程式人生 > >通過修改rom包永久獲取root許可權和所有應用除錯功能ro.debuggable

通過修改rom包永久獲取root許可權和所有應用除錯功能ro.debuggable

準備工具:

1. adb

部分安卓機型獲取root許可權比較難,刷supersu卡刷包和各種刷機工具都不見效;

作為一名移動安全工程師,經常需要對各種APK進行除錯,通常除錯APK需要滿足的條件是apk的配置檔案androidmanifest.xml中android:debuggable="true"或者安卓default.prop檔案中的ro.debuggable=1。以往,我們都是先將apk反編譯,然後手動修改Androidmanifest.xml中的android:debuggable然後重新打包簽名,但是隨著梆梆、樂固、360等各種“殼”的出現,手動修改Androidmanifest.xml再重打包的方式已經行不通了。

特別是SELinux機制加入安卓以後,我們想要獲取所需要的許可權變得更加困難。現在有一種一勞永逸的方法,如下。

在使用adb連線手機的情況下,可以看到手機根目錄下有一個default.prop檔案:


直接使用cat default.prop命令檢視內容可以看到ro.secure、ro.adb.secure和ro.debuggable等屬性:


正常情況下,該檔案中的ro.debuggable的值應該是0,表示不可除錯。我已經手動修改為1。ro.secure表示root許可權,如果為0則表示啟用root許可權,1則相反;ro.adb.secure表示adb的root許可權,同樣0表示啟用adb的root許可權,1則相反。

----------------------------------------------

下面開始正式介紹修改這些值的方法。

首先我們看看安卓系統rom包的結構:


安卓系統rom包是一個壓縮檔案,我們可以直接用winrar、7z等工具開啟。如上圖,我們需要改動的就是boot.img,我們將其解壓出來。

修改boot.img需要先將其完全解開,解包boot.img的工具網上有很多,可自行搜尋。再此處我推薦使用bootimg。此工具比較方便且檔案很小。有exe、java、python等各種版本。我使用的是python版本,其他版本使用方法基本相同

為了方便,將bootimg.py與要修改的boot.img放在同一目錄下,首先使用

python bootimg.py --unpack-bootimg
將boot.img解開,可以獲得 kernel 和 ramdisk.gz。


此時,我們還看不到需要修改的default.prop,要修改,我們還要繼續解開ramdisk.gz。使用命令

python bootimg.py --unpack-ramdisk
現在,資料夾中出現了initrd,我們需要的default.prop就在這裡面了。


進入initrd目錄,使用notepad、sublime等工具直接修改,比如我需要開啟所有應用的除錯許可權,我將default.prop中的ro.debuggable修改成了1。如果你是需要開啟root許可權,則將ro.secure的值改為0,要永久開啟adb的root許可權,可將ro.adb.secure修改為0。。。各個引數都可以按照自己的需求修改。(注意只修改自己需要的引數,不要隨意更改,否則可能造成手機無法開機)


修改完成後,開始重新打包,我們先對ramdisk.gz打包,然後對整個boot.img重打包。命令分別如下:

python bootimg.py --repack-ramdisk 
python bootimg.py --repack-bootimg 
打包完成後,會出現一個boot_repack.img,這就是重新打包完成的boot.img。


到這兒,boot.img已經修改完成,接下來有多種方式將其刷入我們的手機。

1. 可以重新將檔名改回boot.img打包到系統rom包中,重新簽名,刷入整個rom包。

2.使用fastboot工具刷入手機。

3.使用第三方recovery工具比如TWRP等,手動刷入此boot_repack.img。

重啟之後,我們使用adb shell命令檢視,可看到,此屬性已經被永久修改,不需要每次重啟都修改一遍。

如果有不同的意見或者更加簡單的方法,歡迎告訴我。