android反編譯系統應用

因爲工作需要,需要看看某個系統apk是怎麼實現特定的功能的。 看看有沒有可以利用的地方

  1. 獲取到應用的包名

    • 打開應用的某個頁面
    • 進入adb shell
    • shell裏面 dumpsys activity|grep ACTIVITY 獲取到包名
  2. 根據包名查看應用的信息

    • 獲取apk的路徑 adb shell pm path {包名}
  3. 把apk拉到本地

    • adb pull {remote path} {local path}
  4. 一鍵查看應用

    • 下載jadx ,通過這個應用打開.apk

正常的應用到這裏就結束了。

但是 What The Fuck !!! apk裏面classes.dex沒有,是空的,並沒有任何的class 文件

  1. 再次獲取應用的信息信息

    • adb shell dumpsys package {包名},可以看到codePath
  2. dump所有的code到本地

    • adb pull {remote code path} {local path}
  3. emm… 可以看到有個arm的文件夾,裏面有個xxx.odex
    在有的系統,提取做了優化,把裏面.dex轉換成了.odex提前進行存儲

  4. 把xx.odex轉換爲 dex

    • 準備工作 下載baksmali, smali, oat3dex.jar
    • 把系統的framework拉到本地來 adb pull /system/framework .
    • 從framework中找到 boot.oat, 我試驗的機器是在framework/arm的目錄下
    • 執行java -jar oat2dex.jar boot boot.oat ,這裏會在boot.oat的同級目錄下生產dex odex兩個子目錄
    • 執行 java -jar oat2dex.jar xxx.odex /framework/arm/dex/ (後面的目錄是上一步生產的文件夾)
    • 執行java -jar baksmali.jar -a 22 -b -s xxx.dex -o test; (22代表着系統api等級)
    • 執行 java -jar smali.jar -a 22 -j 1 -o classes.dex test;
    • 如果不出意外的話,這裏就有一個classes.dex
  5. 再次通過jadx打開classes.dex文件

  6. 完美收工

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章