安卓逆向之APK的基本結(jié)構(gòu)

APK:Android application package
一般包含以下內(nèi)容:
[文件夾]assets:靜態(tài)資源文件
存放未經(jīng)編譯的資源文件
一般是Apk中的靜態(tài)文件,配置文件,原始數(shù)據(jù)及其他不常改變的文件,不會被解壓縮,訪問速度較快但空間占用較大
[文件夾]lib:庫文件
存放運行App所需要的動態(tài)鏈接庫(*.so)
內(nèi)部分文件夾存放用于適配不同系統(tǒng)及處理器的版本
關(guān)于庫文件:安卓系統(tǒng)中庫文件分為以下兩種
1.SharedLibraries:共享庫文件
存放于系統(tǒng)目錄中,為可供多個應(yīng)用程序使用的庫
2.NativeLibraries:本地庫文件
存放于Apk中的lib文件夾中(APP安裝后會被放到私有目錄中),為應(yīng)用程序特有的庫文件,不會被其他應(yīng)用程序使用
[文件夾]META-INF:簽名文件
存放簽名證書,App安裝時作為校驗的憑據(jù)(防止Apk被篡改)以及作為Apk著作權(quán)和所有權(quán)的聲明
在打包Apk文件的時候會自動生成這些文件,若更改包內(nèi)文件,簽名會更改
CERT.RSA
CERT.SF
#App簽名信息,安裝時會檢查這兩個文件
MANIFEST.MF
#存放應(yīng)用程序所有文件的清單信息
...
[文件夾]res:編譯資源文件
存放編譯后的資源文件
drawable
#存放圖片資源文件(位圖,矢量圖)
layout
#存放布局文件(描述應(yīng)用程序界面結(jié)構(gòu))
values
#存放值資源文件(存放App中使用的常量值和顏色信息)
...
[文件]AndroidManifest.xml:配置清單文件
描述應(yīng)用程序的清單信息(包名,應(yīng)用名,權(quán)限,安卓四大組件,版本等信息)
聲明應(yīng)用程序的主要組件-安卓四大組件(活動Activity,服務(wù)Service,廣播接收器BroadcastReceiver等)
打包apk時該文件自動生成
[文件]classes.dex:核心代碼文件
為Dalvik虛擬機(jī)的可執(zhí)行文件,內(nèi)部存放java字節(jié)碼,可反編譯為smail代碼
因單個dex文件有大小限制,較大的apk會存在多個dex文件,運行時合并為一個dex文件運行
安裝Apk后會被解壓到私有目錄中,然后被Dalvik虛擬機(jī)加載并運行
優(yōu)點:可以使得應(yīng)用程序的下載包變小
缺點:訪問速度略慢于共享庫文件
打包apk時該文件自動生成
[文件]resources.arsc:資源映射文件
輔助文件,存放應(yīng)用程序的資源表
(資源表:存放應(yīng)用程序的資源ID和類型的映射關(guān)系)
優(yōu)點:可以使應(yīng)用程序的資源文件變小
缺點:訪問速度略慢于文本文件