HttpCanary是Android平台下功能最强大的抓包和注入工具,支持HTTP、HTTPS、HTTP2和WebSocket等多种协议。
在使用之前,建议阅读下HttpCanary的基本使用步骤和进阶用法,以便对HttpCanary的特性有一个大致的了解。
注: 此手册以v2.2.0版本为基础编写
- 无需Root,抓包时不会影响其它App的使用。
- 支持HTTP1.0、HTTP1.1、HTTP2、HTTPS和WebSocket等协议抓包。
- 支持对抓包内容进行注入修改,支持修改请求参数、请求头、请求体、响应码、响应头和响应体等数据。
- 支持重新发送指定请求、编辑并重新发送请求。
- 支持对抓包数据进行筛选、搜索,以及设置抓取指定应用和指定Host/IP。
- 支持Raw、Hex、Text、Header等多种视图浏览数据。
- 支持自动解码Gzip、Deflate、Chunked等编码的数据包。
- 支持预览JSON、Form表单、图片、音频、Cookie等数据类型。
- 支持将请求和响应数据保存至文件或者加入收藏列表。
- 支持WebSocket实时预览。
- 支持文件形式分享请求和响应数据,以及使用HttpCanary打开分享文件。
- 支持屏蔽数据不发送给服务器或者不返回给客户端,方便调试。
- 即将支持自定义扩展Mod功能。
HttpCanary使用Man-in-the-Middle(MITM)技术抓取和解析TLS/SSL协议数据包,比如常见的HTTPS、WSS等请求,所以使用之前需要先安装自签根证书。当首次点击右下角蓝色抓包按钮后,再点击安装 -> 输入锁屏图案或密码 -> 确定,完成证书的安装。
从Android Nougat(7.0)开始,谷歌改变了网络安全策略。自签的CA证书将默认不被TLS/SSL连接信任,这意味着HttpCanary可能无法抓取HTTPS的明文数据。但是我们可以通过两种方式来绕过这种限制。
在项目的AndroidManifest.xml中添加networkSecurityConfig:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
network_security_config文件放在 res/xml/ 目录下面:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
更多关于网络安全策略的信息,请前往Android Developer查看Network security configuration。
我们可以借助VirtualApp这款应用间接抓第三方的HTTPS包,通过以下几个步骤来配置VirtualApp抓包环境。
第一步。打开HttpCanary,进入设置 -> 安装VirtualApp,然后点击安装。注意8.0及以上的手机会限制安装来源,请勾选同意。
第二步。打开VirtualApp,安装抓包目标App,然后在VirtualApp中启动目标App,这样就可以在HttpCanary看到目标App的数据包了,但是抓包记录显示的应用信息会是VirtualApp。
首页右下角悬浮按钮,点击可以启动和停止抓包,长按则可以快速清除记录(小技巧哦)。
抓包记录以列表的形式,按照时间降序排列。列表记录中包含应用图标、应用名称、请求方法、请求URL、响应码和时间等元素。点击标题栏右上角按钮,可以清空列表。
HttpCanary具有针对性抓包功能,在设置中配置指定App或者指定Host/IP进行抓包。
点击首页右上角放大镜按钮,进入高级搜索页面。可以配置多种条件,对抓包数据进行筛选。
点击高级搜索页面右上角的按钮,可以一键复位所有筛选条件。
如果设置了筛选条件时,首页右上角的放大镜按钮图案会变成倒三角图案,表明记录已经经过了筛选。
HttpCanary提供了详尽的数据浏览功能,点击首页抓包记录打开详情页面。详情页面包含三个Tab,分别是总览、请求和响应。
总览提供了详细的数据报告,包括状态、请求协议、请求方法、响应码、服务器IP和端口、Cookie信息、Content-Type类型、请求时间、数据量等。
小技巧:长按数据条目可以快速复制哦。
如果URL带有参数,点击URL条目,可以进入URL预览页:
点击Cookie,可以进入Cookie预览页:
点击Set-Cookie,可以进入Set-Cookie预览页:
请求和响应包含多种视图,点击下方的Tab进行切换。
Raw视图是指原数据视图,未做任何解码和转码,包含整个HTTP的请求数据。可以长按选择数据进行复制操作。
由于字符限制,此视图最多显示32k的数据。
Header视图分别包含请求行、请求头、响应行、响应头,长按可以进行快速复制。
Text视图显示请求体数据,会自动对Gzip、Chunked、Deflate等进行解码显示。可以长按选择数据进行复制操作。
由于字符限制,此视图最多显示32k的数据。
Hex视图以十六进制的形式显示数据,方便进行数据类型解析。
由于字符限制,此视图最多显示32k的数据。
HttpCanary支持一些常用数据的预览,包括JSON、Form表单、图片和音频等。
如果数据类型是JSON,可以在预览视图中点击JSON内容可以打开JSON视图。JSON视图可以单独对JSON进行节点展开、闭合、复制和保存等操作,还支持横竖屏切换浏览功能。
如果数据类型是音频格式,可以在预览视图中点击打开音频视图。音频视图支持播放和保持音频功能。
HttpCanary支持以聊天的形式展示WebSocket数据。
在详情页面,点击右上角保存按钮可以将请求和响应保存成文件。保存的文件有三个:原始数据(raw)、头部数据(header)、内容数据(text)。保存目录在SD卡HttpCanar/download目录下面。
在详情页面,点击右上角分析按钮可以将请求和响应文件分享出去,分享的文件格式是hcy。hcy格式文件可以使用HttpCanary直接打开。
HttpCanary最强大之处在于可以对数据进行注入修改,能够极大地方便开发者调试和测试接口。
此功能是付费版本功能,免费版本有7天的试用期。
HttpCanary提供了两种不同的注入模式,分别是静态注入和动态注入。在首页长按抓包记录,然后在弹框中选择一种注入模式。
静态注入支持对HTTP/HTTPS包全量的修改注入,包括请求参数、请求头、请求体、响应行、响应头、响应体等。另外,如果配置了静态注入,注入器将会缓存起来,以便后面重复使用。但是可以前往App的设置 -> 模组管理中,对其进行禁用、启用、删除等操作。
上图是对请求进行修改注入,这里Path、协议版本号以及请求方法是不支持修改的。请求参数(Query Parameters)以及Headers的注入都是键值对的形式(请求体的修改注入请参考下方响应注入),静态注入对此提供了三种注入选项:跟随,自定义,禁用。
- 跟随:表示使用客户端发给服务器的原始数据,不进行任何干预。
- 自定义:自定义key和value,会根据key对客户端的请求数据进行覆盖,无需覆盖即当做新增(等同Map的put操作)。
- 禁用:表示删除客户端发给服务器的key-value数据(等同Map的remove操作)。
响应修改注入支持对响应行(仅code+message)、响应头和响应体三者,其中响应头的注入和上面请求注入类似,有跟随、自定义、禁用三个选项。但响应行和响应体的注入只有两个选项:跟随服务端和自定义。下图是对响应行的修改,必须从列表中选择一项:
对于响应体的注入有两种方式:
- 上传文件整体替换。点击可以从手机上选择一个文件,如果有需要替换的数据,可以先保存成文件,然后在这里选择就可以了。
- 直接编辑。如果数据量较小,可以直接编辑后提交。
动态注入需要在抓包服务运行的过程中进行。相比于静态注入,动态注入不支持对请求体和响应体的注入,主要是由于手机端不方便处理太大数据类型的请求体和响应体。如果使用动态注入,必须先将抓包服务运行起来。 动态注入过程中,所有请求和响应都会Block住 ,所以切记注入不要花太长时间,防止请求或者响应超时。
如果注入成功,抓包记录右下角会显示已注入的标记。
从v2.2.0版本开始, HttpCanary支持重发(Repeat)和编辑重发(Compose)功能。
此功能是付费版本功能,免费版本有7天的试用期。
你可以长按一条抓包记录来选择相应功能。
你可以选择一个抓包记录并立即重发它。被重发的请求是通过HttpCanary发出的,但是依然可以被你配置的注入器作用。如果你想修改一个请求,可以在编辑完静态注入器后,立即重发此请求,就能看到发出的请求被安装注入器的配置修改了。所以,重发和注入器相互配合使用,可以事半功倍。
如果觉得使用静态注入器太过于麻烦,可以考虑下编辑重发功能。HttpCanary提供了一个编辑器,可以编辑指定的请求(包括Body),然后立即发送。
标题栏右上角提供了两个选项。左边的是重置选项,一键恢复所有原始数据。右边的是提交选项,编辑完成后点击此按钮发送请求。
更多强大的功能正在到来! 骚年,付费版来一发?
问: 付费版本相比免费版本有哪些特性?
答: 付费版本功能:
- 无任何广告。
- 不限制注入功能。
- 不限制重发和编辑重发功能。
- 更多的即将到来的新特性。
问: 怎么样获取付费版本?
答: 可以在GooglePlay直接购买,如果无法付款可以邮件guoshi.support@qq.com或者微信king20091305035联系我购买GooglePlay兑换码。
问: 为什么有的请求抓不到?
答: 如果是Android 7.0+手机,请参考本手册环境配置。如果按照配置还是抓不到,可能是客户端或者服务端对SSL证书做了安全校验,这种情况是抓不到包的。