[App逆向]环境搭建上篇------抓取apk https包
免责声明:本教程仅供学习和研究使用,请勿用于任何非法用途。对他人应用进行逆向分析时,应遵守相关法律法规,尊重开发者权益,未经授权不得进行恶意篡改或侵犯用户隐私。

Android逆向工程是指通过分析APK文件的代码、资源、网络通信等,理解其内部实现逻辑,甚至修改其行为的技术。常见的应用场景包括:协议分析、去广告、漏洞挖掘、竞品研究等。本教程将大家搭建App逆向环境,抓取手机apk的https包。
我本地环境是Mac M3芯片,没有合适的模拟器,所以这里我采用Android studio的模拟器,大家如果有条件的也可以通过真实手机,或者Windows也可以安装雷电、夜神等模拟器。
- 宿主机:macOS / Windows / Linux
- 模拟器:Android Studio 自带 AVD(Android Virtual Device,模拟真实Android手机),以及adb( Android Debug Bridge,电脑调试手机)
- 目标 Android 版本:Android 16 (API 36) arm64
- 抓包工具:Charles Proxy
- 必要工具:
- Magisk 程序
- MoveCertificate Magisk模块
PS:逆向分析需要本地先安装有java、python环境,这些安装配置都很简单,网上很多教程,这里就不赘述。mac用户可通过brew直接安装。
一、环境搭建
1. 安装Android studio(AVD手机模拟器)
如果真实手机的可以忽略此步骤。
- 从官网下载并安装 Android Studio

- 安装Android手机镜像
- 打开 Android Studio → SDK Manager → SDK Platforms 标签页。
- 勾选需要安装的Android镜像,点击 Apply 下载镜像。

- 通过模拟器创建Android手机
- 打开 Device Manager(设备管理器),点击 Create device。

- 选择一款Android系列设备(尽量选择较低版本的Android,如 Pixel 7),点击 Next。

- 在系统镜像列表中,选择刚刚下载的 Android 16 镜像(比如我这里是Android16),点击 Next。
- 根据需要配置 AVD 名称,Services选择Google APIs,然后点击 Finish。

拓展:Services 类型说明
- AOSP:纯开源系统,无 Google 服务,可 Root。
- Google APIs:包含 Google 服务框架,使用测试密钥,可 Root(推荐)。
- Google Play Store:包含完整 Google 服务和 Play 商店,使用生产密钥,默认无法 Root(需额外工具)。
本教程后续步骤均基于 Google APIs 镜像。
- 点击启动模拟器


PS:如果不习惯英文的,可通过下面方式将语言改为中文
- 主页面上划打开Setting
- 搜索Language,进入App Languages
- 点击System Languages
- 点击添加中文
效果:
2. 安装Charles(抓包神器)
- 下载:从 官网 下载对应 macOS 版本的 Charles 安装包并安装。首次运行会提示试用,可继续使用(若需长期使用请购买正版)。


- 激活Charles可以免费试用一段时间,如果需要长期使用需要付费,可以使用下面的激活网址,有条件的也建议大家使用正版。

- 打开安装好的Charles,菜单栏 Help->Register Charles 弹出注册的窗口
- 填入Registered Name和生成的license key,点击 Register,即可长期使用了
- 配置http代理
- 打开 Charles,点击菜单栏 Proxy → Proxy Settings。

- 确保 HTTP Proxy 端口为 8888(默认),勾选 Enable transparent HTTP proxying。

- 配置 Android 模拟器代理
- 在模拟器上,主页面下滑,打开网络设置

- 点击设置,然后点击右上方编辑按钮


- 选择高级选项,然后点击手动配置代理

- 输入Charles本地IP(其实就是自己本地电脑的IP)和监听的端口(默认8888)

不知道自己Charles本地IP的,可以点击Charles-Help-Local IP Address查看
- 验证效果
首先Android手机通过Chrome浏览器访问:http://httpbin.org/get ,然后查看Charles是否有抓到对应包。

不过此时我们只能抓取http的包,还无法抓取https的包,因为没有配置Charles 根证书。再后面开启Root权限后,会告诉大家如何配置https证书并将用户证书移动到系统证书下,让我们可以抓取https包。
二、开启Root权限(Magisk+补丁)
Android 高版本模拟器默认无 root,需要手动安装 Magisk 来获取 root,为后续实现系统证书的挂载做好准备。
1. 安装Magisk
- 访问Github直接下载apk
下载地址:https://github.com/topjohnwu/Magisk/releases
无法科学上网的也可通过下面地址下载:https://magiskcn.com/magisk-download.html
- 直接将apk拖动到Android模拟器中实现安装,安装后,打开,首次进入会提示需要修复环境,然后重启设备,点击确认即可

