手机抓包+注入黑科技HttpCanary——让你躺在被窝里愉快抓包

语言: CN / TW / HK

1. HttpCanary简介

HttpCanary是一款强大的Android端抓包和注入工具,已经支持HTTP/HTTPS 1.0和1.1协议,还将计划支持HTTP2协议以及其他TCP协议。HttpCanary提供了强大的数据包解析和注入功能,伪造请求、修改响应都在一念之间。目前兼容5.0+版本,最重要的是: 无需Root!无需Root!无需Root!

HttpCanary不需要设置Wifi代理,不需要电脑,支持Wifi网络、移动网络抓包,真正做到躺在被窝里都能抓包!


2. HttpCanary原理

HttpCanary采用VPN的方式将网络包转发给本地代理服务器,本地代理服务器将数据包转发虚拟网关,由虚拟网关进行不同策略地拦截和协议解析,最后再将数据发送给终端,原理图如下。

这是请求:

这是响应:

其中,最重要的一层就是虚拟网关(Virtual Gateway),需要对协议进行鉴定解析等等,包括数据包的拦截注入都是在这一层处理的,比如HTTPS的中间人(MITM)解析出明文包。虚拟网关采用拦截器的设计(Interceptor),既提供了内部封装的解析逻辑,又提供了对外扩展的接口,比如HttpCanary的模组化设计(后面会详说)也是实现的这些接口。

以上整个过程都封装在名为NetBare的库内,代码还在整理中,我会尽快将NetBare开源到Github。NetBare目前已经实现了对IP协议簇下的TCP和UDP的转发逻辑,以及对TCP协议中HTTP1.0和1.1版本的解析功能,其它的协议可以后续再扩展。理论上,集成NetBare库可以实现类似Wireshark,Fiddler等抓包工具的功能,HttpCanary App就是集成了NetBare库,实现了对Http的抓包、注入等功能。


3. HttpCanary特性

下面主要介绍下HttpCanary此应用的功能以及特性,会强大到让你颤抖!

3.1 HTTP/HTTPS抓包

HttpCanary能够抓到HTTP/HTTPS 1.0和1.1版本的数据包,HTTP包很简单,明文传输100%能抓到。但是HTTPS的包比较麻烦,HttpCanary通过中间人(MITM)的方式对TLS/SSL数据包进行解密并明文输出。首先需要安装自签的CA证书,App内可以一键安装,安装时需要输入用户手势密码:

但是,由于从Android Nougat(7.0)开始,谷歌改变了网络安全策略。自签的CA证书将默认不被HTTPS连接信任,这意味着HttpCanary将无法解析TLS/SSL数据包,即无法抓取HTTPS的明文数据。但是我们可以通过两种方式来绕过这种限制。

3.1.1 抓自己APP的包

首先,在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>
复制代码

为了APP的信息安全,需要注意以上配置只能用于debug包,正式发布的包请移除这些配置。更多关于网络安全策略的信息,请前往Android Developer查看Network security configuration

3.1.2 抓第三方APP的包

我们可以借助VirtualApp这款应用来抓第三方的HTTPS包。HttpCanary内已经集成了此应用,我们只需要去设置中直接点击安装即可,注意要开启应用安装来源开关,安装完成后可以再选择关闭。

有一点需要注意,安装的VirtualApp是免费版本,在P(9.0)系统上运行相当不稳定,所以不建议在P(9.0)系统的手机上使用此方式抓包。

安装完成后,在VirtualApp内再安装你想抓包的应用,然后在VirtualApp内打开此应用,这样我们就可以愉快地对其抓包了,不过抓到的包的应用信息会显示成VirtualApp的。

3.1.3 补充说明

有些应用的HTTPS包即使不配置以上两种方式,也是能够抓到的,比如像浏览器等等,主要是这些客户端HTTPS的策略是信任所有的CA证书,比如像使用OKHttp框架的时候代码写死不做HOST校验等等。

HttpCanary无法保证100%抓到所有的HTTPS包。 比如有些App会校验证书签名,如果和服务端证书签名不匹配的话,客户端和服务端就会握手失败。这种情况下,HttpCanary无论如何都是抓不到包的,且没有任何办法可以绕过去(除非我们能拿到服务端的证书,这个还是不要想了)。

