程序员都应该会的抓包工具-Charles

来自公众号 : DeveloperPython

阅读本文需要7.66分钟

抓包 其实很多程序员都不陌生了,但是真正抓过包、分析过的又有几个。
本文将介绍几款简单易用的抓包工具,并针对目前互联网主流的Http和Https网络包进行抓取并分析,同时分享手机抓包的技术
1. Charles、Fiddler和Wireshark
2. Http、Https及其原理
3. 手机抓包
4. Charles的附加功能

一、抓包工具

  • Fiddler
  • 是之前我用Window电脑的时候,特别喜欢用的工具,而且当时的Fiddler足以满足的我简单的抓包工作,现在也应该更新到Fiddler3了,如果用Windows的朋友可以用Fiddler3进行抓包。
  • Charles
  • 自从换了Mac之后我就喜欢上了这个工具,不过Charles在Windows上同样也有。
  • Wireshark
  • 这个我不是怎么经常用,这个抓包工具可以详细的看到网络请求的三次握手,并且可支持spdy、tcp等等的网络协议抓包,当然其他两个是不支持的。

我将以Charles为例分别抓取Http和Https包:

下载

Mac破解版下载地址:http://download.csdn.net/detail/m694449212/9770583
Win破解版下载地址:http://download.csdn.net/detail/m694449212/9770589
官网链接,需要购买LisenseKey:https://www.charlesproxy.com/
打开界面如下:

第二、Http、Https包

2.1、Http包

2.1.1 清理Charles列表,让抓包更加清晰
2.1.2 以我的CSDN为例(m694449212),通过Chrome点击‘我的博客’,抓到需要的包
从中我们过滤出m694449212的博客包,但是这个过滤的过程需要我们去一个个找(当然如果你的经验比较足或者英语比较好的话,可以发现其实就是blog.csdn.net的包)
2.1.3 分析包
2.1.4 Reuqest
其中比较重要的是Cookie,网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).
同时Cookie在我们爬虫的时候也是一个必不可少的东西,那么如何自动化获取Cookie呢?后面会讲解到。
2.1.5 Response
获取Cookie,通过我以往的经验:
a. 获取Cookie的时候首先需要保证我们的浏览器环境是干净的,我说的干净其实就是清楚当前浏览器保存的Cookie,并重启浏览器。
b. 重启之后我们访问www.csdn.net,当前Host的Request中就不包含Cookie,那么Cookie在哪呢,其实细心点的会发现Cookie在Response的Headers->set-cookie中,并在下次请求中使用到。
c. 那么当我们登录操作并携带Cookie在请求Headers中,那么登录成功之后该Cookie就会生效。之后我们的所有请求携带该Cookie就会是一个正常的请求,并能拿到需要的结果。
关于某些请求携带sign参数的,后面的文章我会讲解到破解Sign函数(其实有时候不是直接的破解而是函数的Hook,有兴趣的可以提前了解下Android或者iOS的Hook,通过IDA找到sign函数,并使用cycript调用),之后的文章我会以国外的知名App Instagram为例,Hook它的签名函数。
来个美女提提神(图片来自Instagram的Https包数据),继续往下看

2.2、Https包

2.2.1、Https简介

SSL相信大家都不陌生。其实Https就是在Http基础上通过SSL协议进行加密之后的网络传输。
并通过非对称和对称加密算法来对密码和数据进行加密。具体看下图:
1. Client明文将自己支持的一套加密规则、一个随机数(Random_C)发送给服务器.
2. Server返回自己选择的加密规则、CA证书(服务器地址、加密公钥、以及证书颁发机构)、外加一个通过加密规则和HASH算法生成的随机数(Random_S)
3. Client收到Server的消息之后会:
a:验证证书(地址是否是正在访问的和机构是否合法)、
b:自己生成一个随机的密码(Pre_master)并使用CA证书中的加密公钥进行加密(enc_pre_master)、
c:计算出一个对称加密的enc_key,通过Random_C、Random_S、Pre_master、
d:生成握手信息:使用约定好的Hash算法计算握手信息,并通过enc_key和约定好的加密算法对消息进行加密
4. Client将enc_pre_master、加密之后的握手消息发送给Server
5. Server收到消息之后
a: 收到enc_pre_master之后,会通过私钥进行解密(非对称加密算法)得到pre_master
b: 通过pre_masrer、Random_C、Random_S计算得到协商密码 enc_key
c: 通过enc_key解密握手信息,验证HASH是否和客户端发来的一致
d: 生成握手信息同样适用enc_key和约定好的加密算法
6. Server发送握手信息给Client,也就是说Server验证通过了Client,并再次发送消息给Client让其验证自己
7. 客户端拿到握手信息解密,握手结束。客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束。
8. 正常加密通信,握手成功之后,所有的通信数据将由之前协商密钥enc_key及约定好的算法进行加密解密。