- 重启后会发现Magisk下方的超级用户模块是未解锁状态,下面会演示打补丁方式获取Root权限
2. 镜像打补丁(获取永久Root)
再次进入Magisk之后,会Root模块未打开,需要对镜像打补丁或者手动通过命令临时开启Root。这里我们演示打补丁的方式。
补丁方式原理:将 Magisk 直接集成到系统镜像中。这是一种永久性 Root 方案,可以让模拟器每次启动时都自动获得 Magisk 支持,无需每次都通过命令行加 -writable-system -selinux permissive 参数启动。
- 关闭运行中的Android模拟器
- 从 Magisk 源码中获取 build.py 脚本。我们只提取这个脚本,无需下载完整源码。
脚本地址:https://github.com/topjohnwu/Magisk/blob/master/build.py
- 定位镜像目录
Android SDK 系统镜像通常位于:
- macOS:~/Library/Android/sdk/system-images/android-36/google_apis/arm64-v8a/
- Windows:C:\Users\用户名\AppData\Local\Android\sdk\system-images\android-36\google_apis\arm64-v8a\
- Linux:~/Android/Sdk/system-images/android-36/google_apis/arm64-v8a/
我们需要的文件是 ramdisk.img,就在这个目录下。
- 终端执行补丁命令:
注意自己的Android模拟器的镜像名:android-36/google_apis/arm64-v8a
bash
# 对镜像打补丁
./build.py avd_patch --apk ../Downloads/Magisk-v30.7.apk /Users/ziyi/Library/Android/sdk/system-images/android-36/google_apis/arm64-v8a/ramdisk.img ramdisk_patched.img
# 备份原文件(以防后续需要原来的镜像文件)
cp ramdisk.img ramdisk.img.backup
# 拷贝覆盖之前的老镜像
cp ramdisk_patched.img /Users/ziyi/Library/Android/sdk/system-images/android-36/google_apis/arm64-v8a/ramdisk.img
- 重启模拟器,再次进入可以看到超级用户模块已经解锁(已经Root成功)

三、Charles根证书配置
1. 电脑信任证书
- 首先开启Charles https抓包:Proxy - SSL Proxying Settings,添加ssl 抓包规则
*:*

- 然后保存Charles根证书


- 双击证书点击安装,点击信任此证书


2. 手机安装证书
- 将Charles证书推动到Android手机目录下
bash
# 1. 查看adb是否识别到Android手机
adb devices
# 执行结果:
List of devices attached
emulator-5554 device
# 2. 将Charles根证书推送到模拟器
## Charles根证书位置:~/Desktop/charles-ssl-proxying-certificate.pem
## 推送Android手机目标位置:/sdcard
adb push ~/Desktop/charles-ssl-proxying-certificate.pem /sdcard

-
安装证书:设置-搜索框输入:证书 - CA证书

-
点击CA证书,选择仍然安装,然后找到自己上传到手机上的证书,点击证书进行安装



-
看到页面提示"已安装CA证书"后,在设置页面找到"证书管理应用",点击可信凭据,找到用户模块,即可看到哦我们开始安装的Charles证书


3. 提升为系统证书
不过有安装为用户证书依然无法抓取https包,我们需要将用户证书提升为系统证书。
这里通常有两种方案:我们这里采用方式二
方式一:计算好签名,手动移动到/system/etc/security/cacerts/目录下
方式二:使用 MoveCertificate Magisk 模块(自动移动,推荐)
- 从 GitHub releases 下载 MoveCertificate-xxx.zip。
- 推送到Android模拟器
bash
adb push ~/Downloads/MoveCertificate-v1.5.6.zip /sdcard/

- Android模拟器打开 Magisk 应用,点击 右下角 模块 → 从本地安装,选择该 zip,安装后重启。
安装成功后,该模块会在每次启动时自动将用户证书复制到系统目录,无需手动操作

- 验证效果:设置-证书管理应用-可信凭据-系统证书,观察是否存在Charles证书

- 验证https抓包
注意:因为手机重启了,所以需要重新配置下代理。同时需要保证手机和电脑在同一wifi下。

PS:如果有时本地电脑上的包太多,只想抓取手机模拟器的包,取消勾选macOS Proxy即可。Windows大同小异

- 验证对某书apk抓取https包











