GVKun编程网logo

Android中使用tcpdump、wireshark进行抓包并分析技术介绍(android tcpdump抓包)

21

在这里,我们将给大家分享关于Android中使用tcpdump、wireshark进行抓包并分析技术介绍的知识,让您更了解androidtcpdump抓包的本质,同时也会涉及到如何更有效地1.8抓包工

在这里,我们将给大家分享关于Android中使用tcpdump、wireshark进行抓包并分析技术介绍的知识,让您更了解android tcpdump抓包的本质,同时也会涉及到如何更有效地1.8 抓包工具tcpdump和tshark、Android 7.0+使用VirtualXposed+Charles进行抓包、Android 下使用 TCPDUMP 抓包 Wireshark 分析数据啦。、Android 网络开发抓包工具Fiddler、tcpdump和Wireshark的使用的内容。

本文目录一览:

Android中使用tcpdump、wireshark进行抓包并分析技术介绍(android tcpdump抓包)

Android中使用tcpdump、wireshark进行抓包并分析技术介绍(android tcpdump抓包)

本文主要介绍如何使用tcpdump和wireshark对Android应用程序进行抓包并分析,需要说明的是在抓包之前,你的Android设备必须root过了,另外你的电脑必须有Android SDK环境

下载并安装tcpdump

tcpdump链接:http://www.tcpdump.org/

选择一个版本下载并解压提取出其中呃tcpdump文件,然后push到你的手机上去:

复制代码 代码如下:

adb push c:\tcpdump /data/local/tcpdump

进一步操作:

复制代码 代码如下:

adb shellsuchmod +x /data/local/tcpdump

然后就可以开始抓包了:

复制代码 代码如下:

/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap

这时你可以操作应用程序相应的操作了,抓包完毕后ctrl+c停止抓包。

然后将抓到pcap文件传输本地开始进行分析了,这里假设你pull到c盘目录下。

复制代码 代码如下:

adb pull /sdcard/capture.pcap c:/

使用wireshark分析抓包数据

pc上安装wireshark

wireshark下载:http://www.wireshark.org/download.html

如果安装完毕,就可以直接打刚才的pcap文件了。

image

使用过滤器filter

如果抓到的东西过多,可以使用上方的过滤器,比如我只看http协议,并且是由我设备发出的

image

右键记录查看tcp stream

这个功能我比较喜欢,可以查看此次http,client端请求和server端返回的数据

image

还有我觉得更厉害的功能

可以把请求的内容和结果存储下来,比如可以查看post的内容

这是在面板看到的具体的TCP/IP各层的内容

image

但是这种编码之后,并且以字节流发出去的东西很让人讨厌,利用存储可能,你就可以看到具体的结果了:

选择File->Export Objects->HTTP,导出这条记录就可以啦。

image

最后总结下

这是我最近在工作中实际用得到的,但在实际操作tcpdump和wireshark的时候,有更多功能、技巧可以挖掘出来,这篇文章算是对从来没有用过这两个工具的人的一个入门介绍吧。

1.8 抓包工具tcpdump和tshark

1.8 抓包工具tcpdump和tshark

#yum install -y tcpdump    //安装tcpdump
#tcpdump  -nn  -s0  -i eth0  host 192.168.1.100   and  port 80  -c 100  -w 1.cap
-nn : 让第三列和第四列显示成IP+端口号形式
-s0 : 输出完整的包,不加s0不完整
-i : 指定设备名,抓eth1网卡跟eth0
Host : 指定ip
Port : 指定端口
-c : 指定包的数量
-w : 写入指定1.cap文件里
 
#yum install -y wireshark  //安装wireshark抓包工具
#tshark -n -t a -R http.request -T fields -e "frame.time" -e "http.host" -e "http.request.method" -e "http.request.uri"                    //使用wireshark工具


Android 7.0+使用VirtualXposed+Charles进行抓包

Android 7.0+使用VirtualXposed+Charles进行抓包

前言

最近在对一个app进行测试的时候,尝试抓取数据包,发现以前的使用方法失效了,原因是随着安卓版本的提高,对证书的限制越发严格,而我身边的老机子放在学,不在身边,没得办法,只好研究一下怎么绕过这种限制。

经过一方查找,终于发现了一个相对比较简单的办法,这里就开一篇文章,记录一下。

过程

首先下载所需要的工具:

● Charles——

https://www.charlesproxy.com/download/

● Charles-Crack(有能力的同学请支持正版)——

https://github.com/8enet/Charles-Crack

● VirtualXposed——

