1. 从一枚“小U盘”说起:360随身WiFi逆向到底在逆什么
第一次拿到360随身WiFi的时候,我的第一反应是“这不就是个U盘吗”。插上电脑,装好官方客户端,它能把电脑的网络变成WiFi热点,手机就能上网了。但如果你是个稍微有点折腾精神的人,用不了多久就会产生一个念头:这个东西本质上到底是什么?能不能拆开?能不能把它当成一块普通无线网卡来用?能不能改掉它的那个MAC地址?为什么它在Linux下完全没反应?
这些问题,正是“360wifi逆向”这个主题的核心。简单说,360随身WiFi本质是一块USB接口的无线网卡,而官方客户端只是给它套了一层“只有热点功能”的壳。逆向工作的目标,就是绕过这层壳,把设备的真实能力释放出来,把它变成一块标准的、可自由控制的无线网卡,或者进一步研究它的固件、驱动、芯片方案,甚至修改它的行为逻辑。
这篇文章不打算只讲理论,而是结合我实际拆机、抓驱动、改设备ID、在Linux下编译驱动的过程,把360随身WiFi逆向这件事从思路到落地完整拆开。适合三类人看:一是手头有360随身WiFi、想把它当普通网卡用的人;二是对USB设备驱动逆向、固件分析感兴趣的初学者;三是想在Windows、Linux、macOS下让这块设备“为我所用”的开发者。我会尽量把每一步的“为什么”讲清楚,而不是只丢给你命令行。
2. 动手之前先定方向:360WiFi逆向的三种主流路径
2.1 搞清楚你要逆向的是哪一层
很多人一说“逆向”,第一反应是拿IDA去分析程序、用010 Editor去改二进制。但360随身WiFi这类设备有个特殊性:它既有硬件层、驱动层,还有应用层和固件层。你选择从哪一层入手,决定了整个项目的工具链和工作量。
我自己的经验是把逆向路径分成三类:
- 硬件层逆向:拆机、识别主控芯片、查芯片手册、判断电路方案。这一层解决的是“它到底是什么芯片做的”这个基本问题。
- 驱动层逆向:分析官方驱动的inf文件、sys文件,提取设备VID/PID(厂商ID/产品ID),对比公版驱动,通过修改驱动或使用开源驱动让设备以标准网卡形态工作。这一层是大多数人的核心诉求。
- 固件与应用层逆向:提取固件、分析固件结构、修改MAC地址策略、破解官方客户端的限制。这一层技术难度更高,但可玩性也最强。
从实操角度看,驱动层逆向是最容易出成果的。因为360随身WiFi对芯片方案的依赖非常强,官方驱动往往只是公版驱动的一个“换皮版”,通过对比就能找到很多突破口。
2.2 为什么能“逆向”:所有网卡都是标准USB设备
理解360随身WiFi能被逆向的前提,是理解USB设备的枚举机制。任何USB设备插入电脑后,操作系统都会读取设备描述符,其中最重要的两个字段就是VID和PID。VID是厂商ID,由USB-IF组织分配,PID是产品ID,由厂商自己定义。操作系统靠这两个ID来找到对应的驱动程序。
360随身WiFi的设备描述符里面,VID/PID通常会被设置为360自己的定制值。但它的底层芯片,往往来自联发科(MediaTek)、瑞昱(Realtek)这类方案商。方案商提供公版驱动,公版驱动里面包含了一批标准的VID/PID。如果官方驱动只是在公版驱动上做了极小改动,那么只要改掉设备的VID/PID,或者修改驱动的inf文件让它匹配360的VID/PID,就能用公版驱动加载这个设备。
这个原理听起来简单,但实际操作中会遇到几个麻烦:驱动签名校验、驱动文件的完整性校验、设备内部的PID映射逻辑。这些问题我会在第4章里详细展开。
2.3 我推荐的学习顺序:先硬件,再驱动,最后固件
如果你是刚接触这类设备,我建议不要一上来就搞固件分析。先拆机拍照,确定主控型号,再对照主控手册理解USB接口和无线接口的工作方式,然后进入驱动逆向,把设备变成标准网卡。这一步走通了,你对USB设备和驱动模型的理解会上一个台阶。之后再尝试固件层面的操作,比如抓取固件、分析启动流程,就不会觉得无从下手。
我自己一开始犯的错误是直接去网上找“改MAC工具”,结果工具不兼容,还把设备搞得不稳定。后来才明白,工具只是别人逆向成果的封装,如果不懂原理,出了问题根本没法排查。所以这篇文章后面给的步骤,我都尽量从原理出发,而不是单纯给工具。
3. 硬件识别先行:拆机确认主控方案
3.1 拆机操作与芯片识别
360随身WiFi外壳是塑料卡扣,用撬棒沿着缝隙撬开即可,难度不大。拆开后你会看到一块小PCB,正面通常就两个关键元件:USB公头、主控芯片,部分版本还有晶振和天线。主控芯片上丝印的文字,就是判断方案的核心依据。
常见的主控方案有这么几种:
| 版本/常见方案 | 主控芯片丝印 | 芯片厂商 | 无线协议 | 官方模式 |
|---|---|---|---|---|
| 一代(早期) | MT7601UN | 联发科 | 802.11n 单频2.4G | AP/STA |
| 二代(常见) | MT7601UN / MT7601U | 联发科 | 802.11n | AP/STA |
| 某些批次 | RTL8188EU / RTL8188EUS | 瑞昱 | 802.11n | AP/STA |
| 部分新款 | MT7603UN(少见) | 联发科 | 802.11n | AP/STA |
以最经典的MT7601UN为例,它是联发科的USB接口WiFi芯片,公版驱动在Linux内核里就有(mt7601u),Windows下也有官方公版驱动。这意味着,只要能让Windows或Linux识别出设备,并且加载对应驱动,这块设备就是一块标准网卡。
识别芯片后,一定要去查芯片的Datasheet(数据手册),重点关注引脚定义、USB描述符、供电要求、天线匹配网络。这一步虽然枯燥,但后面你调试设备不稳定、信号差、掉线的时候,很多线索都要回到芯片手册里面去找。
3.2 用lsusb和设备管理器确认设备ID
拆机只是第一层确认,用软件确认更可靠。在Windows设备管理器里,右键设备属性、详细信息、硬件ID,就能看到VID和PID。常见格式是:
USB\VID_2955&PID_1001这个2955就是360的厂商ID,1001是关键。不同批次的产品PID可能不同,有的批次是1001,有的可能是1002。记下这个ID,后面改驱动全看它。
在Linux下,插上设备后执行:
lsusb输出中会有一行类似:
Bus 001 Device 003: ID 2955:1001如果你记下拆机得到的芯片型号,再对照这个ID,就知道官方驱动的匹配逻辑了。实测中,MT7601芯片版本在Linux下可能需要手动加载mt7601u驱动,但有时因为设备ID不在驱动支持的列表里面,内核会拒绝绑定。
4. 驱动逆向实战:让“热点发射器”变成普通无线网卡
4.1 Windows下用公版驱动替换官方驱动的完整步骤
在Windows下让360随身WiFi变成普通网卡,最核心的思路是替换驱动。推荐使用联发科MT7601U公版驱动,或者瑞昱RTL8188EU公版驱动,具体取决于你拆机看到的芯片型号。
替换驱动的操作流程如下:
- 先卸载官方客户端和官方驱动。注意不要只是删除程序,要去设备管理器里把设备卸载,勾选“删除此设备的驱动程序软件”。
- 下载公版驱动压缩包,解压后找到
mt7601U.inf对应的文件(不同版本文件名可能不同)。 - 不要直接双击安装。右键inf文件,选择“安装”,这时系统可能会提示驱动签名问题。
- 如果提示驱动签名,需要临时进入“禁用驱动程序强制签名”模式(Windows 10/11:设置 - 系统 - 恢复 - 高级启动 - 疑难解答 - 启动设置 - 重启后按7),再执行第3步。
- 重启后插入设备,打开设备管理器,确认设备出现在“网络适配器”下,并且名称带“MT7601”相关字样。
需要提醒的是,公版驱动替换后,设备默认是无线网卡模式(STA),可以用它连接WiFi,也可以用Windows自带的“移动热点”功能再次开启AP。这等于实现了和官方客户端一样的功能,但不再依赖360的软件。
4.2 用修改INF的方式直接匹配360的设备ID
如果公版驱动的inf文件里面没有包含360的VID/PID,直接安装是驱动不上的。这时需要手动修改inf。
用记事本打开mt7601U.inf,搜索VID或DeviceList相关段落,里面会有一堆类似:
%DeviceName% = DRV_MT7601U, USB\VID_148F&PID_7601这里的148F是联发科的VID,7601是对应PID。我们需要把360的ID加进去,在文件末尾段落新增一行:
%DeviceName% = DRV_MT7601U, USB\VID_2955&PID_1001保存关闭,然后重新执行安装。这一步的要点是:ID格式必须严格正确,区分大小写要用系统标准的十六进制大写格式。如果还是加载不上,检查inf文件是否在正确的位置,以及设备管理器中设备的状态是否显示“配置错误”。
这类修改在实践中非常常见。我曾在一台Windows 11机器上因为这个方法成功把360二代变成了标准网卡,但第一次因为inf文件里复制粘贴了多余空格,导致驱动签名验证不通过,排查了大半天。
4.3 Linux下编译加载开源驱动,让内核认出这块设备
Linux下情况更加直接。内核自带mt7601u驱动,但某些版本的设备ID不在支持列表里。解决办法有两个:一是用modprobe配合udev规则强制绑定,二是编译安装较新的驱动源码。
先试最简单的。插上设备后执行:
dmesg | tail如果看到“usb 1-1: new high-speed USB device number 4”之类的信息,说明设备已经被识别为USB设备,但可能没有驱动绑定。执行:
sudo modprobe mt7601u然后看接口是否出现:
ip link如果出现了wlan0或wlx开头的接口,说明驱动已经绑定成功。如果没有,查看内核是否支持你的PID:
modinfo mt7601u | grep 2955如果输出为空,说明驱动不认识这个设备。这时需要修改mt7601u驱动源码里的设备ID列表。从GitHub拉取驱动源码(比如linux内核源码中drivers/net/wireless/mediatek/mt7601u),在usb.c中找到const struct usb_device_id mt7601u_device_table[],加入一行:
{ USB_DEVICE(0x2955, 0x1001) },重新编译模块:
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install sudo depmod -a sudo modprobe mt7601u实测下来,这个方案在Ubuntu 22.04、内核5.15和6.2上都能通过编译。第一次编译时记得先装好build-essential和linux-headers-$(uname -r),否则make会报一堆找不到头文件的错误。
4.4 macOS驱动逆向的思路简述
macOS下使用360随身WiFi相对冷门,但原理类似。市面上有人把MT7601U的macOS驱动打包成“360随身WiFi Mac版”,本质也是公版驱动的移植。如果你要自己逆向,步骤是:
- 用
system_profiler SPUSBDataType确认设备的VID/PID。 - 拿到MT7601U的Mac驱动安装包(通常是
.kext或.pkg),查看Info.plist中的IOPCIMatch或IOUSBHostDevice匹配项。 - 修改或增加匹配项,把360的VID/PID加进去。
- 安装后执行
kextload加载驱动(注意新版本macOS对kext有签名要求,可能需要关闭SIP)。
这个方向难度比Windows/Linux大,因为签名限制和系统版本兼容性问题多。如果只是想让设备在Mac上工作,直接找现成的驱动包会更省事。但如果是为了学习和研究,自己尝试一遍还是值得的。
5. 深入固件层:不只是换驱动,还能改什么
5.1 固件提取与分析的基本思路
驱动逆向解决的是“让设备工作”的问题,固件逆向解决的是“让设备按我想要的逻辑工作”的问题。MT7601这类芯片内部有一个小的MCU,其运行的程序就放在连接在SPI Flash或者芯片内置ROM里,但实际拆解后你会发现,360随身WiFi这类设备通常没有外置Flash或很小,固件普遍存储在SoC内部ROM/RAM里,或者由驱动在加载时上传到设备。
这也是调试过程中的关键点:很多USB WiFi芯片实际上采用“无固件设计”,即芯片硬件上电后只有最基本的Bootloader,真正的固件由驱动程序在初始化时上传。这意味着你修改的重点可能不是设备里的固件,而是驱动加载时上传的那个*.bin固件文件。
在Windows公版驱动包里,会有一个mt7601u.bin之类的文件。它的作用就是设备在枚举成功后需要固件上传。想要分析这个固件,用binwalk扫描是最直接的第一步:
binwalk mt7601u.bin如果固件是压缩的,binwalk会显示偏移地址和解压类型;如果是裸代码,就要用arm-none-eabi-objdump配合readelf进一步分析。MT7601内部CPU是MIPS或ARM核,不同批次可能有差异,需要先看固件头部确认。
5.2 修改“看门狗”逻辑:为什么改了MAC地址又变回去
逆向后经常遇到一个经典问题:通过驱动或工具修改了设备的MAC地址,重启后MAC地址又变回了原来的值。出现这种情况,通常是固件内部或驱动层有个“看门狗”机制,在初始化时强制覆盖本地MAC地址。
解决这个问题的思路有两个层面:
- 驱动层:找到驱动源码里MAC地址赋值的地方,直接修改。比如在
mt7601u驱动的init.c或main.c里搜索mac相关字段,将默认MAC地址改为你想要的地址,重新编译驱动。 - 固件层:分析固件中是否有OTP(一次性可编程)区域存储MAC地址。如果MAC地址是从OTP读取的,就需要借助芯片原厂的烧录工具来改写。
实测中,MT7601方案在Linux下用驱动设置MAC是稳定的,只要执行:
sudo ip link set dev wlan0 address 02:00:00:00:00:01一般能生效。但如果你在Windows下用工具改,可能会被官方客户端驻留的进程拦截,所以建议在替换公版驱动后再改,并且关闭360全家桶后台进程。
5.3 官方客户端逆向:能逆向出什么
360随身WiFi官方客户端的逆向也是这个项目的一个热门分支,但价值更多在于学习,而不是实用。客户端本身是一个普通的Windows/Mac应用程序,可以用IDA从导入表开始分析,找到它调用驱动的接口、设置AP模式的逻辑、甚至是一些隐藏的调试功能。
但说实话,官方客户端的价值有限,因为它封装的东西你完全可以用公版驱动来实现。真正的实用价值在于:通过分析客户端,你能理解360为什么要做“限制”和“定制”,比如只开放AP模式,不允许STA模式,这些限制是在应用层做的,还是驱动层做的。答案通常是应用层,这也是为什么替换公版驱动就能破除限制。
6. 常见问题与排查技巧实录
6.1 设备能被识别但无法驱动上
这个问题最常见的两个原因是:设备ID不匹配、驱动签名被拦截。先用lsusb或设备管理器确认VID/PID,再对比当前安装驱动的inf文件或内核模块是否包含该ID。Windows下还要留意系统事件查看器里的Setupapi.dev.log,里面有驱动安装失败的详细原因,比看弹窗提示管用。
6.2 驱动装上后信号很差或频繁掉线
如果是Windows公版驱动,优先去联发科官网找最新版,而不是用驱动精灵之类的第三方软件。如果是Linux下出现频繁掉线,检查是否开启了省电模式:
sudo iw dev wlan0 set power_save off还可以用iwconfig查看链路质量,调整天线位置,确认PCB天线没有在拆机时被弄断。拆机时注意不要拉扯天线馈线,这是我很早踩过的坑。
6.3 改了设备ID导致蓝屏
蓝屏通常发生在Windows下强行安装了不匹配的驱动,或者驱动版本和Windows版本不兼容。现象一般是插入设备瞬间蓝屏。解决方法是进入安全模式,卸载设备驱动,回滚驱动。如果无法进入系统,用系统还原或恢复到上一个还原点。
这里建议:在搞驱动逆向时,一定先手动创建系统还原点,或者用虚拟机测试。虚拟机无法直接识别USB设备时,需要勾选VMware或VirtualBox的USB直通功能。一旦蓝屏,至少宿主系统不受影响。
6.4 常见问题速查表
| 现象 | 可能原因 | 排查思路 |
|---|---|---|
| 设备无反应 | 供电不足、USB口故障 | 换USB口、换数据线、查看dmesg/设备管理器 |
| 驱动装不上 | ID不匹配、签名问题 | 修改inf、禁用驱动签名 |
| 可用但无WiFi信号 | 驱动加载了但射频未初始化 | 重新插拔、重装驱动、确认是否被软开关禁用 |
| 设置MAC失败 | 驱动层拦截或固件强制覆盖 | 修改驱动源码、替换公版驱动 |
| Linux下无法绑定 | 内核模块缺ID | 修改usb.c设备表并重新编译 |
7. 实操心得与扩展方向
我在反复折腾360随身WiFi逆向之后,最深的体会是:这类设备的逆向工作,真正卡住人的往往不是工具,而是对USB协议和驱动模型的理解。你只要能耐心把lsusb、设备管理器、inf文件、设备表这些东西串起来,整个流程就会顺畅得多。
如果后续还想深入,有几个很好的扩展方向:一是用Wireshark抓USB流量,观察驱动和设备之间的URB通信,理解固件上传过程;二是用Fuzzing的思路给设备发送异常USB控制请求,看它是否会崩溃或出现异常响应;三是把基于MT7601的网卡移植到嵌入式平台,比如ESP32或者树莓派上实现自定义无线功能。
如果你手里正好有一块落灰的360随身WiFi,不妨按这篇文章的步骤先把它变成一块标准无线网卡。这个过程中的每一个报错、每一次蓝屏、每一段日志,都会比读十篇文档更有价值。