所以在此,我们建议开发者在写网络请求时,客户端App尽量要校验服务端的证书签名,防止被使用自签证书进行中间人攻击(MITM)或者抓包(此处手动滑稽^-^)。


3.2 HTTP/HTTPS包分析

HttpCanary提供了各种强大的分析工具以及多种形式的数据预览,帮助使用者快捷地分析数据包。

3.2.1 数据总览

数据包总览可以查看网络请求的URL、协议、方法、Host、Keep-Alive、Content-Type、服务器IP和端口、响应码、开始时间和结束时间、耗时、数据量等等。长按还可以进行快速复制哦!

3.2.2 Raw视图

Raw视图可以查看整个HTTP包的原始数据,包括请求/响应头和请求/响应体,这些数据都没有做过任何处理(当然HTTPS已经解析成明文了)。

3.2.3 Text视图

Text视图会显示对Body进行解码后的数据,像一些gzip、chunked等形式的数据,都会进行自动解码。

3.2.4 Json视图

我们可以在预览这一栏快速地查看格式化的JSON数据:

如果你觉得JSON数据太大,看的不方便,HttpCanary还提供了更加强大的JSON究极预览彩色视图,可以折叠节点,以及快速一键折叠,一键打开等功能哦!还有,点击还可以进行节点数据复制!

3.2.5 Hex视图

当然,有很多格式是无法预览的,显示出来文本是乱码,兄弟勿急!HttpCanary还有Hex视图,帮你方便地分析数据格式。

3.2.5 其它视图

HttpCanary还提供了图片视图和音频视图。其中图片视图可以预览BPM、PNG、GIF、JPG、WEBP等格式的图片内容;音频视图可以播放AAC、WAC、 MP3、OGG、MPEG等格式的音频内容。最后,还有很多强大的视图功能正在规划开发中,比如zip压缩包预览等等。


3.3 HTTP/HTTPS包注入

说到这里,其实以上都不是HttpCanary最强大的功能。HttpCanary最强大的功能是能够进行请求包和响应包的注入。比如最最简单的注入功能,屏蔽请求和屏蔽响应,一个是客户端数据不发给服务器,一个是服务器数据不发给客户端,只要在HttpCanary的设置页面打开屏蔽请求和屏蔽响应开关就OK啦!

如果说这个太简单了,不算。HttpCanary还有非常厉害的两种注入模式:静态注入和动态注入。顾名思义,静态注入就是你不用随时动手,动态注入就是要随时动手。下面来简单介绍下这两种注入模式。

长按首页的抓包记录,会弹框提供两种注入模式的选择。

3.3.1 静态注入

静态注入支持对HTTP/HTTPS包全量的注入,包括请求参数、请求头、请求体、响应行、响应头、响应体等。另外,如果配置了静态注入,注入器将会缓存起来,以便后面重复使用。但是可以前往App的设置->模组管理页面,对其进行禁用、启用、删除等操作。

上图是对请求进行注入,这里URL、协议版本号以及请求方法是不支持注入的(技术上实现很简单,但我觉得应该没这种奇葩需求吧)。由于是GET请求,所以这里没有显示Body注入的选项(POST等其它会有的)。请求参数(Query Parameters)以及Headers的注入都是键值对的形式,静态注入对此提供了三种注入选项:跟随,自定义,禁用。

  • 跟随:表示使用客户端发给服务器的原始数据,不进行任何干预。
  • 自定义:自定义key和value,会根据key对客户端的请求数据进行覆盖,无需覆盖即当做新增(等同Map的put操作)。
  • 禁用:表示删除客户端发给服务器的key-value数据(等同Map的remove操作)。

下面来看对响应进行注入:

响应注入支持对响应行(仅code+message)、Headers、Body三者的注入,其中Headers的注入和上面请求注入类似,有跟随、自定义、禁用三个选项。

但响应行和Body的注入只有两个选项:跟随服务端和自定义。下图是对响应行的自定义,必须从列表中选择一项:

对Body的注入采用上传文件整体替换的形式,点击可以从手机上选择一个文件。如果有需要替换的Body,可以先保存成文件,然后在这里选择就可以了。

最后,有两点需要注意:

  • Body注入的文件最大不超过10M。
  • 如果响应行code为204或者304,将会忽略对Body的注入。

3.3.2 动态注入

动态注入需要在抓包服务运行的过程中进行。相比于静态注入,动态注入不支持对请求体和响应体的注入,主要是由于手机端不方便处理太大数据类型的请求体和响应体。不过,我正在考虑支持动态注入一些小数据类型的请求体和响应体。如果使用动态注入,必须先将抓包服务运行起来。动态注入过程中,所有请求和响应都会Block住,所以切记注入不要花太长时间,防止请求或者响应超时。

动态注入模式中,请求参数(Query Parameters)以及Headers的注入只有两个选项:修改和删除,这个就不用解释了吧。请求注入确认完成后需要点右上角将数据发给服务器,然后等待收取服务器数据,再对响应进行注入。响应注入和请求注入差不多,不细说了。记住,别Holder太久哦,请求或响应会超时的。

3.4 Mod扩展

NetBare库和HttpCanary设计的初衷就是对外提供高扩展性,希望能由开发者自己进行一些特殊需求的实现,比如数据解密,数据存储等等,为此我设计了HttpCanary-ModSDK库。使用ModSDK库开发的扩展Mod可以在HttpCanary的模组管理页面中以插件的形式添加进来,真正做到开发者自己动手丰衣足食。实际上,上面讲到的静态注入就是以用户手动创建Mod的形式添加进来的。

按照设计,Mod将分为三种类型:自建Mod、扩展Mod、内置Mod。

  • 自建Mod:用户自动手动创建的Mod,比如静态注入器。
  • 扩展Mod:用户从模组管理器中导入的Mod(暂未开放)。
  • 内置Mod:内置在App内的实验性Mod,无法删除。

Mod一共有三种状态:启用状态、禁用状态、过时状态。

  • 启用状态:会随App自启动,处于工作状态。
  • 禁用状态:不会随App自启动,处于不工作状态。
  • 过时状态:随着Mod-SDK版本变化,Mod不兼容或无法使用,将处于此状态。

用户可以在模组管理页面对Mod进行操作,可以随时进行启用、禁用、删除。

前方高能预警!!!

我来演示一个厉害的内置Mod:微信朋友圈定位漂移。

启用后来看看效果:

这简直就是HttpCanary号宇宙飞船,哈哈!

3.5 HttpCanary小技巧

我已经为HttpCanary设计了一些实用的小功能。

  • 收藏,抓到一些有意思的请求,可以先收藏请求,后面慢慢分析。
  • 分享,请求和响应都可以分享给他人,分享的文件格式是.hcy,hcy文件可以直接使用HttpCanary打开。
  • 搜索,首页导航栏有个搜索功能,可以对抓包记录进行条件筛选。
  • 性能模式,HttpCanary在工作时的耗电量会比较高,可以选择打开此选项,代价是看不到数据包应用来源。
  • 白名单,在设置中添加白名单过滤会比首页的搜索效率要高。

还有一些小功能,正在规划中,比如窗口模式等。


最后

HttpCanary目前已经上架Google Play,分为免费版本和付费版本。HttpCanary的功能免费版本基本可以使用的,只有首页加了广告。另外注入功能体验期结束后,会有使用限制,但可以通过看广告后获取免费使用天数。付费版本,就不说了,您是爷!

有梯子的童鞋,请搬梯子。

没梯子的童鞋,请加微信联系我,微信号king20091305035,备注填HttpCanary。

HttpCanary的设计和开发花费了非常多的心血,由于工作较忙,基本都是下班后每天撸代码到晚上2-3点,所以希望大家能支持正版!

哦,还有个事情。HttpCanary号宇宙飞船(微信朋友圈定位漂移)暂时不在发布版本中,原因大家懂的,有需求的可以微信联系我。

最后,再声明下:

HttpCanary只可用于学习参考和开发调试,严禁用于网络攻击、钓鱼等非法途径!