https://github.com/android-hacker/VirtualXposed/releases

● TrustMeAlready——

https://github.com/ViRb3/TrustMeAlready/releases

PC端

PC端下载并安装好之后,运行Charles。

依次点击菜单栏的:Proxy→Proxy Settings,并按如下进行勾选。

1.png

接着点击菜单栏:Proxy→SSL Proxying Settings

按照下图进行配置:

2.png

若事先确定要抓取的Host和Port信息,可自行进行更改。

接着点击Proxy→Windows Proxy (注:不同版本名称不同),将不再抓取本地流量。

然后点击Help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser,将证书挂载到chls.pro/ssl这个地址上。

手机端用浏览器打开上述地址,将证书下载到本地。这步也可以选择点击菜单栏:Help→SSL Proxying→Save Charles Root Certificate...,来将证书下载到PC,通过数据线、QQ等方法传到手机。

手机端

首先需要把手机与电脑连接到同一个网络内。

打开WLAN,选择对应的WIFI,进行代理配置。如下图所示:

3.png

主机名为PC端的内网IP,端口为配置Charles时Proxy Settings配置中的Http Proxy里的Port内容。

PC端内容不清楚的同学可以打开终端运行如下命令:

● Windows: ipconfig

● Linux: ifconfig

● Mac: ifconfig

成功代理上之后,手机端的流量都会经过PC端的Charles。如果是第一次配置,则Charles会弹出一个窗口,提示有新的连接,点击Allow按钮。

其次需要将电脑端Charles的证书给安装上。

若在PC端选择的是Install Charles Root Certificate on a Mobile Device or Remote Browse,则先需要通过手机浏览器访问chls.pro/ssl这个网址获得证书文件。

这里我使用的手机为小米8 Lite,不同的手机品牌/型号安装证书的方法可能有所不同,具体可通过搜索引擎来获得安装的方法。

依次点击:设置→更多设置→系统安全→加密与凭据→从SD卡安装,接着在文件浏览器中选择你下载好的证书。

然后给证书凭据起个名字,可随意填写,凭据用途选择VPN和应用。

安装完毕后依次点击:信任的凭证→用户,即可查看到刚刚添加进来的Charles证书——XK72 Ltd。

以往我们只需要执行到这里,便可以成功抓取到数据包。不过由于Android的版本更新,对用户自身添加的证书进行了限制,导致我们直接地无法抓取的HTTPS数据包,在Charles里会发现HTTPS的流量都显示Unknown。

4.png

这里我选择的办法是用VirtualXposed工具进行绕过,如果你不想使用这个方法,也可以考虑通过将手机进行Root处理,并将Charles的证书添加到系统级的证书中,不过这并不在本文讨论的范畴。

手机下载好VirtualXposed和TrustMeAlready两个apk文件,安装VirtualXposed.apk之后运行。

在VirtualXposed中,先进入设置页面,点击添加应用,选择你想抓取流量的应用,以及TrustMeAlready.apk文件进行安装。注意:由于TrustMeAlready.apk未安装,需要点击+号按钮,在对应的目录选择apk文件即可。

然后再回到设置页面,点击模块管理,可以看到我们刚刚添加的TrustMeAlready便在其中,点击右边的框框进行勾选,接着回到设置页面,在最下方点击重启、确定。

到这里我们便已经完成了全部的操作,之后你可以在VirtualXposed框架内打开任意的app都可以成功取到HTTPS流量。

5.png

关于Charles的使用方法,本文不再赘述,网络上已有许多教程,稍微花点时间搜索即可。

分析

Android7.0+为何无法直接截取HTTPS流量

在Android开发者平台文档,我们可以查到这么一段话:

默认情况下,来自所有应用的安全连接(使用 TLS 和 HTTPS 之类的协议)均信任预装的系统 CA,而面向 Android 6.0(API 级别 23)及更低版本的应用默认情况下还会信任用户添加的 CA 存储区。应用可以使用 base-config(应用范围的自定义)或 domain-config(网域范围的自定义)自定义自己的连接。

自定义可信 CA|Android Developer

以上说明了安卓6.0以上的版本,在默认情况下应用是不会相信用户添加的CA证书,导致我们使用老方法无法完整地获取到应用发出的HTTPS数据。

VirtualXposed+TrustMeAlready实现原理

简单的说,VXP相当于手机上的虚拟机,在手机原有的系统上创建一块虚拟空间,类似沙盒般的效果,而通过TrustMeAlready插件,便可HOOK到 APK 中所有用于校验 SSL 证书的 API (详情可以点击参考里的《JustTrustMe原理分析》),从而绕过证书校验,故此达到https抓包的效果。

