背景
工作以后,团队需要,抓包工具用的特别多。Charles功能丰富,能满足需要抓包的大多数场景。
之所以专门讲一下Android抓包,一个原因是笔者从事Android开发,经常用;另外,就是网上关于Charles实现Android抓包的配置说明鱼龙混杂,不仅浪费时间还让人抓狂。
工具
(1)最新的charles工具,下载地址
(2)charles本身收费,如果不想掏钱,必须破解。破解的步骤只需要一步,参见http://charles.iiilab.com
Http
(1)配置代理端口号;
Proxy -》 Proxy Settings -》 Port,port可以随便指定,我这里取的8888;
(2)配置代理的ip;
Android手机的网络代理一般在设置页面,点击当前连着的wifi,手动修改代理配置,然后将你的电脑ip和第一步中配置的端口号填写到手机上即可。如下图:
有了上面两步,理论上已经能够实现http的抓包。至于如何抓,以及断点、map、rewrite等功能不是本文的重点,网上一大筐,请自行搜索。
Https
这个真的是,让人很无语。
在看了网上一大堆似曾相识的说明之后,笔者按照那些配置,不是乱码,就是一直处于这样⬆️吊死的请求状态。还有各种证书指导安装说的模棱两可,让人摸不着头脑。
在经过了半天的折腾后,笔者将亲身实践的经历总结如下,力图用最简洁的步骤,帮你实现https抓包。
(1)在上面两步的基础上,你需要为charles添加SSL Proxiyng。具体的步骤是:Proxy -》 SSL Proxiyng Settings -》勾选“Enable SSL Proxying”,并点击下方的Add,你可以这样配置:
host是你要抓的域名或者ip(这里用通配符*,表示抓去所有的https请求),port为443。(2)下载手机的SSL证书。这一步很关键,你需要点击help -》SSL Proxying-》Save Charles Root Certificate,然后选择目录,保存一个类似于这样的“charles-ssl-proxying-certificate.pem”文件(笔者的环境是mac下,windows有可能文件后缀不一样);
(3)给手机安装证书。这一步很坑,因为不同的手机可能会有不同的表现。
- 首先命令行切换到(2)的文件夹下,可用adb将(2)中的文件推入手机中,具体的命令参考:“adb push charles-ssl-proxying-certificate.pem sdcard/charles.pem”,表示将charles-ssl-proxying-certificate.pem推入sdcard中,并重命名为charles.pem,注意后缀一般必须是pem。
- 打开手机的文件管理器,找到charles.pem,点击安装。如果安装成功,那么恭喜你,理论上,现在手机的https访问数据,已经能被charles获取。不过,如果你的手机出现了类似下图的说明,请继续执行下一步。
- 打开手机设置 -》更多设置 -》系统安全 -》从存储设备安装 -》选择charles.pem,点击安装。如果安装成功,那么恭喜你,理论上已经能抓包https的数据了。
如果你是小米的用户,而且出现了问你要“凭据存储的密码”的弹窗,请继续往下看。 - 小米手机对sdcard文件的存取,做了安全限制。如果你没有设置屏幕锁,或者没有开启屏幕锁,操作sdcard文件时会出现上面的提示。这时,你需要设置一下屏幕锁,再重新安装一下就行了。
要补充的是,在小米机器上,如果经过上述操作,.pem还是无法正常安装,请尝试把文件重命名为.crt,再重复上述操作
到这里,已经完成charles对https抓包的全部配置。正常的情况,你的charles会显示https的数据,并且没有乱码。如果按照上面的步骤,仍然无法抓https包,笔者建议你可以考虑重新装一个版本的charles了。
总而言之
(1)https抓包确实需要安装证书,不过电脑端可以不装,要抓包的手机必须装,而不是像许多博客指出的那样,电脑和手机都必须装证书;
(2)部分版本的破解可能导致charles出现异常,对的配置却仍然无法正常抓https包,可能受破解的影响,可以考虑重装软件了。
(3)https从头到尾,电脑只需要配置一下SSL Proxiyng Settings,手机只需要安装一个证书即可。并不需要乌七八糟的乱撞一通证书。