# 浅析手机抓包方法实践
0x00 摘要
=======
* * *
在移动逆向分析以及 App 开发的时候,总会需要对其网络行为进行监控测试,本文总结一些抓包思路,并对其使用方法进行实践
笔者认为在抓包界,Wireshark 应该算是综合排名第一的工具(其实 Wireshark 自带的命令行工具 tshark 更牛逼)
本文总结记录了 5 种抓包方式,掌握其一即可进行实践,欢迎大家一起交流分享
0x01 基于 Wireshark
=================
* * *
**实验步骤:**
### 1.1 在电脑主机上使用`猎豹 Wifi`之类的工具,开启热点,将所要测试的手机连接该热点,记录其IP地址
![Alt text](http://drops.javaweb.org/uploads/images/d1d0b66e314fbee7347beaa79bffa30e5afd74d6.jpg)
### 1.2 使用 Wireshark 对以上 IP 地址进行捕获
Capture——Options
![Alt text](http://drops.javaweb.org/uploads/images/023ad0505c0994f1d166a69cbb8b98002de59635.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/c73a517d17e228308d4248233c3ce5c0909f8d96.jpg)
### 1.3 总结
该方法简单粗暴高效,可以将捕获的数据包随时保存下来,便于后续分析或者进行 PCAP 可视化分析。
关于命令行工具 tshark 在此不做赘述,感兴趣的读者自行研究。
0x02 基于 tcpdump
===============
* * *
**实验环境:**
下载安装 Genymotion 安卓虚拟机,在该模拟器环境种进行实践操作(基于实体手机亦然,前提是**手机必须得 ROOT**)
笔者仅在 Android 系统下测试,未在 iOS 系统下实验
**实验步骤:**
### 2.1 说明
模拟器中自带的 tcpdump 工具,位于: /system/xbin/ 目录下
### 2.2 数据包捕获
可以通过`adb shell`命令在 CMD 模式下连接模拟器,`su`到 root 模式进行抓包
“`
tcpdump -vv -s 0 -i eth1 -w /sdcard/capture.pcap
“`
参数说明:
* -vv:获取详细的包信息(注意是两个 v 不是 w)
* -s 0:不限数据包的长度,如果不加则只获取包头
* -w xxx.pcap:捕获数据包名称以及存储位置(本例中保存在 sdcard 路径下,数据包名为 capture.pcap)
* -i eth1:捕获制定的网卡(在 genymotion 虚拟机中,使用 busybox ifconfig 命令可以查看相关信息,一般 genymotion 的 ip 地址都为 10.xx.xx.x)
* 如果你想指定捕获的数据包长度,可以使用 -c 参数(例如 -c 128)
捕获结束,直接按 Ctrl + C 即可
### 2.3 数据分析
将捕获到的数据包拖到本地使用 Wireshark 进行查看:
“`
adb pull /sdcard/capture.pcap C:\tmp
“`
**TIPS:将数据包文件 push 到手机上命令为**
“`
adb push C:\tmp\capture.pcap /sdcard/
“`
0x03 基于 Fiddler 4
=================
* * *
**实验步骤:**
### 3.1 下载 FIddler 4
[点击下载 Fiddler 4](https://www.telerik.com/download/fiddler)
### 3.2 设置 Fiddler 4
打开Fiddler,Tools-> Fiddler Options (配置完成记得重启 Fiddler)
![Alt text](http://drops.javaweb.org/uploads/images/44474420c08cd24b3933c037cf709b21eea5e76f.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/d28163cea16d375aa68cbeb0342b010656d482c9.jpg)
### 3.3 设置手机代理
首先,获取安装 Fiddler 4 的 PC 对应的 IP 地址(ipconfig):
![Alt text](http://drops.javaweb.org/uploads/images/69cdbdeaf24059a79eb5f14eedc79bab05bf234a.jpg)
确保手机和 PC 是连接在同一个局域网中!!!
下面对手机进行设置(笔者使用小米测试机):点击手机中“设置”——Wi-Fi——选择已经连接的wifi——代理设置改为手动
![Alt text](http://drops.javaweb.org/uploads/images/53cc95fa3b4cd4070b42c3edd98d113ddafe7328.jpg)
下载 Fiddler 的安全证书
使用手机浏览器访问:`http://10.2.145.187:8888`,点击”FiddlerRoot certificate”,然后安装证书即可。
至此,已经全部设置完毕。
### 3.4 数据包捕获
重新打开 Fiddler 4,然后打开手机中的浏览器,访问任意网址,Fiddler 抓包信息如下:
![Alt text](http://drops.javaweb.org/uploads/images/92cf92ebb37ea8692f59a3569627546cfbf5ab0b.jpg)
Enjoy!
0x04 基于 Charles
===============
* * *
**实验环境:**
win7 + Charles v3.11
一般使用 Charles 都是基于 MAC OS ,笔者在 mac 平台以及 windows 平台均试验过,操作过程和思路基本一致,因此,本文以 win7 为测试环境
**实验步骤:**
### 4.1 捕获 http 数据包
手机设置代理:
![Alt text](http://drops.javaweb.org/uploads/images/53cc95fa3b4cd4070b42c3edd98d113ddafe7328.jpg)
打开 Charles 即可捕获数据包(Proxy —— Proxy Settings):
![Alt text](http://drops.javaweb.org/uploads/images/015d22ca37cbb3df0c3697dc8a1f36796598630d.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/c0b698e2140424f6bc24f33d90ca34f60c40c975.jpg)
### 4.2 捕获 https 数据包
手机端安装证书:
Android 手机或者 iPhone 均可直接访问[http://www.charlesproxy.com/ssl.zip](http://www.charlesproxy.com/ssl.zip),然后根据图示点击证书安装
![Alt text](http://drops.javaweb.org/uploads/images/87eafe3873ce734f658e9e2700129d066c613ce9.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/6cd45c3d2cd5b17c60095f445ea580822e5be0fd.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/cbab2c9e10a660f08c8e939b9831460a9c1d9dbd.jpg)
设置 Charles:
选择 Proxy —— SSL Proxying Settings —— Locations —— Add
在弹出的表单中填写 Host 域名(也就是你想要抓包链接的主机名),以及对应的 Port 端口(此处相当于过滤作用)
当然,你可以采用更加粗暴的方式:使用通配符,例如你想要捕获所有的 https 包,这里也可以直接都为空,表示捕获所有的主机和端口;或者都分别填“*”星号,匹配所有的字符,捕获所有的 https。
![Alt text](http://drops.javaweb.org/uploads/images/1fd288c818eaec8fcc37b95b51492b590182a74e.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/c2af40cc916d906b700d6aee85f1c2c9ab8576cc.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/6ebc986c4ddc709a18ffba4a6c254ca6588f952d.jpg)
0x05 基于 Burpsuite
=================
* * *
**实验步骤:**
### 5.1 捕获 http 数据包
PC 端 Burpsuite 设置:
![Alt text](http://drops.javaweb.org/uploads/images/63eefc0c167bf69783621667cdf9d93126cc2a1e.jpg)
手机端代理设置方法同以上 3.3 4.1
打开 Burpsuite 即可捕获 http 数据包:
![Alt text](http://drops.javaweb.org/uploads/images/fbd74959e41c3e2d7c2c4885b80c869a3fa7e96b.jpg)
### 5.2 捕获 https 数据包
手机端设置好代理之后,使用浏览器访问:`http://burp/`
![Alt text](http://drops.javaweb.org/uploads/images/e5be48e742edcebd017ff1a7b5bd6d577ec8532b.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/a05a7bee4d8e57ab248a45d9f45daaf8249d08cc.jpg)
此处存在一个问题:下载的证书是 der 格式的,我们手机端安装的是 crt 格式的,需要使用 firefox 浏览器转一下格式:可以首先在 Brupsuite 中导出 der 格式证书,然后导入火狐浏览器,然后从火狐浏览器导出证书格式为 crt
![Alt text](http://drops.javaweb.org/uploads/images/2de1636ea37e2420d07d915850d15834dd683fa7.jpg)
打开火狐浏览器:工具——选项——高级——证书——查看证书
![Alt text](http://drops.javaweb.org/uploads/images/efcfa9703fa1c0e0afd23cd5601a2a2f33da1805.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/bfe6f8ae0d0bc30b974f911e0c909d252e06b3c5.jpg)
![Alt text](http://drops.javaweb.org/uploads/images/077218ca3bc04278e1a825e4bd320b454409a48b.jpg)
成功捕获 https 数据包
![Alt text](http://drops.javaweb.org/uploads/images/dd8f3ef382372b7c61d056adb851ac97f63b4e78.jpg)
0x06 总结
=======
* * *
* 当我们停止捕获数据包时,将Fiddler 或 Charles 关闭,此时手机端是无法正常访问网络的,因为设置了代理,这时候需要将代理关闭,即可正常浏览网页
* 对于大多数走代理的应用可以选择 Fiddler 或 Charles,无需 root,一次配置,终身使用;对于不走代理的 App 可以利用 tcpdump 捕包,然后使用 Wireshark 查看;最简单便捷的便是第一种方法**「0x01. 基于 Wireshark」**
* 以上所有工具各有优劣,读者可以根据工作环境,按需使用,个人觉得一般情况下使用 Wireshark + Fiddler 或者 Wireshark + Charles 即可完成各平台的抓包分析任务
* 以上工具中只有BurpSuite可以对抓包过程进行交互式操作;Wireshark支持的协议最多,也更底层,功能强大,但过于沉重
* 对于本文涉及的相关工具的安装、设置、破解、详细使用,不在本文讨论范围之内(Charles 免费版其实还比较厚道,如果重度需要,建议购买正版),本文旨在浅析捕获移动终端数据包的方法和思路
0x07 参考文献
=========
* * *
1. [抓包工具Fidder详解](http://blog.csdn.net/jiangwei0910410003/article/details/19806999)
2. [Mac上的抓包工具Charles](http://blog.csdn.net/jiangwei0910410003/article/details/41620363)
3. [网络抓包工具Charles的介绍与使用](http://blog.csdn.net/chenyufeng1991/article/details/50370248)
4. [charles使用教程指南](http://drops.wooyun.org/tips/2423)
5. [Android安全测试之BurpSuite抓包](http://my.oschina.net/cve2015/blog/545832)
6. [Android利用tcpdump和wireshark抓取网络数据包](http://www.trinea.cn/android/tcpdump_wireshark/)
请登录后查看评论内容