-
Notifications
You must be signed in to change notification settings - Fork 13
程序员都应该会的抓包工具 Charles
Mark edited this page Mar 13, 2017
·
1 revision
Fiddler
- 是之前我用Window电脑的时候,特别喜欢用的工具,而且当时的Fiddler足以满足的我简单的抓包工作,现在也应该更新到Fiddler3了,如果用Windows的朋友可以用Fiddler3进行抓包。
Charles
- 自从换了Mac之后我就喜欢上了这个工具,不过Charles在Windows上同样也有。
Wireshark
- 这个我不是怎么经常用,这个抓包工具可以详细的看到网络请求的三次握手,并且可支持spdy、tcp等等的网络协议抓包,当然其他两个是不支持的。
我将以Charles为例分别抓取Http和Https包:
官网链接,需要购买LisenseKey:https://www.charlesproxy.com/
b. 重启之后我们访问www.csdn.net,当前Host的Request中就不包含Cookie,那么Cookie在哪呢,其实细心点的会发现Cookie在Response的Headers->set-cookie
中,并在下次请求中使用到。
关于某些请求携带sign参数的,后面的文章我会讲解到破解Sign函数(其实有时候不是直接的破解而是函数的Hook,有兴趣的可以提前了解下Android或者iOS的Hook,通过IDA找到sign函数,并使用cycript调用),之后的文章我会以国外的知名App Instagram为例,Hook它的签名函数。
来个美女提提神(图片来自Instagram的Https包数据),继续往下看
a:验证证书(地址是否是正在访问的和机构是否合法)、
b:自己生成一个随机的密码(Pre_master)并使用CA证书中的加密公钥进行加密(enc_pre_master)、
c:计算出一个对称加密的enc_key,通过Random_C、Random_S、Pre_master、
d:生成握手信息:使用约定好的Hash算法计算握手信息,并通过enc_key和约定好的加密算法对消息进行加密
a: 收到enc_pre_master之后,会通过私钥进行解密(非对称加密算法)得到pre_master
b: 通过pre_masrer、Random_C、Random_S计算得到协商密码 enc_key
c: 通过enc_key解密握手信息,验证HASH是否和客户端发来的一致
d: 生成握手信息同样适用enc_key和约定好的加密算法
- 非对称加密算法:RSA,DSA/DSS
- 对称加密算法:AES,RC4,3DES
- HASH算法:MD5,SHA1,SHA256
主要步骤如下:
- 其实在整个过程中,最重要的就是enc_key,由于Charles从一开始伪造并获取了enc_key,所以在整个通信过程中Charles充当第三者,所有信息对其来讲都是透明的。
- 其次就是根证书,这是https一个信任链的开始。这也是Charles伪造的CA证书能获得双方信任的关键。
原理清楚之后,其实操作就很简单了,操作的核心点就是根证书。
- 安装根证书(Charles Root Certificate)
- 让系统信任该证书
- 接下来将需要抓的Https链接加入到CharlesSSL代理规则中,443是Https的默认端口 当然你也可以像我最后一条一样,使用 *:443 来抓取所有https的包。
- 通过浏览器访问自己要抓的链接,这样所有的Https都可以像Http一样明文展示都我们面前。
手机抓包的原理其实也很简单,让手机和抓包工具处于同一局域网,并将手机的WifiProxy手动代理到电脑的Ip和Charles设置的抓包端口上,具体操作可在网上找到,具体见http://blog.csdn.net/richer1997/article/details/52198024
- 首先需要安装Charles的根证书到手机上。
- 点击之后,会弹出让你在手机上配置代理到对应Ip和端口,之后通过手机浏览器打开chls.pro/ssl
- 之后就类似与PC端抓Https包原理一样,手机端的证书被作为根证书使用,并通过Charles拿到enc_key.将所有通信过程透明化。
在我刚开始使用Charles的时候,我只是用来简单的抓抓接口,直到我看到别人使用BurpSuite自定义请求数据并Repeat的时候,我在考虑Charles是否也有这种功能。当然不出我所料,Charles也是支持的。
抓包的用处其实很大,有时候可以用来调试我们的接口、有时候也可以用来做一些对工作有益的事,当然并"不建议"用来攻击别人的网络。
欢迎关注我的公众号: DeveloperPython
二维码