一、什么是Virtual Xposed?

Xposed

众所周知Xposed是来自国外XDA论坛的rovo89开发的一款开源的安卓系统框架。

它是一款特殊的安卓App,其主要功能是提供一个新的应用平台,玩家们安装Xposed框架后,就能够通过Xposed框架搭建起的平台安装更多系统级的应用,实现诸多神奇的功能。

Xposed框架的原理是修改系统文件,替换了/system/bin/app_process可执行文件,在启动Zygote时加载额外的jar文件(/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar),并执行一些初始化操作(执行XposedBridge的main方法)。然后我们就可以在这个Zygote上下文中进行某些hook操作。

Xposed真正强大的是它可以hook调用的方法.当你反编译修改apk时,你可以在里面插入xposed的命令,于是你就可以在方法调用前后注入自己的代码.

Github开源地址: 

https://github.com/rovo89/Xposed

由于Xposed最大的弊端在于设备需要root,并且编写插件模块后需要重启手机(当然也有办法可以不用重启),所以有了VirtualApp。

VirtualApp

VirtualApp是一个App虚拟化引擎(简称VA)。

VirtualApp在你的App内创建一个虚拟空间(构造了一个虚拟的systemserver),你可以在虚拟空间内任意的安装、启动和卸载APK,这一切都与外部隔离,如同一个沙盒。

运行在VA中的APK无需在外部安装,即VA支持免安装运行APK。

熟悉android系统开机流程的应该知道各services是由system server启动一系列的系统核心服务(AMS,WMS,PMS等等)ViratualApp就是构建了一个虚拟system_process进程,这里面也有一系列的核心服务。

VirtualApp主要技术用到了反射和动态代理来实现的

Github开源地址:

https://github.com/asLody/VirtualApp

VirtualXposed

VirtualXposed就是基于VirtualApp和epic 在非ROOT环境下运行Xposed模块的实现(支持5.0~8.1)。

Github开源地址:

https://github.com/android-hacker/VirtualXposed

来源:http://jackzhang.info/2018/04/09/VirtualXposed/

HTTPS抓包为何需要安装抓包工具的CA证书

为了弄清楚这个问题,我们首先得清楚SSL/TLS加密的原理。

通常来说,SSL与TLS都是非对称加密的,有一个公钥与私钥。公钥是公开的,私钥是私密的,存在于服务端。服务器返回的内容会被私钥加密,客户端需要使用公钥进行解密。同样的,用户端的数据便有公钥加密,私钥来解密。

而我们都知道,使用了SSL之后我们便可以保护我们的站点免受中间人攻击。那又何为中间人攻击呢?

举个例子,用户A要使用电脑访问网站http://example.com,而这台电脑已被攻击者B攻陷,那么攻击者B可通过修改A电脑上的hosts文件,将example.com的解析指向B自己的服务器,这样A用户就在”不知情“的情况下中了招。而如果该网站使用了SSL/TLS加密时,用户A在访问https://example.com的时候,需要向服务器请求公钥的内容,又因为公钥是放在CA证书里的,且CA证书通常是由相关的权威CA机构(权威性由微软等操作系统巨头决定)才能发布,类似我们的民政局才能发布身份证。这使得攻击者无法伪造CA证书,因为客户端在收到CA证书之后会根据不同的权威CA机构进行相应的验证,而若颁发该证书的机构不够权威(这使得权威机构也不会随意颁发CA证书,以免自身的权威性被取消),是不会被系统所信任的。这一连串的操作,使得使用了SSL/TLS的网站可以不受中间人攻击的影响。

OK回归正题,那这HTTPS抓包与中间人攻击有何关系呢?其实这两者的原理都是一样的,只不过攻击者的角色变成了抓包工具。

So,这次的问题就变成了中间人攻击如何在HTTPS通信中生效?

我们注意到,中间人攻击的最大难点就在于CA证书的权威性,而我们在没有域名解析权的情况下是不能去向权威CA机构申请证书的。那么既然如此,为何我们不考虑自己“开”一家权威机构呢,这样我们生成的证书不就会被信任了嘛。

这时候,就得需要安装我们抓包工具的CA证书了,这个证书与域名所有者向权威机构申请的证书不同,他是根证书。

因为域名的CA证书的验证过程也是非对称加密验证,也就说,CA证书的验证是由根证书里的公钥来解密验证的。通常操作系统里已经默认信任了一批权威机构的根证书。