其中Https使用到的加密算法如下:

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256

2.2.2、 Charles抓取Https原理

Charles本身就是一个协议代理工具,在上篇的Https原理上,客户端和服务器的所有通信都被Charles捕获到。
如下图:

主要步骤如下:

1. Charles捕获Client发送给Server请求,并伪装成客户端向服务器发起握手请求
2. 服务器响应,Charles获取到服务器的CA证书,并用根证书公钥进行解密,获取到服务器的CA证书公钥。然后Charles伪造自己的CA证书,伪装为服务器的CA证书发送给客户端
3. 客户端收到返回之后,和上面讲到的过程一样,证书校验、生成密码、并使用Charles伪装的证书公钥进行加密,并生成 Https通信的协商密码enc_key
4. Charles捕获到Client发来的重要信息,并使用自己伪造的证书私钥将密文解密,获取到enc_key.然后Charles使用服务器之前返回的证书公钥对明文进行加密并发送给服务器
5. 去之前一样,服务器收到消息之后,用私钥解开并建立信任,然后发送加密的握手信息。
6. Charles截获服务器发来的握手密文,并用对称密钥解开,再用自己伪造证书的私钥加密传给客户端
7. 客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了”信任“。
  • 其实在整个过程中,最重要的就是enc_key,由于Charles从一开始伪造并获取了enc_key,所以在整个通信过程中Charles充当第三者,所有信息对其来讲都是透明的。
  • 其次就是根证书,这是https一个信任链的开始。这也是Charles伪造的CA证书能获得双方信任的关键。

2.2.3、演示Charles抓取Https

原理清楚之后,其实操作就很简单了,操作的核心点就是根证书。

  • 安装根证书(Charles Root Certificate)


  • 让系统信任该证书


  • 接下来将需要抓的Https链接加入到CharlesSSL代理规则中,443是Https的默认端口



    当然你也可以像我最后一条一样,使用 *:443 来抓取所有https的包。

  • 通过浏览器访问自己要抓的链接,这样所有的Https都可以像Http一样明文展示都我们面前。


第三、手机抓包

手机抓包的原理其实也很简单,让手机和抓包工具处于同一局域网,并将手机的WifiProxy手动代理到电脑的Ip和Charles设置的抓包端口上,具体操作可在网上找到,具体见http://blog.csdn.net/richer1997/article/details/52198024

我这边主要讲一下手机端Https包的抓取,其实和浏览器的抓取一样:
  • 首先需要安装Charles的根证书到手机上。


  • 点击之后,会弹出让你在手机上配置代理到对应Ip和端口,之后通过手机浏览器打开chls.pro/ssl


使用手机访问该链接之后,会自动被识别为证书,并跳转到:(当然我这里已经是安装过的,未安装的点击右上角安装即可)
  • 之后就类似与PC端抓Https包原理一样,手机端的证书被作为根证书使用,并通过Charles拿到enc_key.将所有通信过程透明化。

第四、Charles的附加功能

在我刚开始使用Charles的时候,我只是用来简单的抓抓接口,直到我看到别人使用BurpSuite自定义请求数据并Repeat的时候,我在考虑Charles是否也有这种功能。当然不出我所料,Charles也是支持的。

在对应接口上点击右键,出现菜单,其中我经常使用到的就是Compose、Repeat和RepeatAdvanced
Compose:可直接自定义对应的请求,并执行该请求。这个对我们抓包用处很大。我们可以从中得到该接口的必填参数等等的。
Repeat:很简单就是执行一次重复请求操作
Repeat Advanved:重复请求的高级操作,可自定义重复的次数、每隔多少秒执行。这个功能对于我们的接口的压测是很有用的。
除了这几个我常用的功能,当然Charles还有更多更加实用的功能,如过滤、排序等等。还需要大家去自行使用,发现更多更好、并适用于自己的功能。

小结

抓包的用处其实很大,有时候可以用来调试我们的接口、有时候也可以用来做一些对工作有益的事,当然并"不建议"用来攻击别人的网络。

扫描‘二维码’公告号,将自动执行代码


生活不止眼前的苟且,还有手下的代码、和嘴上的扯淡

个人博客: https://www.alision.com

Github:https://www.github.com/xiyouMc

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容