1. 为什么有些App抓不到包?
最近在测试一个金融类App时,发现用常规的抓包工具完全捕获不到任何请求数据。这让我意识到,现代App的反抓包手段已经进化到相当复杂的程度。作为安全测试人员,我们需要了解这些技术背后的原理,才能找到应对之策。
常见的抓包失败场景包括:
- 使用Charles/Fiddler等工具时,App直接无法联网
- 能看到HTTPS请求但内容全部加密
- 只能捕获到少量无关紧要的请求,核心业务请求完全隐身
2. 主流反抓包技术原理剖析
2.1 SSL Pinning证书锁定
这是目前最有效的反抓包技术之一。App在编译时就将合法的证书或公钥硬编码到代码中,运行时只会信任这些特定证书。当我们尝试用中间人攻击(MITM)方式抓包时,由于证书不匹配,App会直接拒绝连接。
实现方式通常有两种:
- 证书锁定(Certificate Pinning):验证服务器证书是否与预置的完全一致
- 公钥锁定(Public Key Pinning):只验证证书中的公钥是否匹配
2.2 非标准端口与协议
有些App会使用非443端口进行HTTPS通信,或者干脆自定义二进制协议。这会让传统抓包工具完全失效,因为它们默认只监控常见端口的标准协议。
2.3 请求内容二次加密
即使HTTPS通道被成功拦截,App可能还会对请求体进行额外的加密处理。常见做法包括:
- 使用AES对称加密业务数据
- 对关键参数进行单独签名
- 采用Protobuf等二进制格式传输数据
2.4 环境检测与反调试
高级App会检测运行环境,如果发现以下情况就会禁用网络功能:
- 设备已root/越狱
- 检测到Xposed/Frida等hook框架
- 系统证书库被修改
- 运行在模拟器中
3. 突破反抓包的实战方案
3.1 绕过SSL Pinning
对于Android平台,常用方法有:
- 使用Objection框架:
objection android sslpinning disable - 修改APK文件,删除证书校验相关代码
- 使用Frida脚本动态hook验证函数
iOS平台则可以考虑:
- 使用SSL Kill Switch 2越狱插件
- 通过Cydia Substrate注入代码
- 对二进制文件进行静态patch
3.2 处理自定义协议
对于非标准协议,可以:
- 使用Wireshark进行原始流量捕获
- 逆向分析App的协议实现
- 编写自定义解析插件
3.3 对抗环境检测
关键是要让App认为运行在正常环境中:
- 使用Magisk Hide隐藏root状态
- 通过XPrivacyLua伪造设备信息
- 在真机而非模拟器上测试
4. 高级抓包技巧与工具链
4.1 组合使用多种工具
推荐的工作流:
- 先用Packet Capture进行初步探测
- 使用Wireshark分析原始流量
- 配合Charles/Fiddler解析HTTPS
- 必要时上Frida进行动态调试
4.2 移动端抓包方案
Android:
- HttpCanary:无需root的抓包神器
- VPN模式抓包:避免证书问题
- 使用Termux搭建本地代理
iOS:
- Stream:免越狱网络分析工具
- 通过电脑共享WiFi抓包
- 需要描述文件信任自定义证书
4.3 自动化测试集成
对于需要持续集成的场景:
- 使用mitmproxy编写自动化脚本
- 结合Appium进行UI自动化测试
- 通过adb命令控制抓包过程
5. 实战案例:某金融App抓包分析
最近分析的一个案例中,App采用了以下防护措施:
- 双向SSL Pinning
- 请求参数动态签名
- 核心接口使用gRPC协议
突破步骤:
- 使用jadx反编译APK,定位证书校验代码
- 编写Frida脚本绕过签名验证
- 用Wireshark捕获gRPC流量
- 通过protoc解码proto文件
关键发现:
- 签名算法使用HMAC-SHA256
- 时间戳参与签名计算
- 每个接口有独立的密钥
6. 安全防护建议
对于开发者来说,建议采用分层防御策略:
- 基础层:HTTPS+SSL Pinning
- 业务层:参数签名+时效控制
- 传输层:自定义序列化格式
- 运行时:环境检测+反调试
对于安全测试人员,我的经验是:
- 保持工具链更新
- 多角度尝试不同方案
- 重视逆向分析
- 记录完整的测试过程
抓包与分析是个持续对抗的过程。随着Android 14引入更严格的证书限制,以及iOS不断强化的隐私保护,我们需要不断更新技术储备。建议定期参加安全会议,关注OWASP Mobile项目,保持对最新防护技术的了解。