书史足自悦,安用勤与劬。这篇文章主要讲述#yyds干货盘点#抬头看天 | 谈谈移动端抓包方式和原理及如何防犯MITM相关的知识,希望能为你提供帮助。
文章图片
移动端常用抓包工具工欲善其事,必先利其器 ,要抓包,怎么可能没有好的工具,对于普通抓包来说,我们有下面几个工具
Fiddler在 windows 环境非常好,提供了一系列抓包方式及后续的脚本,划重点,脚本,这也是众多人喜欢的原因。
注意:在mac支持很差,新版软件缺少核心功能脚本,体验很差。
Charles体验nice,在Mac,windows体验均可以,支持定时存储,不支持相关脚本。(这也是为什么不如fiddler火的原因,在mac体验很好)
文章图片
AnyProxy阿里的抓包工具,在网页上使用,使用简单,支持js脚本。批量抓包可以考虑使用。
文章图片
总结如果是 windows用户,只是想随便抓抓练手,fiddler 不佳之选,mac用户 选择 Charles。
如果想抓完之后顺便分析分析数据,写入数据库,那么 AnyProxy 和 fiddler 可以满足需求,mac用户直接考虑 AnyProxy即可,不要问为什么,问就是 fiddler 在mac就是一坨稀饭。
相关的使用教程,一抓一大把,我这里就不叙述了。
温馨提示:记得安装证书,记得Android7.0以下(以上使用xp框架,或者别的方式)
常用抓包工具原理好像有点跑题了,接下来回到正轨,上面这些抓包软件原理是什么呢?
什么是MITM?
一图胜千言(小灰的图)
文章图片
简而言之,小红和小绿两人要通信,结果被中间人小黑偷听并分别转发了。
不是有https吗?很多人认为,用https不就行了吗,我有证书做校验啊,但普通的https依然相当于裸奔,类似的 上面的工具通过代理加伪造根证书依然可以抓取https,具体原理看下面分析。
原理分析
我们以 charles举例。charles相当于一个中间人代理。当客户端与服务器通信时, charles 接收服务器的证书,然后动态生成一张证书发送给客户端,然后 charles 作为中间代理在客户端 和 服务器 之间通信,所以相关通信的数据 可以被 Charles 拦截。
如下图描述:
文章图片
具体步骤如下:
- 客户端 向服务器 发起 HTTPS 请求
- Charles 拦截客户端请求,伪装成客户端向服务器进行请求
- 服务器 向 客户端 返回服务器的 CA证书。 (实际上已经被 Charles 拦截)
- Charles 拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,替代服务器的证书后发给 客户端。
- 客户端 接收到 服务器(实际上是Charles的证书) 的证书后,生成一个对称秘钥,并用 Charles 发送回来的证书公钥加密,发送给 服务器(实际发送给了 Charles)
- Charles 拦截客户端的响应,用自己的私钥解密对称秘钥 (这里已经拿到了对称秘钥),然后用服务器证书公钥加密,发送给服务器。
- 服务器用自己的私钥解密对称秘钥,向客户端(实际是 Charles)发送 响应
- Charles 拦截服务器响应,替换成自己的证书会后发送给客户端。
- 至此,链接建立, Charles 拿到了 服务器证书的公钥 和 客户端和服务器协商的对称秘钥,之后就可以解密或者修改加密的报文了。
如何防范MITM? 判断是否设置代理网络请求时,判断客户端当前是否设置代理,如果设置代理,就禁止其访问。
客户端本地证书效验客户端本地做证书校验,并且设置不仅仅校验公钥,设置完整的正式校验模式。这样的话,证书会校验请求的时候不仅仅校验域名,会将证书中的公钥及其他信息也进行校验,这样的话,中间人伪造的证书就无法通过验证,无法进行抓包。
Https请求和相应的数据进行加密对证书加密的数据再次进行加密,这样即使对方已经将证书替换,那么看到的数据仍旧是一堆乱码后的数据。
【#yyds干货盘点#抬头看天 | 谈谈移动端抓包方式和原理及如何防犯MITM】最后,以上皆为本人真实理解和实际感受,抓包有风险,大家练练手即可,切勿黑灰产业哈
参考博客
- Charles抓取https数据的原理
推荐阅读
- 关于DNS
- 每天一个linux 命令----ls
- linux系统挂载windows2016共享目录
- #yyds干货盘点#Prometheus 之 Grafana 简述
- 北亚数据恢复raid5磁盘阵列在进行热备盘同步数据过程中,硬盘掉线导致raid崩溃的数据恢复案例
- bpftrace系统分析脚本实战
- #yyds干货盘点#还没有表白神器(情人节来喽,快为心爱的她送上一份专属的礼物吧~)
- go语言学习---map集合
- win8 64位旗舰版设置与关闭筛选器的办法【图文】