移动端环境配置与抓包基础
要爬取 App 的数据,第一步就是看清 App 与服务器之间到底传输了什么。这离不开一套稳定好用的调试环境和抓包工具链。
本文会从环境选型 → 核心命令 → 抓包配置 → 反抓突破四个维度,带你一步一步搭建出自己的 App 抓包环境。
1. 移动端调试环境:模拟器还是真机?
选环境这件事其实不用纠结,两种方案各有明确的使用场景:
建议:日常开发、学习直接用模拟器,成本低、权限全,效率最高。
1.1 主流模拟器快速连接 ADB
选好模拟器后,第一步就是用 ADB 把 PC 和模拟器“绑”在一起:
# 先确认 ADB 版本(Android SDK Platform-Tools 已装好)
adb version
# 常用模拟器的默认端口(多开时端口会递增,例如雷电第二个实例为 5557)
adb connect 127.0.0.1:5555 # 雷电模拟器
adb connect 127.0.0.1:62001 # 夜神模拟器
adb connect 127.0.0.1:7555 # Mumu 模拟器
连接成功后,执行 adb devices 会看到设备状态:
List of devices attached
127.0.0.1:5555 device
2. ADB 常用命令:十个命令搞定日常开发
ADB 是 PC 与 Android 设备的通信桥梁。下面这些命令覆盖了 99% 的日常需求,不需要死记硬背,用到的时候回来查就行。
连接与状态
# 重启 ADB 服务,解决“找不到设备”的经典问题
adb kill-server && adb start-server
adb devices # 确认设备状态:device=正常,offline=重连
应用管理
# 列出第三方应用包名,快速找到目标 App
adb shell pm list packages -3
# 安装与卸载
adb install -r <APK文件路径> # -r 表示覆盖安装
adb uninstall <包名> # 想保留数据可以加 -k
文件传输
# 将证书、脚本等推送到手机的 /sdcard 目录(兼容性最好)
adb push <本地文件> /sdcard/
# 从手机拉取文件到当前目录
adb pull /sdcard/<文件路径> ./
常用调试技巧
# 一键截图并保存到本地
adb shell screencap /sdcard/tmp.png && adb pull /sdcard/tmp.png . && adb shell rm /sdcard/tmp.png
# 强制杀掉 App,抓包前清缓存
adb shell am force-stop <包名>
# 使用 monkey 命令启动指定 App
adb shell monkey -p <包名> -c android.intent.category.LAUNCHER 1
3. 主流抓包工具:三选一即可
所有抓包工具的核心原理都差不多:手机把 Wi-Fi 代理设为 PC → 工具拦截流量 → 工具用自己的 CA 证书“冒充”服务器与 App 通信,从而实现明文查看请求和响应。
根据操作系统和需求,可以这样选:
3.1 Mitmproxy:最适合 Python 抓包的工具
Mitmproxy 有三种启动方式,刚入手时可以先玩 Web 界面(mitmweb),熟悉后再用脚本模式进行自动化处理。
第一步:安装与启动
# 使用 pip 一键安装(需 Python 3.8+)
pip install mitmproxy
# 启动 Web 界面(代理端口 8080,Web 控制台端口 8081)
mitmweb -p 8080 --web-host 0.0.0.0
第二步:模拟器配置代理(以雷电为例)
- 打开模拟器
设置 → WLAN → 长按已连接的 WiFi → 修改网络
- 代理选择
手动,服务器填写 PC 的局域网 IP(Windows 用 ipconfig 查看,Mac / Linux 用 ifconfig)
- 端口填
8080,保存后打开浏览器访问 mitm.it
- 根据提示下载并安装证书(Android 7.0+ 必须将证书安装在系统区,详见第 4 节)
第三步:编写脚本,自动保存 JSON 响应
很多 App API 返回的都是 JSON,我们可以用几行代码自动拦截并保存:
# save_json.py
from mitmproxy import http
import json
import os
from datetime import datetime
OUTPUT = "app_json_data"
os.makedirs(OUTPUT, exist_ok=True)
def response(flow: http.HTTPFlow):
ct = flow.response.headers.get("Content-Type", "")
if "application/json" not in ct:
return
try:
ts = datetime.now().strftime("%Y%m%d_%H%M%S_%f")
domain = flow.request.host.replace(".", "_")
filename = f"{OUTPUT}/{ts}_{domain}.json"
with open(filename, "w", encoding="utf-8") as f:
json.dump({
"url": flow.request.pretty_url,
"method": flow.request.method,
"response": json.loads(flow.response.text)
}, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f"保存失败: {e}")
启动脚本模式:
mitmdump -s save_json.py -p 8080
4. 反制抓包:证书锁定与绕过技巧
HTTPS 加密会给抓包带来两个门槛,好在每个都有现成的解决方案。
4.1 安装证书到系统区
Android 7.0(API 24)开始,App 默认只信任系统预装的 CA 证书,用户自己安装的证书会被忽略,所以必须把 Mitmproxy 的证书刷入系统区(需要 ROOT 权限)。
# 1. 进入 Mitmproxy 证书目录(Windows 对应 C:\Users\用户名\.mitmproxy)
cd ~/.mitmproxy
# 2. 获取 Android 系统要求的证书哈希值,并重命名
CERT_HASH=$(openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem | head -1)
mv mitmproxy-ca-cert.pem ${CERT_HASH}.0
# 3. 将证书推送到系统区并修改权限
adb root
adb remount # 部分模拟器需要先解除 /system 只读挂载
adb push ${CERT_HASH}.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/${CERT_HASH}.0
adb reboot # 重启后生效
如果模拟器已经 ROOT,整个过程特别顺畅,这也是为什么前面推荐模拟器的原因之一。
4.2 绕过 SSL Pinning
装了系统证书后还是抓不到包,说明 App 启用了 SSL Pinning(证书锁定),它会主动校验服务器返回的证书是否与自己内置的证书一致,不一致就直接断开连接。
最快捷的绕过方法是 Frida + JustTrustMe:
# PC 端安装 Frida
pip install frida frida-tools
# 下载对应架构的 frida-server 文件(如 x86_64 模拟器对应 x86_64 版本)
# 下载地址:https://github.com/frida/frida/releases
# 推送到手机并启动
adb push frida-server-* /data/local/tmp/
adb shell chmod 755 /data/local/tmp/frida-server-*
adb shell su -c /data/local/tmp/frida-server-* & # 后台运行
# 下载 JustTrustMe.js(在 GitHub 搜索 “JustTrustMe frida”)
# 然后启动 App 并注入脚本
frida -U -f <目标App包名> -l JustTrustMe.js --no-pause
这样,SSL Pinning 的校验逻辑就会被绕过,抓包工具又能正常解密 HTTPS 流量了。
5. 一次完整的实战流程
以抓取某读书 App 的 API 为例,把前面的知识串起来(仅限学习,勿违规使用):
- 打开雷电模拟器,确认已 ROOT
- 安装 Mitmproxy 系统证书
- 启动
mitmweb -p 8080
- 设置模拟器 Wi-Fi 代理
- 用 Frida + JustTrustMe 启动读书 App
- 翻几本书,浏览器打开
http://127.0.0.1:8081 就能看到实时 API 数据
整个过程从environment-setup到看到明文接口,十分钟内就能完成。
总结
本文的核心就四条:
- 优先使用模拟器:ROOT 权限直接把障碍降到最低
- ADB 命令会 10 条足够:覆盖应用管理、文件传输和简单调试
- 抓包工具三选一:Python 开发者首选 Mitmproxy,方便脚本化
- 突破反制两步走:系统区证书 + Frida+JustTrustMe 绕过 SSL Pinning
掌握了这些,你就有了一把“透视 App 数据流”的万能钥匙,为后续的协议分析和爬虫开发打下扎实基础。