在用Swift开发原生iOS HTTPS抓包调试工具后,虽然在很多地方加入AI能提升效率,但小屏幕操作效率始终不高。
早期就有用户反馈说希望可以将抓取的流量实时同步到PC端,在PC上分析流量。导出HAR是可以实现在PC端分析的目的,但是太麻烦。例如调试一个接口问题可能要导出N次。
所以早期我就定了一个实时同步协议,并开源这个协议,让所有用户都可以自己实现接收器,这样可以自己实现某些桌面端App的插件,比如IDEA插件、Burp插件。
想着同步功能已经开发,不如自己开发一个PC端接收器:开发ApiCatcher的PC端,在PC端实现ApiCatcher的完整功能。
于是,我用Wails把ApiCatcher搬到Windows和macOS上。我比较喜欢用Go语言,所以PC端选择了Wails这个框架。实现HTTPS代理用的是goproxy这个开源库,感兴趣的话其实也可以自己用这个开源库开发一个HTTPS抓包工具。
ApiCatcher实现PC端抓包的原理是利用系统代理,本地启动一个代理服务,然后设置系统代理,这样遵循系统代理的应用发出的HTTP/HTTPS请求就会经过代理(一些非原生应用就可能不走代理)。这也是很多PC端HTTPS抓包工具使用的核心技术,如老牌的Charles。需要解密HTTPS流量的话就是生成一个根证书并添加到系统证书存储区,任何应用发起请求到代理服务这一段用的是这个根证书签发的证书。
macOS上权限控制比较严,应用想写系统代理需要用户输入密码同意,但每次开始抓包(写系统代理)和停止抓包(移除系统代理)都弹窗让用户授权很是麻烦。可以参考Charles的实现,通过安装一个帮助程序来实现写系统代理,这样只需要用户授权一次安装这个帮助程序就可以,后续启动和停止抓包就不需要用户输密码了。
分享一下成果,ApiCatcher桌面端都有哪些功能。
基础核心功能:设置系统代理抓包:
作为iOS端的实时同步接收器,接收iOS端同步的流量:
导入其他抓包工具导出的HAR文件,或导入ApiCatcher iOS端导出的HAR文件:
每次抓包、同步或导入都会生成一个抓包Session记录,所有历史数据都会存储到本地嵌入的SQLite数据库,而不是每次重启应用之前的抓包数据就没了。
请求历史查看所有抓取的http/https/ws/wss请求,提供丰富的过滤条件,便于查找请求。请求详情在一屏上显示全,不需要Tab切来切去,可以收起左侧列表腾出更多空间查看请求详情。
支持HTTP Raw查看,查看原始的请求响应数据。
可以点击重放按钮,快速重放请求以测试接口,支持修改请求参数信息。
支持WebSocket协议,WebSocket通信详情用聊天对话式显示,像看聊天记录一下。
ApiCatcher不仅支持JSON/XML/HTML格式化高亮显示,也支持渲染SVG、png等格式的图片,以及视频和音频,可以预览。
视频渲染,可播放。
音频渲染,可播放。
可以导出图片、音频、视频文件。
ApiCatcher之所以叫ApiCatcher,最初是为了抓接口的,例如抓某个老旧项目用了哪些接口,因为老项目可能没有文档。而抓到的接口呢,希望可以导出到Apifox、postman等API管理平台,方便团队内共享和迭代编辑。
所以ApiCatcher在抓包时会自动将json类型请求解析生成API文档。
然后可以导出Host下的所有API文档。
ApiCatcher还支持接口扫描,扫历史请求,找出哪些接口可能存在明文传输敏感数据,或者分析接口性能找出耗时接口优化。
用于调试接口不同响应情况下UI交互逻辑是否正确的重写功能,支持Mock响应、改响应。如果一个请求被重写,请求历史那里会给出标志,请求详情能看出是哪个重写规则。
脚本则用于重写满足不了的复杂需求场景,例如公司项目的接口都会加密,无法直接重写,得需要先解码,这种情况下需要脚本来实现。
组合重放的使用场景是一个接口依赖另一个接口响应的场景,例如登录需要先获取验证码,购买需要先下单再支付等。可视化的交互使用起来更简单。
定时任务主要用于测试高并发接口,同一个用户频繁操作的场景,例如秒杀场景下的加入购物车按钮接口。但其实我个人的使用场景是在测试环境执行一些定时任务。
以上就是ApiCatcher的全部功能了,与iOS端基本一致,只是少了一些AI提效的功能。这些功能在PC端其实不需要AI来提效,因为PC端切换工具太方便了。所以PC端也没有加入AI功能的计划。
后续计划实现iOS端的重写规则和脚本可以和桌面端双向同步,这样可以直接在电脑上写重写规则和脚本,在移动端使用,以提升工作效果。
感兴趣可以下载体验:ApiCatcher PC端下载