所以,当我们把我们自己的根证书添加到操作系统中时,相当于我们自己“开”了一家权威CA机构,这样便可以解决了之前的难题。

借一张网图:

6.png

源自:图解 HTTPS:Charles 捕获 HTTPS 的原理

结语

别看上边方法好像挺简单的,实际操作起来却挺繁琐,网络上的方法大多抄来吵去且时效性很差,导致在操作过程中也走了许多弯路,许多东西还是自己实验之后才知道。看似简单的东西,其实写起来可学习的东西还是很多的,以前自己在学习的时候没有注意的点,现在看起来也是可以细细研究的。不骄不躁,Stay Hungry, Stay Foolish.

参考

● 通过 HTTPS 和 SSL 确保安全|Android开发者文档

https://developer.android.com/training/articles/security-ssl

● VirtualXposed插件开发-Xposed hook 之入门案例

http://jackzhang.info/2018/04/09/VirtualXposed/

● JustTrustMe原理分析

https://bbs.pediy.com/thread-214012.htm

● 图解 HTTPS:Charles 捕获 HTTPS 的原理

https://github.com/youngwind/blog/issues/108

7.png

关注我,获取更多干货哦!

Android 下使用 TCPDUMP 抓包 Wireshark 分析数据啦。

Android 下使用 TCPDUMP 抓包 Wireshark 分析数据啦。

Android下使用TCPDUMP抓包Wireshark分析数据啦。Android下使用TCPDUMP抓包Wireshark分析数据啦。

一、安装 tcpdump

为 Android 手机安装 tcpdump,首先必须将 Android 手机 root,现在市面上常用的 root 工具都很傻瓜很强大,推荐使用 root 精灵,将手机 root 以后,我们就可以为手机安装 tcpdump 了。

先下载 tcpdump 文件, 下载地址:http://pan.baidu.com/s/1sjM7wTZ

adb push tcpdump /sdcard/  
adb Shell  
su  
cat /sdcard/tcpdump > /system/bin/tcpdump

上一条命令如果提示没有权限,接着执行如下命令尝试给 /system 目录增加写权限

su
mount

在 mount 结果中找到包含 /system 的一行,类似如下:

/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0

去处 /system 前半行,即 "/dev/block/platform/msm_sdcc.1/by-name/system",执行如下命令:

mount -o remount /dev/block/platform/msm_sdcc.1/by-name/system /system

这个时候 /system 就拥有写权限了,继续执行:

cat /sdcard/tcpdump > /system/bin/tcpdump  
chmod 777 /system/bin/tcpdump

到此为止,tcpdump 就成功安装到了 "/system/bin/" 目录下,接着用如下命令还是抓包

Android下使用TCPDUMP抓包Wireshark分析数据啦。Android下使用TCPDUMP抓包Wireshark分析数据啦。

二、使用 tcpdump 抓包

tcpdump -i wlan0 -s 0 -w /sdcard/1.pcap

可以结束时使用 Ctrl+c 快捷键让 tcpdump 结束抓包,抓到数据会存到 /sdcard/1.pcap 文件内

重新打开一个终端(Terminal),执行如下命令

adb pull /sdcard/1.pcap .

1.pcap 文件被下载到了终端上的当前目录下

三、安装 Wireshark 并分析 pcap 文件

从 Wireshark 官网 https://www.wireshark.org/ 下 载适合你系统的 Wireshark,然后点击你下载后的 Wireshark 安装包安装好 Wireshark,找到刚刚下载好的 1.pcap 文件,双击 1.pcap 文件,1.pcap 文件会自动被 Wireshark 打开。在 Wireshark 的 Filter 内输入如下一些过滤条件,可以更加方便地分析数 据来源。

view plaincopy to clipboardprint?

tcp.port == 80 //过滤来自80端口的TCP数据  
udp.port == 12345 //过滤来自12345端口的UDP数据  
ip.src == 192.168.0.1 //过滤源IP为192.168.0.1的数据  
ip.dst == 192.168.0.1 //过目的IP为192.168.0.1的数据

以上过滤条件可以用 and 跟 or 相互组合,例如

view plaincopy to clipboardprint?

tcp.port == 80 and ip.src == 192.168.0.1 //过滤来自80端口,源IP为192.168.0.1的TCP数  
udp.port == 12345 or ip.dst == 192.168.0.1 //过滤来自12345端口的UDP数据,或者目的IP为192.168.0.1的数据

免费提供最新 Linux 技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/

