基于M5Stack Tab5,创建一款支持自定义GPS的无线网络探测平台
这个项目始于一个简单的问题:全新发布的M5Stack Tab5除了官方文档中介绍的功能之外,还能做些什么?
Tab5 是一款基于 ESP32-P4 和 ESP32-C6 的高性能平板设备,配备 55 英寸触摸屏、内置 WiFi、摄像头、麦克风、SD 卡插槽以及可拆卸的 NP-F-F 系列电池。该设备于 20266 年初发布,截至本项目撰写时,几乎没有任何社区知识库,文档极少,且存在多个尚未发现的固件漏洞。
与其等待生态系统成熟,我决定用它来打造一个真正实用的东西——一个完全自给自足、支持GPS的无线网络探测平台。随后,我在未文档的硬件上进行了为期三周的开创性开发:向M5Stack的GitHub提交了多个固件漏洞报告,逆向分析了引脚映射,并最终打造出一款完整的定制设备,在直接对比测试中性能优于专用的无线探测硬件。
那么,什么是Wardriving?
最初,黑客通过寻找脆弱且开放的网络来实施攻击,以隐藏自己的身份和来源,并在这些网络不知情的使用者家门口留下痕迹。这种做法至今仍然存在,但随着新技术的出现,其发生频率已大幅降低,因为这些技术有助于掩盖你的位置。虚拟专用网络(VPN)和代理服务器彻底改变了这一局面。
如今,Wardriving 主要是指在移动过程中被动扫描WiFi接入点,记录其MAC地址、SSID、加密类型、信号强度和GPS坐标。收集到的数据会被上传至WiGLE(无线地理记录引擎)等社区数据库,有助于构建全球无线网络覆盖图。这有点像《宝可梦GO》中的“黑客模式”。
在我们国家,无线漫游是被动且合法的,尽管这属于灰色地带(注意:当地法律可能有所不同,请在实施前自行核实),该设备仅用于监听,从不连接或与网络交互。它被安全研究人员、网络工程师和业余爱好者使用,以了解无线覆盖范围、研究加密技术的普及趋势,并为开放数据项目做出贡献。
硬件
核心组件
•M5Stack Tab5 套件 — ESP32-P4(主控处理器)+ ESP32-C6(WiFi/蓝牙模块),5英寸1280x720触摸屏,附带NP-F550 2000mAh 7.4V电池
•M5Stack GPS SMA 单元 — AT6668 GNSS 模块(GPS + BDS + GLONASS),通过 Grove PORT.A 以 115200 波特率连接
•外置SMA天线——可在紧凑型杆状天线(步行使用)和扁平磁性贴片天线(汽车车顶安装)之间切换
•MicroSD卡 — PNY 32GB,FAT32格式,用于现场数据记录
定制外壳
这可能是你自己3D打印时耗时最长的部分。在我使用Creality Ender 3 S1打印时,设置好参数后,从打印床上取下外壳大约需要4小时,以确保获得高质量的外壳。我选择了最刚性的打印参数,并采用100%填充率,唯一的缺点是增加了重量。
3D打印白色后盖——在TinkerCAD中重新设计,使用Creality Ender 3 S1打印机,采用Polymaker Panchroma Satin White材质打印。我的模型是对我在Thingiverse上找到的封面进行的改版,名为“M5Stack TAB5基础保护套,作者daffniles,采用知识共享署名-相同方式共享许可协议授权”。因此,我将这个改版作品以与原作者相同的许可证进行授权!
2毫米沟槽电缆布线槽——可使GPS模块的电缆整洁地进入机箱
外部SMA连接器直通——无需打开设备即可更换天线
Ubiquiti交换机机架螺丝(用Dremel短接)——将盖板安装到Tab5的M3孔上,裸露的螺纹头具有工业美感,并起到保护脚的作用
构建
组装其实相当简单!先拆下GPS模块上的螺母和垫圈(我们不再需要它们),将SMA连接器插入3D打印外壳的开孔中,并用外部的螺母固定。在侧面涂一层热熔胶,将模块密封到外壳上,此时Grove线缆已连接好,然后等待冷却(有趣的是:我用冰箱加快了这个过程)。
将Grove线缆的另一端连接到Tab5的PORT.A接口,然后将线缆穿过3D打印外壳上的小缝隙,形成一个外部的小环形结构以缓解拉力(如下图所示)。
用你喜欢的螺丝或螺栓安装盖子。我选择了Ubiquiti的螺丝,它们在设备平放时还能起到支架作用(并保护设备免受刮擦)。
电源
Tab5套件包含一个NP-F550电池(7.4V,2000mAh),可固定在设备背面。与USB的5V相比,7.4V供电为ESP32-C6 WiFi无线电提供了显著更强的射频功率,从而实现更出色的扫描性能。实地测试表明,使用电池供电的设备在首次扫描时即可发现15个以上网络,而通过USB供电时由于功耗限制,发现的网络数量明显减少。
软件
平台
•UIFlow2 v2.4.5 — MicroPython v1.27.0 在 ESP32-P4 上
•语言:MicroPython
主要特点
•通过ESP32-C6每15秒扫描一次WiFi
•GPS NMEA 解析器 — 以115200波特率读取$GNRMC和$GNGGA语句,提取纬度、经度、高度和卫星数量
•仅在确认有效GPS定位(4颗以上卫星)时才记录网络信息,确保每条记录都包含真实坐标
•带颜色编码的卫星数量显示(灰色/红色/黄色/绿色)
•WiGLE原生CSV格式——文件可直接上传至WiGLE,设备识别为`brand=Runaque`
•停止时自动保存SD卡——会话结束时,日志将被复制到SD卡,并命名为 `Tab5_Wardriver_xxx.csv`
•顺序文件命名——在一张SD卡上进行多个会话,且不会覆盖原有文件
•POI航点记录——点击将GPS航点保存到GPX文件中(例如,如果你发现了一个适合带妻子去吃晚餐的好地方)
•启动画面——自定义骷髅/天线标志,搭配《看门狗》字体彩蛋
•环形缓冲区显示 — 200个设备滚动缓冲区,15行可见
WiGLE 文件格式
性能结果
对战 ESP32 Marauder V6.1
两台设备均被放置在汽车的乘客座椅上,进行了一次50分钟的驾驶测试,条件完全相同:
Tab5 Wardriverriver 找到的网络数量比我的 ESP32 Marauder V6.1(使用 JustCallMeKokooko 固件 1.12.1)多出 51%,两者在运行时间和天空暴露度(乘客座椅)方面完全相同。
现场测试
•上学路程(30分钟,步行):约826个网络
•安特卫普市中心(步行80分钟):4,092个网络
•宜家驾驶(50分钟,驾车):记录了包含完整GPS坐标的数据
我还得出结论,Tab5在使用NP-F550电池(7.4V)供电时,性能明显优于通过USB(5V)供电。更高的电压可为ESP32-C6 WiFi无线电提供完整的射频功率,从而在首次扫描时就能显著发现更多的网络。
所以……接下来是什么?
PrtScScSc 按钮——等待 M5StackStack 相机 API 实现
SD卡SPI模式的临时解决方案——测试Felix的SPI模式方法以消除STOP时的重启问题
“大容量”变体型号——加长后盖设计,可容纳更大容量的NP-F系列电池(NP-F750/NP-F970),适合全天候使用
GitHub 发布 — — — 比赛提交后将发布完整代码和 STL 文件
WiGLEGLE 直接上传 — 从设备直接上传至 WiGLE
WiGLE地图——构建安特卫普无线网络的全面图景
安装警告: UIFlow Web Editor Editor Editor 剪贴板截断
请勿直接将代码复制粘贴到 UIFlow网页文本编辑器中,如果您的脚本超过500行。网页编辑器有一个静默剪贴板缓冲区限制,该限制将在不发出警告的情况下截断你的代码,导致设备上的代码不完整或损坏。
安全方法:
1. 将代码保存为“main.py”并使用文本编辑器打开
2. 使用 WebTerminal
3. 通过USB连接Tab5,并选择正确的串行端口(COM)来连接设备。
4. 要访问设备的闪存,请点击“文件”,然后打开“flash”。
5. 点击“删除”以移除原始的“main.py”,然后再次点击“删除”确认。
6. 要跳过 MicroPyton 代码的网页编辑器,请点击“发送文件至此”,然后选择步骤 1 中重命名的文件中的提供的代码。同样地,对“bootscreen.jpg”进行相同操作,以便在启动设备时使用 Tab5 Wardriver 的启动画面。
7. 这完全绕过了网页编辑器,确保100%的代码被传输。
本文编译自hackster.io





