Android APK文件(2、解壓和反編譯)

APK全稱:Android application package(Android應用程序包),Android應用程序包,其後綴都是.apk。java

直接解壓

直接解壓apk文件,能夠查看assets、res等信息。git

以解壓美圖xx的APK實例: github

  • assets
    • 資源文件,如聲音、字體等等。
    • 代碼中使用AssetsManager獲取Assets文件夾的資源。
  • lib
    • 存放用C/C++編寫的,用NDK編譯生成的so文件,供java/kotlin端調用。
  • META-INF
    • 存放apk簽名信息,用來保證包的完整性和系統的安全。
    • 在IDE編譯生成一個apk包時,會對裏面全部的文件作一個校驗計算,並把計算結果存放在META-INF文件夾內,apk在安裝的時候,系統會按照一樣的算法對apk包裏面的文件作校驗,若是結果與META-INF裏面的值不同,系統就不會安裝這個apk,這就保證了apk包裏的文件不能被隨意替換。好比拿到一個apk包後,若是想要替換裏面的一幅圖片,一段代碼, 或一段版權信息,想直接解壓縮、替換再從新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增長了難度,有助於保護系統的安全。
  • res
    • 存放資源文件,包括icon,xml文件
  • AndroidManifest.xml
    • 應用配置文件,每一個應用都必須定義和包含,它描述了應用的名字、版本、權限、引用的庫等。
  • classes.dex
    • 能夠直接在Dalvik虛擬機上加載運行的文件,由java/kotlin文件通過IDE編譯生成。
    • Dalvik虛擬機的指令碼不是標準的Jvm指令碼,而是使用了本身獨有的一套指令集(相似彙編語言)。
    • dex文件中共用了不少類名稱,常量字符串,使它的體積更小,運行效率更高。
  • resources.arsc
    • 二進制資源文件,包括字符串等。

反編譯

經過反編譯,就能夠查看AndroidManifest.xml、res、smali等文件,及源碼。算法

工具

  • apktool
    • 編譯和反編譯apk,從apk中提取圖片和佈局資源
  • dex2jar
    • 將可運行文件classes.dex反編譯爲jar源碼文件
  • jd-gui
    • 查看jar源碼文件

步驟

1. apktool安裝

apktool.bat d -o <output_dir> test.apk
複製代碼

其中<output_dir>指定輸出目錄,默認爲apk.out安全

  • 編譯
apktool.bat b -o <output.apk> <input_dir>
複製代碼

其中<input_dir>就是上面反編譯輸出的目錄,<ouput.apk>是編譯的輸出結果,默認爲dist/.apkbash

2. dex2jar

d2j-dex2jar.bat classes.dex
複製代碼

獲得classes-dex2jar.jarapp

3. jd-gui

  • 下載:jd.benow.ca/
  • 使用jd-gui打開classes-dex2jar.jar,查看源碼。
  • 通常的APK都會通過混淆處理。

結尾

Android APK文件(1、編譯打包過程)工具

Android APK文件(2、解壓和反編譯)佈局

Android APK文件(3、AAPT2工具使用)post

Android APK文件(4、Smali語法)

相關文章
相關標籤/搜索