转 Android智能手机上捕获数据包

如何在Android智能手机上捕获数据包?

本文由CSDN-蚍蜉撼青松【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!html

        当前Android系统愈来愈流行,不管是对于安卓应用的开发人员,仍是对于网络安全的研究人员,都有可能须要掌握捕获Android应用通讯数据包的方法。根据技术手段不一样,经常使用的抓包方法分两类,一类是经过Android智能移动终端所接入的上层网络设备或线路获取数据流,另外一类则是直接在Android移动终端上监听数据流。本文主要探讨第二类方法,下面分别就前期准备、通常步骤、常见问题、扩展说明四方面详谈。(因为本人使用的是Android手机,因此后文在描述的时候都说的是Android手机,但其实本文所说的内容是Android移动终端基本均可以通用的)linux

        所谓学以至用,建议你们看了本文以后仍是能实际选择一个安卓应用分析一下。我本人利用本文所说的抓包技术实际分析了百度贴吧安卓客户端的网络通讯行为,分析结果参见个人上一篇博文《百度贴吧客户端(Android)网络通讯行为分析》,也可直接下载PDF版的完整分析报告,地址是:http://download.csdn.net/detail/ping_fani07/6028411shell

 

1、前期准备

1.1 为Android手机的Root权限解锁

        Root是Android手机系统中的超级管理员帐户,Root权限(即底层权限)和咱们在Windows系统下的Administrator权限相似。默认状态下,为了防止系统文件被更改,Android系统并无把Root帐户开放给咱们普通用户,咱们必须先为Root权限解锁才能获取Root权限。网上通常把Android手机的Root权限是否解锁,简称为Android手机是否root过。windows

        这些年网上涌现了大量手机root工具,使用你本身的手机型号搜,应该能找到合适你的工具。做为一个华为党,俺最后使用了刷机精灵,两次以后成功解锁Root权限。解锁成功后,刷机精灵会在手机上安装一个受权管理工具,以帮助我们管理哪些应用和程序能够获取Root受权。最新版的受权管理工具还自带了一个工具箱,能够自由卸载手机上的预装软件和系统软件,很省心,很方便!刷机精灵使用教程参照:《手机root权限获取方法:[4]刷机精灵》。安全

1.2 下载相关工具

        要用到的工具主要有两个,tcpdump(Android版) 和 adb 。打包下载地址为:http://download.csdn.net/detail/ping_fani07/6218853网络

        tcpdump是Linux系统中广泛使用的一款开源网络协议分析工具,使用方法详参:《Tcpdump的详细用法》。tcp

        adb是谷歌提供的安卓远程调试工具,应该使用方法详参:《ADB命令介绍》。若是你前面使用了刷机精灵为手机的Root权限解锁,那么能够在刷机精灵的实用工具里找到Adb命令行,直接调用此工具,而无需专门下载;又或者你之前搭建过安卓开发环境,那么应该也能够在***\platform-tools目录下找到该工具。 工具

 

2、通常步骤

        为了让你们看起来方便,我先把全部步骤拉通放在一张图上,给你们一个直观的印象,如图2-0。(考虑到通用性,在上传tcpdump前修改了手机上目的目录权限,部分手机不用。)url

pic 2-0

图2-0 在某手机上第一次抓包完整过程.net

下面是分步解说,其中有些步骤是仅在第一次使用的时候才须要,用【仅需第一次】标注(也就是图2-0中用白色方框圈起来的部分)。

  • (1)将 adb.exe 放在合适的目录下,并将该目录的完整路径添加到Windows的 PATH 环境变量中。【仅需第一次】【已经搭建过安卓开发环境则不须要此步】
  • (2)打开windows命令提示符窗口,输入命令: adb version ,若是正常显示adb的版本,则说明上一步环境变量设置没有问题,且adb.exe自己完整,如图2-1;反之,则多是adb.exe自己文件损坏,环境变量设置有误,或者环境变量设置后还没有生效,请自行检查。【仅需第一次】

pic 2-1

图2-1 检查adb工具是否正常可用

  • (3)勾选Android手机的"USB调试",将Android手机与电脑USB相连,在命令提示符窗口输入命令: adb devices ,若正常显示所链接手机的设备号,则说明链接成功,如图2-2。(注:有些手机的设备号可能读取有问题,显示的是一个问号,这也是能够的,并不会影响后面的操做)

pic 2-2

图2-2 查看PC与安卓手机是否链接成功

  • (4)将 tcpdump (for Android)上传至Android手机上,在命令提示符窗口中输入命令:adb push  <LocalPath of tcpdump>   /data/local/tcpdump,如图2-3。【仅需第一次】

pic 2-3

图2-3 上传tcpdump

  • (5)给 tcpdump 增长可执行权限,如图2-4。【仅需第一次】
    • 在命令提示符窗口中使用命令 adb shell 远程打开Android手机上的终端Shell;
    • 在当前Shell中使用su命令获取管理员权限;
    • 在当前Shell中使用 chmod 命令修改 tcpdump 的权限。

pic 2-4

图2-4 修改 tcpdump 的权限

  • (6)使用 tcpdump 抓包,并将结果写入一个pcap文件保存,如图2-5。
    • 在命令提示符窗口中使用命令 adb shell 远程打开Android手机上的终端Shell;
    • 在当前Shell中使用 su 命令获取管理员权限;
    • 在当前Shell中输入命令: /data/local/tcpdump -p -s 0 -w /sdcard/001.pcap;
    • 在Android手机上进行相关操做,产生通讯数据包,通讯行为完成后在命令提示符窗口中使用 Ctrl + C 组合键退出当前Shell,以中止抓包。

pic 2-5

