Android反編譯系統應用

在平常開發中,有的時候須要獲取系統APK學(po)習(jie),這裏主要記錄一下獲取系統APK流程,該流程在Android 8.0如下已經驗證過。java

一.找到系統APK odex 文件

系統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複製代碼

二.odex轉dex

odex轉爲dex須要2個工具jar:smali.jar 和 baksmali.jar:
  • smali.jar:smali文件轉爲dex文件
  • baksmali.jar:odex文件轉爲smali文件
首先須要將odex文件轉爲smali文件:

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複製代碼

當獲取全部須要的oat文件後,再次執行命令,反編譯成功後會生成out目錄,目錄中均是smali文件。
將smali文件轉爲dex文件:

java -jar smali-2.2.6.jar assemble out/ -o class.dex複製代碼

執行上述命令後就能夠獲得dex文件了,這樣就完成了將系統odex文件轉化爲dex文件的過程了。優化

三.反編譯dex

這裏直接使用jadx打開class.dex便可 。spa

四.總結

目前廠商會定製各類應用,其中最讓人吐槽的就是自定義權限功能,沒法經過API來獲取某一自定義權限的狀態,經過反編譯系統APK看看能不能找到漏洞來判斷,下一篇將會介紹實際破解過程。code

相關文章
相關標籤/搜索