图片来源:《侦探已经死了》第一集截图
使用的Android设备为一加7Pro, 刷机和root流程:Linux下给一加7Pro刷入LineageOS、获取root权限
不需要root权限的抓包方法:Android手机4G网络抓包(no-root)
方案一(仅使用手机):安装配置Termux
Termux下载地址:官方github仓库, GooglePlay(不推荐,版本较老), Fdroid, apkmirror
配置
打开Termux
获取存储权限,并且会在家目录下生成storage文件夹,里面包含downloads等手机共享目录的软连接方便使用
termux-setup-storage
先更新一波,更新过程中可能会有多次提示配置文件覆盖需要你选择,直接回车默认是不覆盖,也可以输入“Y”选择覆盖,建议覆盖
pkg upgrade
添加root仓库
pkg install root-repo
安装sudo工具
pkg install tsu
安装tcpdump
pkg install tcpdump
抓包
运行tcpdump开始抓包,然后切换到需要抓包的应用开始操作即可
sudo tcpdump -i any -w ~/storage/downloads/xxx.pcap
“Ctrl+C”停止抓包,这样抓到的报文就会保存在系统下载目录的“xxx.pcap”文件中
这样抓的包以太网协议头会被替换成伪协议“Linux cooked capture”,需要的话可以进行转换,转换方法见文末
方案二:使用tcpdump和PC端wireshark抓包
注意:LineageOS支持下面的操作,但很多国内厂商的手机系统,即使root了也无法进行下面的操作,原因和解决方案请自行参看https://stackoverflow.com/questions/25271878/android-adbd-cannot-run-as-root-in-production-builds
安装adb
Arch Linux
sudo pacman -S android-tools
Ubuntu
sudo apt install adb
安装tcpdump到手机
访问https://www.androidtcpdump.com/android-tcpdump/downloads, 下载“tcpdump for ARM Android”
手机打开“USB调试”、“Root身份调试”,数据线连接手机和电脑,进入存放刚刚下载的tcpdump的目录,执行
adb root
adb remount
adb push ./tcpdump /system/xbin/tcpdump
抓包
确保adbd
运行在root模式
adb root
电脑上打开wireshark,能看到很多“Android tcpdump”开头的网卡(Android tcpdump 后面跟的第一个单词才是真的网卡名字)
候选网卡比较多,可以一个个试,移动数据网络一般是“rmnet_dataN”(N是个数字,关闭“移动数据”再打开可能会变),我的是“rmnet_data3”,双击即可开始抓包
和方案一一样,这样抓的包以太网协议头会被替换成伪协议“Linux cooked capture”,需要的话可以进行转换,转换方法见文末
Linux cooked-mode capture (SLL)格式转换
使用“tcprewrite”重写数据即可,“tcprewrite”包含在“tcpreplay”包中
安装
Arch Linux
sudo pacman -S tcpreplay
Ubuntu
sudo apt install tcpreplay
转换
tcprewrite --dlt=enet -i in.pcap -o out.pcap
#也可以指定生成的mac地址
tcprewrite --dlt=enet --enet-dmac=00:11:22:33:44:55 --enet-smac=66:77:88:99:AA:BB -i in.pcap -o out.pcap
另外我在Arch Linux上使用安装的“tcpreplay-4.4.2”存在转换失败的情况,回退到“tcpreplay-4.3.1”后则没有问题
参考:
- https://andreafortuna.org/2018/05/28/how-to-install-and-run-tcpdump-on-android-devices/
- https://blog.wirelessmoves.com/2017/02/adb-and-tcpdump-on-android-for-live-wireshark-tracing.html
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。