安卓抓包工具开发

前言

目前存在的安卓抓包方法有很多,例如Fiddler、Charels、Packet Capture、tcpdump,其各存在一定的优缺点。

  • Fiddler、Charels利用电脑,利用代理的方式的方式进行抓包,其要依赖于电脑,只能在WIFI环境下运行,代码不开源。
  • tcpdump 需要root,并且数据包分析复杂,一般需要使用到第三方分析工具,没法解析https。
  • Packet Capture 利用安卓vpn的方式进行抓包,无需root,可以分析https包内容。解析文件不可以下载,代码不开源。
  • AndroidHttpCapture利用手机本地代理的方式进行抓包,无需root,可以分析https包内容。可以下载解析文件,代码开源。缺点是需要在wifi环境下操作。

综述,目前存在的抓包工具或多或少都存在一定的缺点,其中最好用的是PacketCapture。本项目参照PacketCapture,提供和PacketCaptrue基本类似的交互体验,但是有远比PacketCapture强大的包解析功能,能够解析GZIP、PNG、JPEG、GIF等各种格式的包,并且提供保存解析后的包内容的功能,支持https,代码开源。

方案设计

本方案主要参考Firewall,http抓包流程图:

packetcapture-2-4.jpg

在流程开始前需要打开VPNService,并在本地新建ServerSocket。

以上流程的步骤说明:

1.被代理的Local Socket发起网络请求,由于打开了VPN接口,网络IP包被转发到了虚拟网卡上。
2.VPNService被打开之后获得了虚拟网络的文件地址,从文件上读取IP包。本步骤和步骤14其实是一个同一个动作。
3.解析IP包,获得其源端口,通过源端口判断此IP包是由Local Socket还是Local Tunnel,如果是由Local Socket发出的则修改了目标IP和目标端口为本地建立的ServerSocket的IP和端口,并将源IP修改成需要目标的IP,合成新包,并建立Session,保存此链路的源端口、目标IP,目标端口。如果是由Local Tunnel发出来的则进行步骤16。
4.将新包写在虚拟网络的文件地址上。
5.新的Ip包被转发到由ServerSocket所建立的LocalTunnel上。
6.LocalTunnel将其保存到请求容器中。请求容器由ConcurrentLinkedQueue来实现。
7.与LocalTunnel配对的RemoteTunnel从请求容器中取出请求。
8.RemoteTunnel将取出的请求转发给服务器,并将请求保存起来,作为抓包的请求。
9.服务器产生响应的IP包。
10.RemoteTunnel收到服务器的响应,并将响应保存起来,作为抓包的响应。
11.RemoteTunnel将收到的响应保存到响应容器,响应容器也由ConcurrentLinkedQueue来实现。
12.与RemoteTunnel配对的LocalTunnel从容器中取出响应。
13.LocalTunnel将响应发给LocalSocket,响应又被转发到了虚拟网络设备上。
14.VPNService从虚拟网络上读取请求IP包。本步骤和步骤二是同一个动作。
15.解析获得源端口,如果源端口是由Local Tunnel发出来的,则修改了目标IP为Session所保存的源IP,源IP为Session所保存的目标IP,源端口为Session所保存的目标端口,合成新包。
16.将新包写到虚拟网络设备上。
17.响应被转发到Local Socket,整个过程结束。

采用以上技术方案的原因

方案的绝妙之处在于步骤3和步骤15,通过步骤3和步骤15可以建立LocalTunnel作为LocalSocket的假想服务器。LocalTunnel只需要负责和Local Socket通信,其内部也是由SocketChannel来实现。使用SocketChannel来负责Local Socket无需自己实现复杂的TCP/IP协议,同时有更大扩展性,可以快速的实现TSL/SSL,以对https进行抓包。
笔者曾经自己实现TCP/IP协议(项目地址 :https://github.com/huolizhuminh/NetWorkPacketCapture 版本号:1.0.3)和Local Socket进行通信,但是稳定性一直没有Java的SocketChannel要好。也有其它的项目例如ToyShark:https://github.com/LipiLee/ToyShark 采用直接实现TCP/IP协议,效果也不理想。

https步骤

packetcapturehttps-2.jpg

https步骤说明

https和http整个过程类似,只是多出了步骤7和步骤17以及步骤10和步骤14,多出的不走是对请求和响应进行加解密,在container中的是加密前的请求以及解密后的响应。整个https加密的过程的实现参照Netty。

抓包说明

  • 抓包前手机需要安装app生成的根证书。
  • 不是所有的APP都支持https抓包,目前测试支持的APP有简书、腾讯新闻、qq浏览器、腾讯视屏,淘宝、拼多多,不支持的有链家、知乎、58同城等,也有半支持的如百度新闻。
  • 不支持https的原因是在7.0之后,App默认不支持手机自身安装的根证书,如果是开发者,可以在Manifest清单文件中进行设置。可以设置为所有版本都支持,也可以仅设置为debug模式下支持,具体的设置方法可参考博客:https://www.cnblogs.com/wytings/p/6954293.html ,也可以参考参考我的项目:https://github.com/huolizhuminh/AndroidSkills/tree/master/OkhttpDemos

抓包过程及效果

1.选择需要抓包的APP


抓包精灵3.png

2.开启抓包后会显示每一条连接。


抓包精灵1.png

3.进入查看包内容


C96461B9F0BDF0B7547C38FCC23673A3.jpg

4.可查看历史

抓包精灵5.png

5.在设置页面设为为自动保存解析内容后或者在包查看页面保存解析内容后,可以dump 解析之后的数据,地址为:sdcard/VpnCapture/Parsedata 。
6.也可查看并dump原始数据,原始数据查看地址为:sdcard/VpnCapture/Conversation

参考项目

本项目主要参考的项目有:

项目地址

Github: https://github.com/huolizhuminh/NetWorkPacketCapture
APP下载地址:https://sj.qq.com/myapp/detail.htm?apkName=com.minhui.networkcapture
联系我:sysuzhuminh@gmail.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1.感激中午睡起来迟了,公公赶紧给我装梨水,婆婆马上给我按电梯。 2.感激我晚上做了一顿美餐,有点好吃哈哈。 3....
    不倒姑娘阅读 140评论 0 0
  • Win10创意者更新中新增加的“夜灯(Night Light)”。那么如何开启“夜灯”模式呢? 第一步:打开win...
    菜鸟极客阅读 1,369评论 0 0
  • 夏天到来,是很多花草开花繁华的季节,花草不仅可以增加色彩还可以净化空气,市里的空气原本就比县里 村里 差很多很多,...
    云少nn阅读 212评论 0 0
  • 上午 做三维家王总效果图2h 下午 1做了一个风格课图片 2辅助霞姐接待胡总 3宗总客户严总来店里,与之沟通并和徐...
    维维玮阅读 257评论 0 0