[HttpCanary]导出抓包记录至Postman

Android 抓包方案

相比iOS 网络流量均由系统管理的机制,Android 应用在网络请求定制方面有更多的自由度,使得抓包的难度增加. 在单纯客户端应用层面,抓包策略由简单到复杂大约有以下几种:

  1. 使用HTTP代理+CA证书的中间人策略.这是最为常用且方便的抓包方案,采用主流的Charles等抓包工具即可.

    但是随着Android 证书安全策略的收紧,导入并信任证书成为了一个很复杂的流程.我一般采用Magisk模块Move Certificates来完成将用户证书自动导入至CA证书目录的流程.
  2. 使用VPN来截获流量并进行中间人. 考虑到Android App自身在发出网络请求时,可以覆盖系统定义的HTTP代理请求,因此许多应用出于反抓包策略的考量,指定的发送网络请求不经过系统HTTP代理(如支付宝/部分Flutter网络库).这时只能采用VPN的方式来进行流量截获.

    VPN方案一般采用的有Drony(通过建立VPN将本机所有流量拦截至本地,并视策略情况进行转发至代理服务器或拦截)等VPN分流转发的策略或HttpCanary等在手机上完成抓包的策略.但是Drony(更新至2016)与HttpCanary(更新至2019)均已停止开发,SSL抓包精灵等其他抓包工具仍在Play商店更新,但是个人认为功能并不全面.这里我采用HttpCanary配合1中提到的证书信任流程使用.
  3. 针对进行服务端证书校验SSL Pinning的客户端,只认证CA证书是没有用的,因此必须Hook掉App内校验服务器端证书的逻辑,否则抓包软件伪造的证书无法通过校验.常见的方案包括Xposed框架下的JustTrustMe/JustTrustMePlush,采用Frida进行动态Hook等.

HttpCanary导出

即使已经不更新了,HttpCanary的设备端抓包体验也强于Play商店的其他同类程序.虽然对高版本Android系统的适配存在一些问题,但基本也可以曲线解决. 但是一个让我很不爽的功能缺失点在于:HttpCanary的导出功能只能导出HTTP Raw报文,或自己私有Scheme的JSON,或cURL命令.在我日常的工作流中,从App抓取接口=>导入API调试工具=>分析接口鉴权是一个比较常用的流程.而HttpCanary的分析功能并不强大,我通常需要借助Postman等工具进行请求的重发和验证.对于单个请求,我通常会采用cURL命令的形式导入Postman.但是对于多个请求的批量导入,HttpCanary会生成一个压缩包,且不提供cURL命令导出.

对压缩包进行解压发现,HttpCanary为每个请求生成了一个文件夹,分别包含私有SchemeJSON(URL,Headers,请求时间信息,App包名),Body(JSON文件或简单粗暴的纯文本.bin文件),hcy文件,内容为HTTP Raw 报文.

在摸鱼的过程中,写了一个脚本来辅助批量转换,将批量导出压缩包转换为Postman的Collection格式,便于导入: https://github.com/lx200916/CanaryConvertor

编译后可生成可执行文件,使用方法为:

HcyConverter <Input Achieve Path> -o <OutPut Path>

详细技术细节以后再补..

Edit with markdown

已有 2 条评论

  1. AK88

    您好,能问一下抓包后的结果怎么全部导出吗?找了好多资料都不行。

    AK88 May 24th, 2023 at 10:56 pm回复
    1. SaltedFish

      全选之后就可以全部导出了,但是需要较高版本的HttpCanary.

      SaltedFish May 24th, 2023 at 11:53 pm回复