Android 网络开发抓包工具Fiddler、tcpdump和Wireshark的使用

Android 网络开发抓包工具Fiddler、tcpdump和Wireshark的使用

这篇文章会按照下面思路来进行描述:

  1、为什么需要抓包;

   2、怎样抓包;

   3、报文的简单分析;

   (ps 文章中提到的设备指的android系统的设备)

一、为什么需要抓包

 网络通信的时候,上层经常会用到http相关的协议,现在网络通信的开源框架也比较多,类似okhttp这些框架已经为我们提供了非常简单的接口,可能只需要一行代码就能实现简单的上传等功能。

 网络各个协议层之间的通信是通过报文来进行传递,每个协议层会有自己的报文格式。有时候我们需要确认发送或者接收到的报文信息是否正确,这时就需要抓包进行分析。其实还有很多场景会用到抓包,类似想通过PHP下载某个网站上的视频,这时也可以抓包,看下网站请求的信息,可以知道相关视频的实际访问地址。

 我自己个人用到抓包,是在写socket通信的时候用到了,2台设备之间通过udp进行通信,然后一边是android系统,一边是linux系统,报文内容是根据项目需要定义的一套协议。在开发的时候,遇到2边联调时,对接收和发送的报文存在争议,这时抓包就是最好的方式了,以实际抓包内容为准。

二、怎样抓包 && 如何简单分析报文

  Android上抓包的很多工具,也有很多种方式,下面只介绍我自己使用过的2种。一种是pc端安装fiddler工具,在电脑端实时查看网络报文情况,另一种是通过tcpdump命令来抓包,然后再使用wireshark软件来分析报文。实际上我使用第二种方式比较多,直接通过命令来抓包还是比较方便点,抓到的包也可以发给其它同事一起分析。

1、采用fiddler工具

 使用fiddler工具是需要设备端的ip和电脑端ip在同一网段,如果是公司的统一wifi,那pc和设备都连上公司wifi即可。然后设备端连接的wifi代理还需要设置为电脑端ip,这个目的也很明显,设备端wifi代理设为pc端ip后,设备端访问网络,其实都是借助p c端出去的了,所以通过fiddler就能很方便的查看到网络访问情况。

 好了,了解了关于fiddler的基本情况,下面动动手,搞起来吧~~

1) pc端安装fiddler工具(这个就自行下载安装了);
2)  ipconfig 查看电脑端 ip,这个ip地址就是设备端连接的wifi需要设置的代理ip;

3)  设备端连接wifi,这个wifi需要和p c端的网络是同一网络,然后设置代理采用pc端ip(也就是上面通过ipconfig查看到的ip地址);

4)   打开pc端安装的fiddler,fiddler中设置允许远程访问;

image

      

5)  经过上面几个步骤,下面就可以使用fiddler来查看网络报文了。可以试下在设备端访问网络,这时就可以在fiddler上看到网络访问情况了;

(下面的截图,是查看了喜马拉雅app的一次请求报文情况)

2、下面接着来看下第二种方式,采用tcpdump命令抓包,然后通过wireshark软件进行分析

1)  tcpdump抓包命令

  tcpdump -p -vv -s 0 -w /sdcard/capture.pcap

image

   2)  使用wireshark分析抓到的包

 在window上使用 wireshark打开抓取的包 ***.pcap 文件.

下面的截图,是根据自己的需要,筛选了 192.168.7.2 发送给 192.168.7.3 的包. 可以看到协议是采用的 UDP ,端口是使用的4052.

点开其中一条数据包看下更具体的信息,这里更多时候关心的的是报文数据部分,查看Data部分的数据,可以排除我们发的报文数据是否正确.


本人从事Android Camera相关开发已有5年

目前在深圳上班

欢迎大家关注我的微信公众号“小驰笔记”

大家一起学习交流

微信公众号.png

 ------- 2020.01.12 周日

今天关于Android中使用tcpdump、wireshark进行抓包并分析技术介绍android tcpdump抓包的分享就到这里,希望大家有所收获,若想了解更多关于1.8 抓包工具tcpdump和tshark、Android 7.0+使用VirtualXposed+Charles进行抓包、Android 下使用 TCPDUMP 抓包 Wireshark 分析数据啦。、Android 网络开发抓包工具Fiddler、tcpdump和Wireshark的使用等相关知识,可以在本站进行查询。

本文标签:

上一篇android中创建通知栏Notification代码实例(android 通知)

下一篇Android入门之Gallery+ImageSwitcher用法实例解析(android imageswitcher)