找回密码
 立即注册

如何在 Android 手机上实现抓包?

| 2023-4-2 11:03 阅读 69348 评论 5

我想晓得某个利用究竟在数据提交到那里,提交了什么。
网上的教程太复杂,不想麻烦。有没有快速的方式实现在android收集抓包?比如手机流量类监控软件能否已经实现能否鉴戒?
  • qwe3456 2023-4-2 11:07
    两种方式,各有优劣且互补,一般第一种即可,对于不走代理的 App 选择第二种方式第一种 Fiddler:利用 Fiddler 抓包,适合大多数走代理的应用,优点 (1) 无需 root (2) 对 Android 和 Iphone 同样适用 (3) 操作更简单方便(第一次安装配置,第二次只需设置代理即可) (4) 数据包的查看更清晰易懂,Fiddler 的 UI 更简单明了 。可见:http://www.trinea.cn/android/android-network-sniffer/
    Mac 下可以使用 Charles。第二种 Tcpdump:对于不走代理的 App 可以利用 tcpdump 抓取 andorid 手机上网络数据请求,利用 Wireshark 查看,可见:如何利用Tcpdump抓取andorid网络数据请求,Wireshark查看
  • akhe8660 2023-4-2 11:06
    tcpdump是最快捷方便的抓包方式,还可以加深对网络协议的理解。android下可以通过如下方式抓包:

    1 Android上启动tcpdumpAndroid设备可以把tcpdump的可执行文件上传到android设备上,然后通过mac远程登录android设备运行tcpdump,前提是这台android设备必须已经root过。步骤如下:下载android版本的tcpdump从这个链接: http://www.androidtcpdump.com/android-tcpdump/downloads 可以下载到专门为android系统编译的tcpdump版本。通过adb将tcpdump上传到android设备通过adb push将tcpdump文件上传到特定的目录,这里我们选择/sdcard/data目录。

    在android设备上运行tcpdump通过adb shell登陆设备,并执行tcpdump,最后一步执行./tcpdump即可。


    2. 分析tcpdump输出经过上面的步骤成功运行tcpdump之后,接下来就可以分析输出的网络包内容了,iOS设备和Android设备的输出是一致的。我们先来解析下几个基本的格式:

    图中红色方框内的部分是一个ip包的详细记录,类似的纪录还有好几条。这里我们着重分析第一条的各部分字段含义。14:37:41.615018 很简单,是该包接收到的时间。17.143.164.37.5223 是发送方的ip地址及端口号(5223是端口号)。10.29.44.140.58036 是我android的ip地址及端口号。Flags [P.] 是tcp包header部分的第14个字节的P位。这个字节所包含的几个flag很重要,后面我会单独详细讲解。这里P位表示接受方需要马上将包push到应用层。seq 1:54 tcp包的seq号,1是起始值,54结束值。tcp之所以被认为是流,是因为tcp包所携带的每一个字节都有标号(seq号)。1:54表明总共有54个字节被接受,其中一个字节是三次握手阶段所使用,所以一共发送的长度是53字节。ack 101 tcp包的ack号,ack 101表明seq号为100的字节已被确认收到,下一个期望接收的seq号从101开始。win 255 win表示的是tcp包发送方,作为接受方还可以接受的字节数。这里win 255表明ip为17.143.164.37的主机还可以接受255个字节。options [nop,nop,…] options[…]表示的是该tcp包的options区域,nop是no opertion的缩写,没什么实际用途,主要是用做padding,因为options区域按协议规定必须是4字节的倍数。options[… TS val 2381386761] ts val这个值是tcp包的时间戳,不过这个时间戳和设备的系统时间没啥关系,刚开始是随机值,后面随着系统时钟自增长。这个时间戳主要用处是seq序列号越界从0重新开始后,可以确认包的顺序。options[… ecr 427050796] ts ecr这个值主要用来计算RTT。比如A发送一个tcp包给B,A会在包里带上TS val,B收到之后在ack包里再把这个值原样返回,A收到B的ack包之后再根据本地时钟就可以计算出RTT了。这个值只在ack包里有效,非ack包ecr的值就为0.length 53 这个length是应用层传过来的数据大小,不包括tcp的header。这个值和我们上面分析的seq 1:54是一致的。以上就是一个基本的tcp包结构,大家可以按照上面的分析再把其他几个包理解下。我们在做应用的时候面对的更多是http协议,但对一个http请求是怎么通过tcp/ip分解成一个个的packet,然后怎么在网络上稳定可靠的传输,要有个基本的印象。下面我们再看下tcpdump更多的功能,这些功能都是基于对tcp/ip协议的理解,遇到不理解的建议多google下相关的技术概念。3. tcpdump知识拓展再继续深入tcpdump之前,先贴上一张tcp header格式图,常看常新。[https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true](https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true)" width="1056">3.1 TCP Flags(tcp header第十四个字节)我们再仔细看下上面提到的flags概念,flags位于tcp header的第十四个字节,包含8个比特位,也就是上图的CWR到FIN。这8个比特位都有特定的功能用途,分别是:CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。CWR ,ECE 两个flag是用来配合做congestion control的,一般情况下和应用层关系不大。发送方的包ECE(ECN-Echo)为0的时候表示出现了congestion,接收方回的包里CWR(Congestion Window Reduced)为1表明收到congestion信息并做了处理。我们重点看其他六个flag。URG URG代表Urgent,表明包的优先级高,需要优先传送对方并处理。像我们平时使用terminal的时候经常ctrl+c来结束某个任务,这种命令产生的网络数据包就需要urgent。ACK 也就是我们所熟悉的ack包,用来告诉对方上一个数据包已经成功收到。不过一般不会为了ack单独发送一个包,都是在下一个要发送的packet里设置ack位,这属于tcp的优化机制,参见delayed ack。PSH Push我们上面解释过,接收方接收到P位的flag包需要马上将包交给应用层处理,一般我们在http request的最后一个包里都能看到P位被设置。RST Reset位,表明packet的发送方马上就要断开当前连接了。在http请求结束的时候一般可以看到一个数据包设置了RST位。SYN SYN位在发送建立连接请求的时候会设置,我们所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。FIN Finish位设置了就表示发送方没有更多的数据要发送了,之后就要单向关闭连接了,接收方一般会回一个ack包。接收方再同理发送一个FIN就可以双向关闭连接了。这8个flag首字母分别是:C E U A P R S F。初看难以记忆,我脑洞了下,把它们组合成 supr cafe,当然少了super少了个e,我可以将就下。我们在使用tcpdump的时候会经常看到这几个flag,[S],[P],[R],[F],[.]。其他几个都好理解,[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack。3.2 tcpdump 更多使用参数这部分我们来看下tcpdump常用的一些命令参数。文章最开始部分的tcpdump命令是这样的:sudo tcpdump -i rvi0 -AAl。 -i rvi0 -AAl都是属于参数部分。常见的有这些:-i, 要监听的网卡名称,-i rvi0监听虚拟网卡。不设置的时候默认监听所有网卡流量。-A, 用ASCII码展示所截取的流量,一般用于网页或者app里http请求。-AA可以获取更多的信息。-X,用ASCII码和hex来展示包的内容,和上面的-A比较像。-XX可以展示更多的信息(比如link layer的header)。-n,不解析hostname,tcpdump会优先暂时主机的名字。-nn则不展示主机名和端口名(比如443端口会被展示成https)。-s,截取的包字节长度,默认情况下tcpdump会展示96字节的长度,要获取完整的长度可以用-s0或者-s1600。-c,只截取指定数目的包,然后退出。-v,展示更多的有用信息,还可以用-vv -vvv增加信息的展示量。src,指明ip包的发送方地址。dst,指明ip包的接收方地址。port,指明tcp包发送方或者接收方的端口号。and,or,not,操作法,字面意思。上面几个是我个人比较常用的,更多的参数可以参考这个详细文档。有兴趣的可以分析下面几个例子练习下:tcpdump ‘tcp[13] & 16!=0’tcpdump src port 80 and tcptcpdump -vv src baidu and not dst port 23tcpdump -nnvvS src 192.0.1.100 and dst port 4434. 用tcpdump分析http完整请求说了这么多,我们再来实战下,看一个完整的http请求流程。
    下面截图里的流量是我监听的 知乎App点赞之后发送的一个https请求。我之前先分析过server的ip地址了tcpdump命令是:sudo tcpdump -i rvi0  -AAl src 60.28.215.123 or dst 60.28.215.123

    图中列出了6个前面的packet,10.29.44.240是我android的ip地址,60.28.215.123是知乎server的ip地址,红色方框内是android发出的packet,白色方框内是server发出的packet。packet1是android三次握手的第一个syn包,packet2是server ack+syn的包,packet3是android ack的包。这3个packet之后tcp的三次握手就完成了。packet4是android发出的http request。长度只有240个字节,所以一个packet就发过去了,当然还设置了flags的P位,request需要马上被应用层处理。包里面出现了spdy,点赞。packet5是server ack刚收到的包,长度位0,所以这仅仅是一个ack包。packet6是server返回http的response了,1388个字节。packet5和packet6都ack了seq为241的包,当然是为了增加ack的成功率。中间还有好几个packet就不仔细分析了,最后再看下请求完成的最后几个包:

    最后两个packet比较简单,android发送个FIN+ACK的包就断开连接了,server直接发送了一个RST包后也断开连接了。
  • i52705270 2023-4-2 11:05
    安装 Packet Capture https://play.google.com/store/apps/details?id=app.greyshirts.sslcapture 这个 App 直接在手机上做抓包应该是比较简单的:不需要 root(用 VPNService 这个接口实现的本地代理)
    有 MITM Proxy,可以查看 https 流量(有这条还要什么三轮车>_<)适用于不走系统代理的 App
    顺带一提,这个 App 也是我见到的第一个实际使用 Kotlin 来写的 App


    如果还需要简单改下 http request,可以考虑试试 HTTP Injector https://play.google.com/store/apps/details?id=com.evozi.injector 这个 App,同样的它也不需要 root


    如果有更复杂的需求,当然还是 Fiddler / Charles 比较好
  • srrh0300 2023-4-2 11:05
    GitHub - JZ-Darkal/AndroidHttpCapture: AndroidHttpCapture网络诊断工具 是一款针对于移动流量劫持而开发的手机抓包软件 主要功能包括:手机端抓包、PING/DNS/TraceRoute诊断、抓包HAR数据上传分享。你也可以看成是Android版的"Fiddler" \(^o^)/~

    不需要root权限下载地址:http://h5.darkal.cn/har/demo.apk





    下载地址:http://h5.darkal.cn/har/demo.apk
  • ericzhou99 2023-4-2 11:05
    以前我们在学习CTF竞赛的时候,都知道抓包改包神器BurpSuite,对于我们想知道一些网站的登陆参数的时候,经常需要通过代理来拦截HTTP、HTTPS请求,但是当我们遇到手机APP的时候就突然懵逼了。本文介绍了Fiddler如何实现BurpSuite的功能,并轻松的抓到手机中各大厂家的APP的流量,发现很多厂家对手机APP安全非常重视。最后介绍,通过Fiddler对静默的手机进行进行抓包,轻松判断手机是否中毒。0x1、使用Fiddler抓取网站流量步骤一:登陆官网下载并安装Fiddler(https://www.telerik.com/fiddler)步骤二:配置浏览器代理,主机127.0.0.1、端口8888步骤三:打开Fiddler,设置咱们关心的主机,以“逼乎”(一个盗版网站)为例

    步骤四:在浏览器里访问“逼乎”,前提是咱们的浏览器已经配置好代理了哦~

    步骤五:Fiddler中就可以看到我们关心的流量了,不会有任何杂质流量哦~

    步骤六:自动安装Fiddler证书,解密HTTPS流量~

    解密后,咱们就可以看到HTTPS的内容了~

    步骤七:F11设置请求应答断点,可以拦截并修改包包哦~

    基本演示到此结束,你千万不要用这种这种方法修改游戏金币,你千万不要用这种方法修改商品价格,你千万不要用这种方法修改考试成绩~在这里劝大家不要修改考试成绩,因为这属于灰色产业链的犯法行为,黑客会威胁你不断的给钱,如果你不给钱,他就给校长邮箱发举报信,把你搞退学~0x2、使用Fiddler抓取手机流量步骤一:勾选允许远程计算机连接,然后重启Fiddler~

    步骤二:设置手机的网络代理为自己的电脑IP地址,端口设置为8888~手机的IP地址:192.168.0.100电脑的IP地址:192.168.0.104

    步骤三:手机访问代理IP:端口,获得证书并安装在手机上~

    步骤四:在手机上打开知乎App,在Fiddler上观察流量~测试发现知乎App直接告警网络异常、拒绝了我的访问,说明知乎对终端安全比较重视~奖赏 @知乎小管家 一个鸡腿 ~

    顺便测试了一下其他几个App,批评一下下面几款App,对证书要求比较宽松,即使是假的证书,流量依然放行了,真的很渣~QQ、微信支付宝百度网盘中国建设银行今日头条京东表扬一下下面的几款App,都会对手机端的证书进行校验~中国银行抖音知乎B站饿了么美团

    步骤四:看看手机上哪些应用悄悄的跑流量~手机放着,静静的等待,看看抓到了哪些App的流量即可,发现最多的流量都是腾讯系的

    其实我比较期待看到百度的流量,可是我没有抓到,等了大约60分钟发现以下App流量较大(大约都有20、30条左右,其实也不算大,但是积少成多呗~)qq小米微软以下App流量较少,个把两条流量(大约都有1、2条左右,几乎可以忽略不计了~)高德b站知乎

    通过这种方式,可以发现通过HTTP和HTTPS的恶意软件的流量,如果你发现某个未知的域名或IP地址,那么就值得关注手机是否安全了。很多病毒手机中毒之后,都会偷偷的与服务器进行通信,那么通过Fiddler抓到恶意流量,就可以断定手机中毒了。对于普通人来说,只要手机莫名巧妙的掉电很快,话费突然增多,网络变得很卡,那么极有可能是手机出问题了,建议你换一个新手机。
文章点评
2022-04-26 09:16
APP运营 手机GIF动画制作软件哪个好?6款手机GIF制作APP推荐
  我们经常能看到视频做成的GIF动画表情,以前GIF动画智能通过电脑软件制作,不过如 <详情>
2022-04-26 10:02
APP运营 推荐10个超级棒的英语学习APP
现代社会的人,基本上已经没有办法不接触英语了,英语作为世界最通行的语言,就算在国 <详情>
2022-04-26 10:07
APP运营 App开发、小程序开发该如何选择技术开发公司?
术业有专攻。一个好的开发团队对做好一款App至关重要,好的团队会有专业且标准的需求 <详情>
2022-04-26 10:28
APP运营 如何用手机远程协助长辈?我找出了6个最佳方法!(免ROOT ...
最近我婆婆头一次换了部智能手机,难免这也得教那也得教但毕竟没办法随时亲身面授,我 <详情>
2022-04-26 10:46
APP运营 如何在M1的MacBook中安装手机App?| 竟有点实用!
这篇文章的主题其实非常简单,就是在M1的MacBook上安装手机的App。但一开始我觉得这个 <详情>
2022-04-26 10:51
APP运营 推荐16个非常棒的在线学习APP
现在的人们,每天日常生活中,基本上是已经完全离不开手机了,我也经常玩手机,在手机 <详情>
2022-04-26 11:07
APP运营 手机App确实在偷听你谈话,方法死都想不到
早在去年就有用户发现:只要和朋友聊天时提到某样商品,打开购物软件,立刻就会收到相 <详情>
2022-04-26 12:53
APP运营 市场部、运营部、品牌部,别傻傻分不清楚!
摘要:市场、运营、品牌、公关、新媒体、策划……,如何区分这些似是而非的职能,看这 <详情>
2022-04-26 12:56
APP运营 运营知识应该从何学习?
先学理论,再get技能,最后用学到的这些运营理论+技能做出真实有数据的运营项目,完整 <详情>
2022-04-26 13:18
APP运营 搞用户运营的看过来!蔚来、理想、小鹏、威马APP用户 ...
我是做社区运营工作的。上个星期我在面试社区运营的候选人,我问她在国内你认为运营最 <详情>