使用 Caido 和 Frida 拦截移动端应用程序流量
字数 1495 2025-09-01 11:26:17

使用Caido和Frida拦截移动端应用程序流量 - 详细教学文档

1. 工具与设备准备

1.1 所需工具

  • Caido: 基于Rust编写的轻量级HTTP代理工具,用于拦截和分析HTTP流量
  • Frida: 动态插桩工具包,用于绕过证书绑定(Certificate Pinning)
  • adb (Android Debug Bridge): Android调试工具
  • apktool: APK反编译和重新打包工具
  • zipalign: APK对齐工具
  • apksigner: APK签名工具
  • keytool: Java密钥库生成工具

1.2 设备准备

  • 一台未Root的安卓设备
  • 启用开发者模式和USB调试(ADB)
  • 在开发者选项中开启"USB连接时保持屏幕常亮"
  • 通过USB数据线连接安卓设备到Linux电脑

验证ADB连接:

adb devices

2. Caido设置

  1. 下载并安装Caido
  2. 创建实例配置为监听localhost和TCP端口8080
  3. 启动实例并创建新项目
  4. 点击"HTTP History"选项卡准备查看流量

3. 代理安卓移动应用程序

3.1 安装目标应用

从apkpure等第三方网站下载目标APK(如iHealth MyVitals 4.8.0),然后安装:

adb install ihealth-myvitals-4.8.0.apk

3.2 配置代理

  1. 在Wi-Fi网络设置中选择"手动"代理
  2. 代理主机名填写127.0.0.1,端口填写8080
  3. 使用ADB反向代理将手机流量转发到电脑:
adb reverse tcp:8080 tcp:8080

3.3 安装CA证书

  1. 在手机浏览器访问http://localhost:8080/ca.crt下载CA证书
  2. 进入"加密与凭据"设置手动安装并信任Caido的CA证书

4. 绕过证书绑定(Certificate Pinning)

4.1 问题识别

检查日志发现证书验证错误:

adb logcat

错误信息:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

4.2 使用Frida Gadget修改APK

4.2.1 解包APK

apktool d -o unpack ihealth-myvitals-4.8.0.apk

4.2.2 修改AndroidManifest.xml

找到并修改:

android:extractNativeLibs="false"

改为:

android:extractNativeLibs="true"

4.2.3 确定入口Activity

查找LAUNCHER分类的Activity:

<activity android:exported="true" android:launchMode="standard" 
          android:name="com.ihealth.business.common.welcome.WelcomeActivity"

4.2.4 修改WelcomeActivity.smali

找到.method public constructor <init>()V方法,修改为:

.method public constructor <init>()V
    .locals 1
    
    const-string v0, "frida-gadget"
    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
    
    .line 1
    invoke-direct {p0}, Lcom/trello/rxlifecycle3/components/support/RxAppCompatActivity;-><init>()V
    
    .line 2
    .line 3
    .line 4
    return-void
.end method

4.2.5 重新打包APK

apktool b --use-aapt2 -o mod-app.apk unpack/
zipalign 4 mod-app.apk final-mod-app.apk

4.2.6 签名APK

生成密钥库:

keytool -genkey -v -keystore custom.keystore -alias mykeyaliasname -keyalg RSA -keysize 2048 -validity 10000

签名APK:

apksigner sign -ks custom.keystore final-mod-app.apk

4.2.7 安装修改版APK

adb install final-mod-app.apk

5. 使用Frida绕过证书绑定

  1. 启动修改后的应用,它会暂停等待Frida连接
  2. 运行Frida脚本绕过SSL证书绑定:
frida -U gadget --codeshare sowdust/universal-android-ssl-pinning-bypass-2

6. 使用Caido分析流量

  1. 在Caido中创建范围(Scope)过滤无关流量(如*.ihealthlabs.com)
  2. 在HTTP History窗口中选择创建的范围,只显示目标流量
  3. 分析API端点,寻找潜在漏洞

