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语法)

相关文章
相关标签/搜索