[App逆向]环境搭建上篇——抓取apk https包

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手机模拟器)

如果真实手机的可以忽略此步骤。

  1. 从官网下载并安装 Android Studio

官网地址:https://developer.android.google.cn/studio?hl=zh-cn

  1. 安装Android手机镜像
  • 打开 Android Studio → SDK Manager → SDK Platforms 标签页。
  • 勾选需要安装的Android镜像,点击 Apply 下载镜像。
  1. 通过模拟器创建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 镜像。
  1. 点击启动模拟器


    PS:如果不习惯英文的,可通过下面方式将语言改为中文
  • 主页面上划打开Setting
  • 搜索Language,进入App Languages
  • 点击System Languages
  • 点击添加中文


    效果:

2. 安装Charles(抓包神器)

  1. 下载:从 官网 下载对应 macOS 版本的 Charles 安装包并安装。首次运行会提示试用,可继续使用(若需长期使用请购买正版)。

官方网址:https://www.charlesproxy.com/


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

激活网站地址:https://www.zzzmode.com/mytools/charles/

  • 打开安装好的Charles,菜单栏 Help->Register Charles 弹出注册的窗口
  • 填入Registered Name和生成的license key,点击 Register,即可长期使用了
  1. 配置http代理
  • 打开 Charles,点击菜单栏 Proxy → Proxy Settings。
  • 确保 HTTP Proxy 端口为 8888(默认),勾选 Enable transparent HTTP proxying。
  1. 配置 Android 模拟器代理
  • 在模拟器上,主页面下滑,打开网络设置
  • 点击设置,然后点击右上方编辑按钮

  • 选择高级选项,然后点击手动配置代理
  • 输入Charles本地IP(其实就是自己本地电脑的IP)和监听的端口(默认8888)

不知道自己Charles本地IP的,可以点击Charles-Help-Local IP Address查看

  1. 验证效果
    首先Android手机通过Chrome浏览器访问:http://httpbin.org/get ,然后查看Charles是否有抓到对应包。

不过此时我们只能抓取http的包,还无法抓取https的包,因为没有配置Charles 根证书。再后面开启Root权限后,会告诉大家如何配置https证书并将用户证书移动到系统证书下,让我们可以抓取https包。

二、开启Root权限(Magisk+补丁)

Android 高版本模拟器默认无 root,需要手动安装 Magisk 来获取 root,为后续实现系统证书的挂载做好准备。

1. 安装Magisk

  1. 访问Github直接下载apk

下载地址:https://github.com/topjohnwu/Magisk/releases

无法科学上网的也可通过下面地址下载:https://magiskcn.com/magisk-download.html

  1. 直接将apk拖动到Android模拟器中实现安装,安装后,打开,首次进入会提示需要修复环境,然后重启设备,点击确认即可
  2. 重启后会发现Magisk下方的超级用户模块是未解锁状态,下面会演示打补丁方式获取Root权限

2. 镜像打补丁(获取永久Root)

再次进入Magisk之后,会Root模块未打开,需要对镜像打补丁或者手动通过命令临时开启Root。这里我们演示打补丁的方式。

补丁方式原理:将 Magisk 直接集成到系统镜像中。这是一种永久性 Root 方案,可以让模拟器每次启动时都自动获得 Magisk 支持,无需每次都通过命令行加 -writable-system -selinux permissive 参数启动。

  1. 关闭运行中的Android模拟器
  2. 从 Magisk 源码中获取 build.py 脚本。我们只提取这个脚本,无需下载完整源码。

脚本地址:https://github.com/topjohnwu/Magisk/blob/master/build.py

  1. 定位镜像目录

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,就在这个目录下。

  1. 终端执行补丁命令:

注意自己的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
  1. 重启模拟器,再次进入可以看到超级用户模块已经解锁(已经Root成功)

三、Charles根证书配置

1. 电脑信任证书

  1. 首先开启Charles https抓包:Proxy - SSL Proxying Settings,添加ssl 抓包规则 *:*
  2. 然后保存Charles根证书

  3. 双击证书点击安装,点击信任此证书

2. 手机安装证书

  1. 将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
  1. 安装证书:设置-搜索框输入:证书 - CA证书

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


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

3. 提升为系统证书

不过有安装为用户证书依然无法抓取https包,我们需要将用户证书提升为系统证书。

这里通常有两种方案:我们这里采用方式二

方式一:计算好签名,手动移动到/system/etc/security/cacerts/目录下

方式二:使用 MoveCertificate Magisk 模块(自动移动,推荐)

  1. 从 GitHub releases 下载 MoveCertificate-xxx.zip。

下载地址:https://github.com/ys1231/MoveCertificate/releases

  1. 推送到Android模拟器
bash 复制代码
adb push ~/Downloads/MoveCertificate-v1.5.6.zip /sdcard/
  1. Android模拟器打开 Magisk 应用,点击 右下角 模块 → 从本地安装,选择该 zip,安装后重启。

安装成功后,该模块会在每次启动时自动将用户证书复制到系统目录,无需手动操作

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

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

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

  1. 验证对某书apk抓取https包
相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui