使用 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设置
- 下载并安装Caido
- 创建实例配置为监听localhost和TCP端口8080
- 启动实例并创建新项目
- 点击"HTTP History"选项卡准备查看流量
3. 代理安卓移动应用程序
3.1 安装目标应用
从apkpure等第三方网站下载目标APK(如iHealth MyVitals 4.8.0),然后安装:
adb install ihealth-myvitals-4.8.0.apk
3.2 配置代理
- 在Wi-Fi网络设置中选择"手动"代理
- 代理主机名填写
127.0.0.1,端口填写8080 - 使用ADB反向代理将手机流量转发到电脑:
adb reverse tcp:8080 tcp:8080
3.3 安装CA证书
- 在手机浏览器访问
http://localhost:8080/ca.crt下载CA证书 - 进入"加密与凭据"设置手动安装并信任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绕过证书绑定
- 启动修改后的应用,它会暂停等待Frida连接
- 运行Frida脚本绕过SSL证书绑定:
frida -U gadget --codeshare sowdust/universal-android-ssl-pinning-bypass-2
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脚本
- 检查应用是否使用了自定义证书验证逻辑