[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包
相关推荐
qq_283720052 小时前
MySQL技巧(三):慢查询开启与分析优化案例
android·adb
常利兵2 小时前
从Groovy到KTS:Android Gradle脚本的华丽转身
android
穷人小水滴2 小时前
使用 WebRTC 实现局域网投屏: PC (GNOME ArchLinux) -> 平板 (Android)
android·linux·webrtc·浏览器·js·gnome·投屏
zh_xuan2 小时前
Android compose 无限滚动列表
android
诸神黄昏EX2 小时前
Android Binder 系列专题【篇六:自定义AIDL HAL进程】
android
Fate_I_C2 小时前
Android现代开发:Kotlin&Jetpack
android·开发语言·kotlin·android jetpack
Densen20142 小时前
[.NET 9] BlazorWebView 无法在较旧的 Android 设备上加载, 附临时解决方法
android
轩情吖2 小时前
MySQL Connect(2)
android·mysql·adb·workbench·mysql连接池·图形化mysql
三少爷的鞋3 小时前
从“调用方的如履薄冰”到“接口的天然语义”:Room/DataStore/Retrofit 的启示
android