shizukurunner 中文文档 下载 App

提取应用 APK 与查看源代码 - Runner + apktool 逆向入门

Runner 能做什么

Runner 本身不提供反编译功能——它只是把 shell 命令送给系统执行。真正的反编译工作交给 apktool、jadx 等工具。Runner 的价值是让提取 APK 这一步不需要 root:

步骤一:找到 APK 路径

首先要找到目标 App 的安装位置和 APK 文件路径。

# 获取 App 安装路径
pm path com.example.app
# 返回类似: package:/data/app/com.example.app-abcxyz==/base.apk

# 或者用 dumpsys 查
dumpsys package com.example.app | grep "codePath"
# 返回: codePath=/data/app/com.example.app-abcxyz==

步骤二:提取 APK

从 pm path 输出里拿到的路径,把 APK 复制出来:

cp /data/app/com.example.app-abcxyz==/base.apk /sdcard/runner-extract/com-example-app.apk

或者用更简洁的方式:

cp $(pm path com.example.app | cut -d: -f2) /sdcard/runner-extract/

步骤三:用电脑反编译

把 /sdcard/runner-extract/ 里的 APK 传到电脑,用以下工具反编译:

工具输出用途
jadxJava 源代码 + resources看 Java/Kotlin 层代码,最常用
apktoolsmali + XML看 smali 汇编层,修改 APK 重打包
aapt2资源清单查 AndroidManifest.xml、资源 ID

jadx 推荐的命令行方式:

jadx -d output-folder base.apk

GUI 版直接拖 APK 进去就行。

实战:提取并分析一个 App

假设你想看看抖音 Android 版内部用了什么网络库:

  1. 用 Runner 执行:
   pm path com.ss.android.ugc.aweme
   cp /data/app/com.ss.android.ugc.aweme-*/base.apk /sdcard/runner-extract/douyin.apk
  1. 把 /sdcard/runner-extract/douyin.apk 传到电脑
  2. 用 jadx 打开,搜索关键词 OkHttp、Retrofit、Volley 等网络框架
  3. 找到网络请求的封装逻辑,了解 App 的通信层设计

shell 权限为什么能读 /data/app/

Android 的 /data/app/ 目录本身是 drwxrwx--x 权限——owner 是 system,group 是 system,其他用户没有读权限。但是:

所以Runner 的 shell 权限足够读取 APK 文件,不需要 root。但如果 App 使用了更严格的 SELinux label(file_contexts),shell 可能读不到——这种情况一般是 App 本身做了额外保护。

局限性