【Android 逆向】APK 文件格式 ( Android 应用安装 | Zip 文件格式 | 使用 Python 代码提取 APK 文件 )

简介: 【Android 逆向】APK 文件格式 ( Android 应用安装 | Zip 文件格式 | 使用 Python 代码提取 APK 文件 )

文章目录

一、Android 应用安装

二、APK 文件格式

三、使用 Python 提取 APK 文件





一、Android 应用安装


APK 是 Android 应用的安装文件 , 现在也有 AAB 格式的 , AAB 安装包也可以导出 APK 安装文件 ;


应用安装时 , 会将 APK 安装包拷贝到 /data/app/packageName/ 目录下的 base.apk ,


如 : 某应用会将 apk 文件拷贝到 /data/app/com.qidian.QDReader-GTqLCxuMlq6CJtnOVz1LgQ==/base.apk 位置 ;


APK 安装目录参考 【Android 逆向】应用安装目录 ( Android 应用的默认安装目录 | 查找 Android 应用的安装目录 | 查询当前正在运行的应用包名 | 根据包名查询应用安装路径 ) 博客 ;



/data/data/package.name/lib 是应用自带的 so 动态库 , 在应用安装时安装的文件 ;


/data/data/com.qidian.QDReader/lib文件是软链接文件 , 真实的文件地址是 /data/app/com.qidian.QDReader-GTqLCxuMlq6CJtnOVz1LgQ==/lib/arm 地址 , 这是应用的安装目录 ;


lrwxrwxrwx  1 root    root            66 2021-10-26 10:10 lib -> /data/app/com.qidian.QDReader-GTqLCxuMlq6CJtnOVz1LgQ==/lib/arm


参考 【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 ) 博客 ;






二、APK 文件格式


Android 的 APK 安装包使用的数据格式就是 zip 格式 , 直接使用 zip 工具解压即可 , 也可以将文件命后缀改为 .zip 后解压 ;


Zip 文件格式中 , 每个文件都是由 文件头 + 文件数据 + 数据描述符 构成 , 如果有多个文件 , 则上面的 文件头 + 文件数据 + 数据描述符 数据 重复存放 即可 ;


Zip 文件中 还有一个 核心目录 , 以及 目录结束标识 ;


在 010 Editor 工具中 , 打开 apk 文件 , 然后选择 " 菜单栏 / 模板 / Zip 模板 " , 即可以 Zip 格式解析该 APK 文件 ;

image.png



50 4B 03 04 开始的文件 , 就是 Zip 文件 , 这是 Zip 文件的标识 ;


image.png






三、使用 Python 提取 APK 文件


使用 Python 提取 APK 文件完整代码 :


import os
# 如果没有使用 pip install zipfile 安装
import zipfile
# 提取 APK 中的文件
def extract_apk(apk_path: str):
    # 创建 ZipFile 实例对象
    zip_file = zipfile.ZipFile(apk_path)
    # 解压目录 , 删除 "app.apk" 的后 4 个字符 ".apk" , 即 "app"
    out = apk_path[:-4]
    # 创建目录
    os.mkdir(out)
    # 提取 zip 文件
    zip_file.extractall(out)
    # 关闭 zip 文件
    zip_file.close()
def main():
    extract_apk('app.apk')
if __name__ == '__main__':
    main()


执行后会将 app.apk 文件解压到 app 目录中 ;


image.png

目录
相关文章
|
4月前
|
Java API 开发工具
如何将python应用编译到android运行
【6月更文挑战第27天】本文介绍在Ubuntu 20上搭建Android开发环境,包括安装JRE/JDK,设置环境变量,添加i386架构,安装依赖和编译工具。并通过`p4a`命令行工具进行apk构建和清理。
66 6
如何将python应用编译到android运行
|
2月前
|
Android开发
解决android apk安装后出现2个相同的应用图标
解决android apk安装后出现2个相同的应用图标
173 2
|
3月前
|
Oracle Java 关系型数据库
Android studio 安装以及第一个程序
Android studio 安装以及第一个程序
86 0
|
4月前
|
存储 Android开发
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
45 0
|
4月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
165 0
|
5月前
|
Shell 开发工具 Android开发
|
4月前
|
开发工具 Android开发 Windows
Android Studio安装Unable to access Android SDK add-on list处理方法
Android Studio安装Unable to access Android SDK add-on list处理方法
131 0
|
4月前
|
Android开发 Kotlin
kotlin开发安卓应用 如何修改app安装后的名称
在 Android 应用中,要修改安装后的显示名称,需更新 AndroidManifest.xml 文件中 application 标签的 android:label 属性。可直接在该属性内设置新名称,或在 res/values/strings.xml 文件中修改 app_name 并在 manifest 中引用。推荐使用 strings.xml 方式,以便支持多语言和集中管理。
|
5月前
|
设计模式 缓存 Java
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
|
5月前
|
数据采集 Java 开发工具
一文2500字从0到1教你搭建Android自动化python+appium环境
一文2500字从0到1教你搭建Android自动化python+appium环境
一文2500字从0到1教你搭建Android自动化python+appium环境

推荐镜像

更多
下一篇
无影云桌面