7. 关键注意事项

  1. 确保设备已正确连接并通过ADB识别
  2. 必须修改android:extractNativeLibs为true
  3. 正确修改smali代码并调整locals数量
  4. 重新打包后必须进行签名才能安装
  5. 使用Frida时确保应用暂停等待连接
  6. 在Caido中设置适当的范围过滤无关流量

8. 故障排除

  1. 如果看不到流量:

    • 检查ADB反向代理是否设置正确
    • 验证CA证书是否已正确安装并信任
    • 确认Frida脚本是否成功执行
  2. 如果应用崩溃:

    • 检查smali代码修改是否正确
    • 验证locals数量是否与使用的寄存器匹配
    • 确保Frida Gadget库已正确集成
  3. 如果证书绑定未被绕过:

    • 尝试其他Frida脚本
    • 检查应用是否使用了自定义证书验证逻辑
使用Caido和Frida拦截移动端应用程序流量 - 详细教学文档 1. 工具与设备准备 1.1 所需工具 Caido : 基于Rust编写的轻量级HTTP代理工具,用于拦截和分析HTTP流量 Frida : 动态插桩工具包,用于绕过证书绑定(Certificate Pinning) adb (Android Debug Bridge) : Android调试工具 apktool : APK反编译和重新打包工具 zipalign : APK对齐工具 apksigner : APK签名工具 keytool : Java密钥库生成工具 1.2 设备准备 一台未Root的安卓设备 启用开发者模式和USB调试(ADB) 在开发者选项中开启"USB连接时保持屏幕常亮" 通过USB数据线连接安卓设备到Linux电脑 验证ADB连接: 2. Caido设置 下载并安装Caido 创建实例配置为监听localhost和TCP端口8080 启动实例并创建新项目 点击"HTTP History"选项卡准备查看流量 3. 代理安卓移动应用程序 3.1 安装目标应用 从apkpure等第三方网站下载目标APK(如iHealth MyVitals 4.8.0),然后安装: 3.2 配置代理 在Wi-Fi网络设置中选择"手动"代理 代理主机名填写 127.0.0.1 ,端口填写 8080 使用ADB反向代理将手机流量转发到电脑: 3.3 安装CA证书 在手机浏览器访问 http://localhost:8080/ca.crt 下载CA证书 进入"加密与凭据"设置手动安装并信任Caido的CA证书 4. 绕过证书绑定(Certificate Pinning) 4.1 问题识别 检查日志发现证书验证错误: 错误信息: 4.2 使用Frida Gadget修改APK 4.2.1 解包APK 4.2.2 修改AndroidManifest.xml 找到并修改: 改为: 4.2.3 确定入口Activity 查找LAUNCHER分类的Activity: 4.2.4 修改WelcomeActivity.smali 找到 .method public constructor <init>()V 方法,修改为: 4.2.5 重新打包APK 4.2.6 签名APK 生成密钥库: 签名APK: 4.2.7 安装修改版APK 5. 使用Frida绕过证书绑定 启动修改后的应用,它会暂停等待Frida连接 运行Frida脚本绕过SSL证书绑定: 6. 使用Caido分析流量 在Caido中创建范围(Scope)过滤无关流量(如 *.ihealthlabs.com ) 在HTTP History窗口中选择创建的范围,只显示目标流量 分析API端点,寻找潜在漏洞 7. 关键注意事项 确保设备已正确连接并通过ADB识别 必须修改 android:extractNativeLibs 为true 正确修改smali代码并调整locals数量 重新打包后必须进行签名才能安装 使用Frida时确保应用暂停等待连接 在Caido中设置适当的范围过滤无关流量 8. 故障排除 如果看不到流量: 检查ADB反向代理是否设置正确 验证CA证书是否已正确安装并信任 确认Frida脚本是否成功执行 如果应用崩溃: 检查smali代码修改是否正确 验证locals数量是否与使用的寄存器匹配 确保Frida Gadget库已正确集成 如果证书绑定未被绕过: 尝试其他Frida脚本 检查应用是否使用了自定义证书验证逻辑