在平常開發中,有的時候須要獲取系統APK學(po)習(jie),這裏主要記錄一下獲取系統APK流程,該流程在Android 8.0如下已經驗證過。java
系統APK安裝的時候會將dex從APK中提取出來而且進行一波優化生成odex文件,dex文件轉化爲odex文件主要的緣由爲優化和提早驗證dex文件以提升應用運行速度。系統APK保存在/system/app目錄中,直接到該目錄下找對應APK,這裏舉例Launcher,進入Launcher目錄下,有以下文件:Launcher.apk和oat文件夾,其中Launcher.apk文件中只有資源文件,沒有dex文件,dex文件被優化爲odex文件保存在oat目錄中,將Launcher.apk和odex取出來:
bash
adb pull /system/app/Launcher/Launcher.apk
adb pull /system/app/Launcher/oat/arm64/Launcher.odex複製代碼
java -jar baksmali.jar deodex Launcher.odex複製代碼
上面命令執行後通常都會失敗,通常都會報錯說找不到其餘oat文件,如:
app
Cannot find dependency boot-telephony-ext.oat in null複製代碼
通常系統APK都會依賴framwork層一些公共功能庫,這樣能夠防止系統APK被盜運行在其餘ROM上,須要到framwork層取到對應oat文件便可:
工具
adb pull /system/framework/arm64/boot-telephony.ext.oat複製代碼
java -jar smali-2.2.6.jar assemble out/ -o class.dex複製代碼
執行上述命令後就能夠獲得dex文件了,這樣就完成了將系統odex文件轉化爲dex文件的過程了。優化
這裏直接使用jadx打開class.dex便可 。spa
目前廠商會定製各類應用,其中最讓人吐槽的就是自定義權限功能,沒法經過API來獲取某一自定義權限的狀態,經過反編譯系統APK看看能不能找到漏洞來判斷,下一篇將會介紹實際破解過程。code