使用tcpdump抓取Android模拟器或真机上的HTTP包

前面我介绍了如何使用Fiddler在真实的Android手机上抓取HTTPS包的方法。但是那个方法有一个比较大的前提条件,就是被分析的应用程序必须支持代理服务器,如果不支持的话则无能为力。然而现实的情况是,谷歌不强制所有的应用程序必须支持代理,市面上就有很多应用根本不支持代理,对于这一类的应用,可以使用tcpdump来抓包,然后配合Wireshark对抓出的包进行分析。

Android SDK提供的模拟器中已经自带了tcpdump工具,所以如果是在模拟器中分析的话,不需要做任何操作就可以使用了。

但是,在Android真机上是不带tcpdump的,需要自己编译并将编译好的可执行文件推送到真机上。能够这样做的前提条件是,你的手机必须被root过。至于如何root,不同手机有不同的工具和方法,关于这部分已经超出了本文的范围,大家可以自己上网查找。下面假设你已经拿到了root权限,并且你的PC上已经装好了Android SDK,手机打开了调试模式,可以通过adb连接上设备,具体安装tcpdump的步骤如下:

1)下载预编译好的tcpdump

tcpdump是源码发布的(http://www.tcpdump.org/,目前最新版本是4.6.2),需要在Linux机器上编译,但是Android手机根本不带编译环境,而在Ubuntu上搭建编译环境也是一件很麻烦的事情。幸好,有人预先编译好了一个Android可用的版本,可以在这里下载。

2)tcpdump推送到手机上

adb push \tcpdump /sdcard/tcpdump

要想把一个文件推送到其它敏感位置必须要有root权限,所以这里先将tcpdump推送到不需要什么权限的SD卡上。

当然,你也可以放到任何其它不需要特殊权限的目录下,这 里只是做个跳板。

3)tcpdump放到/system/xbin目录下

adb的命令行模式连接上手机,并切换到root用户:

adb shell
su
将前面推送到手机上的tcpdump文件拷贝到/system/xbin目录下:
cp /sdcard/tcpdump /system/xbin/tcpdump
为什么要放到这个目录下呢?来看看Android的PATH环境变量里面的内容:

清楚了吧,放到这个目录下,以后无论工作目录在哪里,直接运行tcpdump就行了。

要是放在别的目录下,每次用还要敲完整的路径,麻烦。

在这一步中,有可能还会遇到一个问题,在我的Nexus 5上就报了这个错误:

这是由于/system目录在系统启动mount的时候是用read only模式,只需要用read write模式重新mount一下就行了:

mount -o remount,rw /system

4)更改tcpdump文件的权限

拷贝过去后,tcpdump文件的权限是600,不可以执行,直接加上所有的权限,变成777就好了:

chmod 777 /system/xbin /tcpdump

经过以上的步骤,tcpdump应该已经可以在你的真机上运行了。

不过,如果你正在使用的是Android 5.0的设备,这个预编译的版本运行的时候会报错:

这是由于那个预编译的版本在编译的时候没有加上PIE(位置无关可执行文件)选项,而Android 5.0开始强制所有的可执行文件必须是位置无关的,所以一运行就会报错。

这个必须要加上PIE选项重新编译才能解决。我自己编译了一个版本,可以在Android 5.0设备上使用,可以从这里下载。

好了,前面讲了这么多,到这里你应该已经可以要么在模拟器上,要么在真机上运行tcpdump了。

下面讲讲如何通过tcpdump抓包,具体步骤如下:

1)使用tcpdump抓包

执行tcpdump命令,开始抓包:

tcpdump –i any –p –n –s 0 –w/sdcard/capture.pcap
这里简单解释一下tcpdump的几个常用参数:

-i:指定要监听的网络端口,如果没有指定则默认监听第一个网络端口,any表示监听所有的网络端口。

-p:不使用混杂模式,如果打开了混杂模式,会拿到很多无关紧要的包,给后面的分析造成干扰。

-n:直接以IP地址显示,而不将其转换成DNS域名。

-s:指定捕获数据包的长度,如果是0则表示抓取完整的数据包。

-w:表示将抓包的结果写入到一个文件中,而不是显示在终端上。

这时你可以运行你想要抓包的程序,想抓多少抓多少。当你觉得抓够了的时候,直接按CTRL+C推出就行了。

2)将抓包文件PullPC

网络包已经在设备上抓好了,现在需要将其拉回到PC上:

adb pull/sdcard/capture.pcap ./capture.pcap

3)使用Wireshark对网络包进行分析

Wiresharkhttps://www.wireshark.org/)是一个非常有名的网络抓包工具,相信很多人如果想在PC上抓包的时候都会首选它。这里我们只是用它的分析功能。

到了这一步就很简单了,直接双击.pcap文件,Wireshark会自动打开这个文件进行分析。接下来,就可以自己设计过滤规则,分析关心的包,找出来龙去脉。

使用tcpdump抓取Android模拟器或真机上的HTTP包_第1张图片

最后总结一下这种方法的优缺点。

优点嘛,只有一个,就是可以分析那些不支持代理的Android应用。

缺点嘛,有两个:

1)不能分析HTTPS的包;

2 )如果在真机上分析的话,必须要有设备的 root 权限。

你可能感兴趣的:(Android)