图2-5 抓包过程 

上述过程当中,tcpdump命令的参数含义以下:
  # "-p": disable promiscuous mode (不使用混杂模式)
  # "-s 0": capture the entire packet(-s参数用以指定数据包捕获长度,此处指定为0,意为抓取完整的数据包)
  # "-w *.pcap": write packets to a file (将结果写入一个pcap文件,而不在终端上直接显示)

  • (7)将抓包结果下载到本地PC上。在命令提示符窗口中使用命令:adb pull /sdcard/001.pcap <LocalPath of PcapFile >,如图2-6。

pic 2-6

图2-6 下载抓包结果到本地

  • (8)使用Wireshark等协议分析工具查看抓包结果。

 

3、常见问题的解决

3.1 部分手机使用adb的push命令上传tcpdump失败

提示信息:"failed to copy 'd:/tcpdump' to '/data/local/tcpdump': Permission denied";

出错缘由:该Android手机上的目的目录没有写权限;

解决方法:给Android手机上的目的目录/data/local增长写权限,步骤如图4-1;

pic 4-1

图4-1 给/data/local目录增长写权限

3.2 部分手机使用chmod命令改变文件或目录的权限时失败

提示信息:"Read-only file system";

出错缘由:从字面上理解,就是说文件系统是只读的,不容许改权限;【好像是在同窗的小米手机上遇到的这个问题】

解决方法:从新挂载根目录,并在挂载的时候指定为可读写。步骤以下,

  • 在命令提示符窗口中使用命令 adb shell 远程打开Android手机上的终端Shell;
  • 在当前Shell中使用 su 命令获取管理员权限;
  • 在当前Shell中输入命令: mount -o remount,rw / 。以后再使用chmod命令应该就没问题了。

 

4、扩展与说明

4.1 上传tcpdump到Android手机的时候,是否必定要选择/data/local目录

        应该不是惟一的选择,可是我试过上传到一些其余的目录/sdcard等,会遇到更多的权限限制问题。因此出于方便的考量,建议仍是都尽可能固定传往/data/local目录。

4.2 使用终端模拟器代替adb工具的shell命令

        终端模拟器是一款Android平台上的Linux Shell工具,至关于Windows中的CMD命令提示符,有了它,咱们能够在Android上进行Linux系统的命令操做。

        经过前面的描述,咱们能够看出,adb工具在这主要起到两个做用,一是基于push、pull命令的文件上传下载(本地PC与Android手机之间的文件交换);二是基于shell命令对Android内置Linux命令行Shell的远程访问(经过Android内置Shell来执行su、chmod、tcpdump等命令或程序)。其中第二个功能可使用终端模拟器代替。例如图3-1

pic 3-1

图3-1 使用终端模拟器执行系统命令

4.3 使用USB文件传输功能代替adb工具的pull命令

        咱们前面在运行tcpdump时,使用-w参数指定了抓包结果的文件保存路径在/sdcard目录下。/sdcard目录对应安卓手机的内部存储空间,也就是咱们手机插上USB线,选择“打开USB存储设备”后,用Windows的资源管理器打开所看到的根目录,如图3-2。所以咱们能够用USB链接手机后,像访问U盘通常直接获取咱们前面抓包生成的001.pcap文件。

pic 3-2

图3-2 /sdcard目录对应PC上可见的手机内部存储空间的根目录

4.4 chmod命令中3位(或4位)八进制数字所表明含义的说明

        那些八进制数字对应着咱们要为目标文件/目录设定的权限。先说3位的状况,假使咱们将三位八进制数分别看作a,b,c的话,那么a,b,c分别表示User(该档案的属主)、Group(与该档案的属主属于同一个组的用户)、及Other(其余用户)的权限。

        八进制的a/b/c能够转成3位二进制数,这三位数的取值从高到低分别对应是否具备执行权限。对应位置1,则有相应权限;反之若置0,则无相应权限。例如:

  • 777 [111,111,111],全部用户均有读、写、执行权限;
  • 700 [111,000,000],只有档案的全部者拥有读、写、执行权限,其余用户无权限;
  • 644 [110,100,100],只有档案的全部者拥有读、写权限,其余用户只有读权限。

        回看前文,咱们在修改 /data/local 权限时设置为777,算是最简单方便,但也是最不安全的该法。能够根据此处的介绍,你能够自行计算权限值该设为多少才是最科学的。

        至于4位八进制数,则是在3位八进制数的最左边加上1位八进制数来设置特殊属性,该特殊位默认取0。详参:《linux系统中 chmod nnnn file 命令中的n 怎么是四位啊不是三位吗?

4.5 chmod命令中用数字表示的权限值是否可用文本字符串代替

        在Linux下工做过的童鞋应该知道,chmod命令中的权限值除了能够用上文所述3位/4位八进制数表示之外,也能够用形如: [ugoa...][[+-=][rwxX]...] 形式的字符串表示,以下:【如下例子取自博文《chmod 命令详解》,谢谢该文博主lyg105504(林榆耿)】

  • 例1.如下两条命令做用相同,都是给FileName的属主分配读、写、执行的权限,给FileName的属主所在组分配读、执行权限,给其余用户仅分配执行权限

# chmod 751 FileName

# chmod u=rwx,g=rx,o=x FileName

  • 例2.如下三条命令做用相同,都是为全部用户仅分配读权限

# chmod 444 FileName

# chmod =r FileName

# chmod a-wx,a+r FileName

        那么在Android系统中是否可用文本字符串形式的代替八进制数形式的权限值呢?以我实验的结果来看,是不能够的,系统给的错误提示是:"Bad mode"。多是系统自己不支持吧。

相关文章
相关标签/搜索