APK檔案:
APK是Android Package的縮寫,即Android安裝包。APK是類似Symbian Sis或Sisx的檔案格式。通過将APK檔案直接傳到Android模拟器或Android手機中執行即可安裝。
APK檔案目錄:
assets 不經過 aapt 編譯的資源檔案
lib .so檔案
META-INF 檔案摘要,摘要加密和簽名證書檔案目錄
CERT.RSA 公鑰和加密算法描述
CERT.SF 加密檔案,它是使用私鑰對摘要明文加密後得到的 密文資訊,隻有使用私鑰配對的公鑰才能解密該文 件
MANIFEST.MF 程式清單檔案,它包含包中所有檔案的摘要明文
res 資源檔案目錄,二進制格式
drawable 圖檔
layout 布局
menu 菜單
resources.arsc 經過 aapt 編譯過的資源檔案
classes.dex 可執行檔案
AndroidManifest.xml 配置檔案
APK打包流程:
打包資源(res/assets/AndroidManifest.xml/Android基礎類庫)檔案,生成 R.java和resources.ap_檔案
處理AIDL檔案,生成對應的.java檔案
編譯Java檔案,生成對應的.class檔案
把.class檔案轉化成Davik VM支援的.dex檔案(.java=>.class=>.dex)
打包生成未簽名的.apk檔案
對未簽名.apk檔案進行簽名
對簽名後的.apk檔案進行對齊處理
APK安裝流程:
1.安裝方式
系統程式安裝
通過Android市場安裝
ADB安裝(adb devices:顯示目前連接配接的裝置;adb install 安裝包路徑)
手機自帶安裝
2.安裝過程
複制APK安裝包到/data/app目錄下,解壓并掃描安裝包,把dex文 件(Dalvik位元組碼)儲存到/data/dalvik-cache目錄,并/data/data目錄 下建立對應的應用資料目錄。
3.安裝後檔案所在目錄
/system/app
系統自帶的應用程式,獲得adb root權限才能删除
/data/app
使用者程式安裝的目錄,安裝時把apk檔案複制到此目錄
/data/data
存放應用程式的資料
/data/dalvik-cache
将apk中的dex檔案安裝到dalvik-cache目錄下
4.解除安裝過程
删除安裝過程中在上述三個目錄下建立的檔案及目錄。
APK反編譯與回編譯:
先查殼,再反編譯看驗證
.apk檔案==>反編譯apk(dex/配置檔案/資源檔案(apk反編譯敗)) ==>修改關鍵檔案實作自己的目的==>重新打包簽名(無法重新打包) ==>apk安裝後無法 運作。
apktool .dex=>.smali
dex2jar .dex=>.jar
Apktool工具實際上隻反編譯以下三種類型檔案:
.xml檔案、.dex檔案、.arsc檔案
去除廣告和彈窗,撇開不存在于smali的這種情況,容易的就是 可以在XML中尋到Activity,難的就是尋不到,發生這種情況時, 就要分析代碼,程式邏輯,抓住關鍵資訊,界面和函數。
注意:
當字元串等關鍵資訊搜不到時,可以從三個方向考慮:1.字元串 在so層;2.字元串被加密了3.結合了伺服器,伺服器傳回,本地 顯示。
虛拟機:
1.java虛拟機
java位元組碼
基于棧架構
2.dalvik虛拟機(jit機制)
Android 5.0以下
dalvik位元組碼
dalvik可執行檔案體積更小
基于寄存器架構
3.art虛拟機(aot機制)
Android 5.0版本及以上
注意:
.dex =>dexopt=>.odex dalvik加載執行的odex檔案
.dex=>dex2oat=>.oat art加載執行的是oat檔案