尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

GreatFET实战:USB协议分析与安全测试入门指南

GreatFET实战:USB协议分析与安全测试入门指南 如果你在折腾USB协议分析、USB安全测试或者想搞一台能模拟USB设备的“万能小工具”那GreatFET这个名字你肯定绕不过去。简单说它是一块专门为USB攻击测试和嵌入式调试设计的开源硬件板基于NXP LPC4330主控和一片Lattice FPGA既能当逻辑分析仪、总线嗅探器又能模拟成键盘、U盘、网卡等任意USB设备还能直接读写SPI、I2C、UART、JTAG这些常见调试接口。对那些想研究“USB攻击是怎么发生的”“协议逆向怎么入门”“设备固件怎么提取”的硬件安全爱好者来说一块GreatFET基本能覆盖从入门到进阶的绝大部分需求。这篇文章我会从实际测试的角度把GreatFET最核心的玩法拆开讲为什么选它而不是USB转串口工具USB协议层面的攻击点到底在哪怎么用Python脚本做HID键盘注入实验怎么把GreatFET搭成USB流量抓包器以及扩展玩法里逻辑分析、存储器读取、模糊测试那些事。最后再整理几个我实际用下来遇到的坑希望能帮你少走点弯路。1. 为什么折腾USB安全时我最终锁定了GreatFET1.1 从USB转串口工具到全功能USB调试平台的差距很多人问我USB调试不是几十块钱一个USB转TTL串口模块就能搞定吗FT232R、CP2102N、CH340这些芯片的USB转串口小板装个驱动、接上TX/RX/GND就能收发数据为什么还要花千把块买一块GreatFET这个问题其实问到了点子上。USB转串口工具解决的是“电脑没有串口我借USB当一个虚拟串口用”的问题它本质上是在USB协议之上包了一层UART的壳你看到的、操作的其实还是串口数据流不是USB协议本身。而GreatFET解决的是另一个层面的问题它让电脑能直接操作USB协议层的各种数据包、描述符、端点通信甚至能让自己模拟成一个USB设备接入目标机器。这完全是两个维度的东西。拿我自己举例子。前几年我想复现一个BadUSB类型的测试场景手头有树莓派Pico、有各种开发板但弄起来都很别扭。树莓派Pico模拟USB键盘需要刷固件、写C代码切换一次场景要重新编译烧录普通开发板模拟USB设备又受限于硬件没有独立的USB主机口没法一边模拟设备一边做抓包。GreatFET的方案就舒服多了主控跑着官方固件PC端用Python API直接下发指令想模拟键盘就模拟键盘想抓包就抓包一台设备全搞定。1.2 GreatFET硬件规格里哪几个特性对USB攻击最有用具体到硬件GreatFET One这块板子的配置放到现在看依然很能打。主控是NXP LPC4330双核架构Cortex-M4做主处理、Cortex-M0做辅助主频能到204MHz跑USB协议栈和Python指令解析完全够用。板载一片Lattice ICE40UP5K FPGA这是它比普通单片机开发板强一大截的地方——很多需要高速、并行处理的信号比如逻辑分析仪的触发逻辑、自定义协议的状态机都可以下沉到FPGA里做灵活性极高。再加上1MB SDRAM做缓冲处理大规模USB传输数据、抓包缓存都更从容。最关键的是板子上的接口布局。它有一个USB口是连电脑的用于编程控制和供电另外还提供了USB Host接口Type-A口和各种排针引出GPIO、SPI、I2C、UART、JTAG、ADC、PWM。做USB攻击测试的时候主机口可以用来插目标U盘做镜像读取、插USB设备做流量代理也可以通过排针配合Facedancer扩展板模拟USB设备玩法比单纯带一个USB口的单片机宽很多。1.3 Linux/Windows/macOS下都能玩的通用性我之前用过一些类似工具驱动只提供Windows版本想在Linux服务器上做自动化测试基本没戏。GreatFET的软件栈对跨平台支持很友好官方提供Python库greatfet跑在Linux、Windows、macOS上都能用底层通过USB连接板子再用gf命令行工具和Python API操作。对我这种习惯在Linux下跑抓包脚本、在Windows下临时验证一下Windows驱动行为的人来说这种跨平台可移植性很重要一套脚本两边复用省去大量重复工作。2. 做USB实验前必须搞清楚的协议底子2.1 USB枚举流程和描述符是攻击面的起点USB攻击为什么危险在于主机电脑默认信任USB设备上报的自我描述。当你插入一个USB设备主机会发起一次“枚举”过程先给设备复位然后读取设备描述符接着读配置描述符、接口描述符、端点描述符最后根据VID/PID和接口类型加载相应的驱动。整个过程中主机上运行的很多逻辑其实是被动接受设备的描述信息的。也就是说攻击者只要控制USB设备端上报的描述符就能在很大程度上“指导”主机系统怎么做。比如一个设备明明是个存储芯片却把自己描述成HID键盘主机就会乖乖把它当键盘加载描述成一个USB网卡系统就会尝试用RNDIS或者CDC-ECM协议跟它通信这中间能玩的花样就多了。这就是我们常说的“USB协议层的信任边界问题”也是后面所有实验的基础。再说Host与Device模式的区别。普通USB Host是主设备负责发起通信、分配地址、管理总线调度Device是从设备被动响应主机的命令。做USB攻击的时候你往往需要让自己的设备“伪装”成Device去连接目标电脑或者做成一个“中间人”同时具备Host和Device两种能力。GreatFET之所以适合这种工作就是因为它能灵活切换角色既能通过扩展模式模拟Device又能当Host去连其他USB外设。2.2 动手抓一次枚举包比背十遍协议文档都管用协议文档背十遍不如亲眼看到一次枚举过程。我在学USB协议的时候最有效的一次实验就是把一个U盘插到逻辑分析仪上抓包完整地看到主机和U盘之间的对话过程。首先是控制传输主机发GET_DESCRIPTOR请求读取设备描述符U盘返回一包数据里面写明自己是USB 2.0高速设备、VID/PID是多少、端点0最大包大小是多少然后主机给U盘分配地址再发GET_DESCRIPTOR读取配置描述符配置描述符里包含接口的信息比如这是一个Mass Storage类接口、有几个端点、Bulk传输的端点号是多少。这些就是USB设备“自我介绍”的全过程也是攻击者最常篡改的地方。如果你从来没看过一次真实的USB传输波形我建议找一台逻辑分析仪哪怕几十块钱的24MHz采样率入门级也行抓一个USB全速鼠标的枚举包把控制传输的过程一格一格看过去。看完之后你会对前面的描述符、端点、传输类型有完全不一样的理解。这里顺带提一句如果想系统性学USB协议软硬件结合的书《圈圈教你玩USB》仍然值得翻一翻虽然成书时间比较早但协议部分讲得很扎实。2.3 传输类型和端点在攻击测试中的意义USB定义了四种传输类型控制传输、中断传输、批量传输和等时传输。控制传输用来配置设备通常是低速、但可靠性最高中断传输适合鼠标键盘这类低延迟小数据量的设备批量传输适合U盘、串口这类大数据量但不要求实时性的设备等时传输适合音频摄像头这类要求带宽稳定、但允许少量丢包的应用。从安全测试的角度看每种传输类型对应的攻击思路有所不同。比如HID键盘用的是中断传输模拟的时候就要按照中断端点的调度要求以固定的间隔发送按键报告不然主机可能认为设备异常U盘用的是批量传输做固件提取或者协议逆向的时候就要处理大数据包的拆分和重组USB CDC虚拟串口用的也是批量传输但实际通信内容还是AT命令或者数据流所以在抓包分析的时候要先了解上层协议。理解这些区别能避免你在模拟设备时出现“主机不识别”、“设备一拔就崩”这类奇怪问题。3. 最经典的实验用GreatFET模拟HID键盘做注入测试3.1 实验原理和为什么选HID而不是其他设备类型HIDHuman Interface Device人机接口设备是USB设备里最让人又爱又恨的一类。恨它是因为主机系统基本上无条件信任HID键盘不需要装额外驱动而且操作权限是用户态的。爱它是因为这种机制给我们做安全研究提供了很直观的测试窗口只要把设备模拟成键盘系统就会自动识别并接收我们下发到按键事件。在授权测试中模拟HID键盘主要用来验证终端安全的防护能力比如测试EDR、桌面管控软件对“自动注入按键”的检测是否有效。一个合格的安全研究员应该把这类技术用在有书面授权的测试环境里而不是在公共场合乱来。这也是我一直强调的底线工具本身是双刃剑怎么用取决于人。3.2 硬件接线与Python脚本实操我用的是GreatFET One接Facedancer扩展板来做HID模拟其实GreatFET的固件本身也支持直接配置HID。连接方式不复杂GreatFET One通过USB线连到你的控制电脑Facedancer扩展板插在GreatFET背上然后通过排线引出一个USB口插到目标测试机上。控制电脑上运行Python脚本实际发送按键指令。下面是一个简化版的Python示例思路是定义一段HID报告描述符让设备在目标机上枚举成为键盘然后周期性地发送按键报告。代码我做了裁剪重点展示结构和整个流程from greatfet import GreatFET from greatfet.protocol import usb_descriptors # 连接板子 gf GreatFET() # HID键盘的报告描述符示意 keyboard_report_descriptor bytes([ 0x05, 0x01, # Usage Page (Generic Desktop) 0x09, 0x06, # Usage (Keyboard) 0xA1, 0x01, # Collection (Application) 0x05, 0x07, # Usage Page (Keyboard) 0x19, 0xE0, # Usage Minimum (Left Control) 0x29, 0xE7, # Usage Maximum (Right GUI) 0x15, 0x00, # Logical Minimum (0) 0x25, 0x01, # Logical Maximum (1) 0x75, 0x01, # Report Size (1) 0x95, 0x08, # Report Count (8) 0x81, 0x02, # Input (Data, Variable, Absolute) 0x95, 0x01, # Report Count (1) 0x75, 0x08, # Report Size (8) 0x81, 0x03, # Input (Constant) 0x95, 0x05, # Report Count (5) 0x75, 0x01, # Report Size (1) 0x05, 0x08, # Usage Page (LEDs) 0x19, 0x01, # Usage Minimum (Num Lock) 0x29, 0x05, # Usage Maximum (Kana) 0x91, 0x02, # Output (Data, Variable, Absolute) 0x95, 0x01, # Report Count (1) 0x75, 0x03, # Report Size (3) 0x91, 0x03, # Output (Constant) 0x95, 0x06, # Report Count (6) 0x75, 0x08, # Report Size (8) 0x15, 0x00, # Logical Minimum (0) 0x25, 0xFF, # Logical Maximum (255) 0x05, 0x07, # Usage Page (Keyboard) 0x19, 0x00, # Usage Minimum (Reserved) 0x29, 0x65, # Usage Maximum (Application) 0x81, 0x00, # Input (Data, Array) 0xC0 # End Collection ]) # 配置设备的VID/PID、描述符并启动枚举 # ... # 发送按键报告按顺序按下H(0x0B)、e(0x08)、l(0x0F)、l(0x0F)、o(0x12) def send_keystroke(gf, keycode): report bytes([0x00, keycode, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) # 将report通过中断端点上报给主机 # ... # 在目标机器上打开记事本并输入一段文字 # ...真实项目里完整流程会涉及更多细节设置设备描述符、配置Facedancer的端点处理、处理枚举状态机等。如果你想在Windows上验证效果可以尝试让脚本先按WinR打开运行框再输入一段命令在Linux上可以试试打开终端执行xdotool type等。但请记住所有测试都必须在你自己的设备、自己搭建的实验环境里做别把矛头对着别人。3.3 踩坑记录为什么我第一次模拟的键盘不工作第一次跑通这个实验我踩了好几个坑这里挑典型的说。第一个坑是报告描述符里的HID Usage ID和实际键盘键值对不上。键盘上每个键在USB HID协议里都有一个固定的Usage ID比如字母A是0x04B是0x05数字1是0x1E。一开始我发的是ASCII码上去目标机器自然毫无反应因为主机只认HID Usage ID不认ASCII。后来我在脚本里维护了一张键码映射表才解决。第二个坑是发送按键时没有处理“按下”和“释放”两个状态。HID键盘报告每次发送8个字节第一个字节是修饰键Ctrl、Shift、Alt等后面几个字节是普通按键。你发一个按键值主机只当它“被按下”必须再发一个全0的报告表示“已释放”否则目标机器会认为你一直按住那个键导致输入重复。这个细节在代码里不处理好效果会非常奇怪。第三个坑是键盘布局的问题。我用脚本发送的按键是基于美式布局映射的但在非英文键盘上某些符号位置会对不上。比如美式布局里Shift2是在德式键盘上可能是引号。做跨区域测试的时候最好直接按功能键名字发送或者用目标系统当前键盘布局重新映射不然就会出现“明明发送的是出来却是别的符号”的尴尬。3.4 这类攻击的检测与防护思路讲完了攻击侧再说说防御侧。HID注入攻击的检测思路核心是“在不该出现键盘输入的时候突然出现了键盘输入”。比如一台服务器长期没有插过新USB设备某天突然枚举出一个HID键盘这就是一个巨大的异常信号。Windows的增强防御、Linux的USBGuard、EDR产品的USB外设白名单策略很多都围绕这个思路来设计。从个人防护角度最简单的办法是物理锁无人值守的机器用锁具锁死USB口或者用胶水堵住不用的USB口。从企业角度可以通过组策略禁用非白名单的USB设备或者至少给USB设备加上“用户确认”的交互流程。做安全研究的人也应该明白攻击技术研究的目的不是为了炫耀破坏力而是为了验证防御有效性最终推动整体安全水位提升。4. 让GreatFET变成USB流量抓包器4.1 为什么需要用GreatFET而不是直接装Wireshark抓USB很多人用Wireshark抓过网络包但一提到USB抓包就想到装USBPcap在Windows上抓本机USB流量。这种方案的局限很明显它只能看到自己主机视角的USB通信看不到另一端设备的行为而且有些USB控制请求是在系统底层处理的用户态抓包不一定能看到完整内容。用GreatFET做USB流量抓包本质上是让板子扮演一个“总线中间人”或者“嗅探器”把USB主机和设备之间的通信全部录制下来再通过串口或者网络传给PC上的Wireshark分析。这样做的优势在于你看到的是总线上的全部数据包不依赖目标机器的驱动栈适合做设备侧固件协议分析、私有协议逆向、以及USB设备行为审计。但需要说明的是高速USB480Mbps的全速抓包对硬件要求很高光靠GreatFET本身的资源不一定能稳定扛住所有高速流量。我自己的经验是对USB 1.1全速12Mbps和低速1.5Mbps设备比如鼠标、键盘、全速USB转串口模块抓包效果很好对USB 2.0高速存储设备如果流量很大建议用专门的硬件USB分析仪或者用GreatFET配合合理的抓包策略只过滤特定端点的流量避免缓冲区溢出。4.2 搭建一套USB嗅探实验环境要搭建一个USB嗅探实验大致需要这样几个环节。首先准备一台运行Linux的控制电脑安装好greatfet软件和Wireshark。其次把GreatFET的USB口连到控制电脑通过命令行确认板子状态# 查看GreatFET是否被识别 gf info # 查看固件版本 gf firmware info确认板子正常之后将目标USB设备比如一个USB转串口模块、一个U盘连接到GreatFET的USB主机口再通过GreatFET把数据转发或记录到PC端。具体抓包时可以用gf sniff-usb命令或者写Python脚本开启USB采集把采集到的数据保存为pcap文件然后在Wireshark里打开分析。注意Wireshark打开pcap文件后你需要通过USB协议分析器来浏览URBUSB Request Block数据。URB是Linux内核里代表一次USB传输的数据结构Wireshark会把URB解析成更易读的字段比如传输方向、端点号、传输类型、数据内容。你还可以用usb.transfer_type、usb.endpoint_number、usb.bmRequestType这些过滤器过滤感兴趣的包例如只看某个特定设备发送回来的数据。4.3 一个实际抓包案例逆向USB转串口模块的通信过程我在做某个项目时需要逆向一款基于CP2102N的USB转串口模块的通信逻辑。表面上它是标准CDC设备驱动装好就是一个COM口但我们的目标是想确认模块收到多少字节、在什么时间点回包以及有没有额外的控制命令下发。把模块插到GreatFET的USB口上然后写Python脚本读取串口数据同时在Wireshark里抓包整个过程很直观。大概抓了五分钟就看到了设备端点0上的各种控制请求、批量端点上的数据块。过滤usb.endpoint_number 0x01之后就能清楚看到模块往电脑上报的每一包数据结构非常清晰。配合tshark -r capture.pcap -Y usb.transfer_type 0x02这样的命令行过滤还可以快速批量统计批量传输的数量和包长分布。这个案例让我体会最深的一点是做USB协议逆向没必要一开始就上高价商业分析仪。先摸清设备是低速还是全速、中断还是批量传输、端点号是多少然后用GreatFET加上Wireshark做一轮分析和整理很多时候已经能回答大部分问题了。只有当你需要精确定时分析高速流量、需要看到信号级波形的时候才需要上更专业的仪器。4.4 分析USB抓包时常用的Wireshark过滤规则整理几个我在USB抓包时常用的Wireshark过滤器方便新手上手过滤表达式作用usb显示所有USB协议包usb.transfer_type 0x02只看批量传输0x02usb.transfer_type 0x03只看中断传输0x03usb.endpoint_number 0x81只看端点0x81上的所有包usb.bmRequestType 0x80只看设备到主机的控制请求usb.setup.bRequest 0x06只看GET_DESCRIPTOR请求usb.capdata只看带数据的USB包usb.bus_id 1只看某条USB总线上的包结合前面的枚举流程你可以非常直观地看出来一个设备从插入到正常工作的过程中主机到底发了哪些请求、设备回了哪些数据。这对协议分析、恶意设备行为分析都有帮助。5. GreatFET的“More”不止USB的安全研究玩法5.1 用Facedancer模式做USB设备模糊测试USB攻击不只有HID注入还有一大块是USB设备模糊测试向USB设备发送畸形请求、超长数据、非法端点访问观察设备是否崩溃、是否产生异常响应借机挖掘设备固件里的漏洞。GreatFET通过Facedancer模式可以把自己模拟成一个USB设备接收来自宿主机的各种USB请求这时候你就可以在控制端构造各种畸形请求观察目标驱动的反应。这一类模糊测试在国外安全圈非常流行因为现代操作系统和主流芯片厂商都在USB协议栈上投入了大量安全性测试但很多外围USB设备比如摄像头、读卡器、网卡的固件并没有经过同等强度的安全验证。通过GreatFET做设备端模糊测试可以很系统地发现这些固件的输入校验漏洞。做这类研究时建议在隔离虚拟机里跑目标驱动免得把宿主机搞崩。5.2 当逻辑分析仪和总线调试器用GreatFET上的FPGA和大量GPIO让它还能变身一台入门级逻辑分析仪。配合greatfet的gpio和logic功能你可以用Python脚本控制引脚拉高拉低也可以采样数字信号。对于SPI、I2C、UART这类低速总线的调试GreatFET完全够用。我实际用过一个场景想提取某块开发板上SPI Flash里的数据但是手头没有专门的编程器。我先把SPI Flash的CS、CLK、MOSI、MISO四根线飞线到GreatFET的排针上然后用Python脚本模拟SPI主机发送读ID的命令确认连接无误之后再用标准的READ命令把整片Flash内容读出来保存成bin文件。整个过程很快也比单独买一台SPI Flash编程器省钱省占地面积。遇到I2C设备时用gf i2c子命令扫一下总线上挂的设备地址也特别方便。5.3 调试固件和刷写操作DFU与JTAGUSB DFUDevice Firmware Update是很多嵌入式设备的固件升级方式。开发者在调试自己做的USB设备时经常会遇到“设备枚举失败、进不了正常模式”的窘境。这时候如果设备支持DFU模式用GreatFET直接操作DFU命令刷写固件比反复拔插USB线要稳定得多。GreatFET官方固件的升级也走这个路子用gf firmware update命令就能刷写。另外GreatFET的引脚可以接到目标板的JTAG/SWD接口上配合OpenOCD做简单的调试与烧录。虽然不能替代专业的J-Link但在没有专用调试器时作为一个备用方案完全说得过去。比如我在调试一块STM32F407板子时不想额外买调试器就是用GreatFET的GPIO模拟了一个简单的SWD时序把固件烧进去的之后再用串口确认启动日志。5.4 电台周边与信号扩展和HackRF搭伙GreatFET还有一个很有意思的玩法是跟HackRF One软件无线电外设配合使用。HackRF负责射频信号的收发但它的GPIO扩展能力有限GreatFET可以充当HackRF的控制前端提供额外的GPIO、SPI、I2C接口用来控制射频开关、LED指示或者其他扩展电路。虽然这块对大部分只搞USB安全的朋友来说可能用不上但它体现了GreatFET在设计上“不只是USB工具”的定位是一台通用嵌入式开发板。5.5 DIY一个自己的USB审计小工具如果你肯花点时间可以把GreatFET和Python脚本打包成一个“USB设备审计小工具”。比如写一个脚本自动遍历目标机器上已连接的USB设备读取它们的VID/PID、字符串描述符、HID报告描述符并给出基础的安全建议。这种工具放在电脑上每次插入新USB设备时自动跑一遍能提醒你注意来源不明的设备。GreatFET的Python API让这类工具开发起来很快我大概花了一个晚上就写了一个命令行版本后来还加上了日志记录和告警功能。6. 常见问题与排查技巧实录6.1 板子连接后电脑不识别怎么办我遇到过好几次“板子插上没反应”的情况每次排查步骤基本一致。第一步换一根USB数据线很多USB线只能充电不能传数据这个问题尤其容易出现在桌面上堆了一大堆充电线的时候第二步检查设备管理器或者Linux的dmesg输出看USB枚举是否成功如果出现device descriptor read/64, error -71之类八成是线材或供电问题第三步重新拔插并尝试另一个USB口某些USB Hub的供电不足也可能导致板子反复枚举失败。如果在Linux下遇到了权限问题gf info提示Permission denied通常是没有配置udev规则。官方文档里有创建/etc/udev/rules.d/99-greatfet.rules的说明把USB设备的权限改成普通用户可访问即可。同样的问题在Windows下则表现为驱动未安装或驱动签名问题需要手动安装Zadig或官方提供的WinUSB驱动。6.2 固件版本太旧导致功能异常GreatFET的固件更新频率虽然不算高但偶尔也会修复一些USB协议栈的问题。如果你发现某个功能一直不正常比如HID枚举出来了但发送数据没反应先确认固件版本是不是最新。升级方法很简单# 升级GreatFET固件 gf firmware update升级完成后用gf info确认版本号。如果升级过程中板子变砖了大多数情况下还能进入DFU恢复模式重新刷写不用太担心。不过记得升级前先备份好你改过的任何配置。6.3 识别VID/PID怎么确认设备就是GreatFETUSB设备靠VID/PID区分身份GreatFET的VID是1d50PID通常为6089。在Linux下用lsusb输出里会看到类似Bus 001 Device 002: ID 1d50:6089 OpenMoko, Inc.的字样。如果在Windows下看不到设备可以打开设备管理器找到带感叹号的设备右键查看属性里的硬件ID也能看到VID/PID信息。这个技能对日常调试USB设备很有用别再记不住自己的设备到底是哪个了。6.4 别把USB转串口工具和GreatFET混为一谈最后再叮嘱一下FT232R、CP2102N这类USB转串口芯片的作用是让电脑通过USB虚拟出一个串口它们处理的是“USB到UART的桥接”本质上对USB协议层只做了有限处理。而GreatFET是一块可编程USB引擎可以收发任意USB请求、模拟任意USB设备、抓取总线流量。两者定位完全不同不能用“能不能转串口”来衡量GreatFET的性价比。实际项目里我通常两者都备着串口调试用USB转TTL小板USB协议层分析、模拟、抓包全交给GreatFET。6.5 常见异常速查表现象可能原因建议操作板子插上电脑无任何反应数据线只能充电、USB口供电不足换线、换口检查dmesggf info提示权限不足udev规则未配置添加99-greatfet.rules后重插Linux下枚举报error -71线材或供电问题换短线直插主机USB口HID键盘枚举成功但按键无效HID键码不是ASCII检查HID Usage ID映射按键发出去后一直重复输入没有发送“释放”报告发完按键值补发全0报告模拟非美式布局主机时符号错乱键盘布局差异按功能键名映射或按布局调整高速设备抓包丢包带宽受限降低流量或换专用USB分析仪固件升级后功能异常版本兼容问题重新升级或恢复DFU模式我自己在大量实验里体会最深的一点是做USB安全研究不要一上来就追着最新工具跑。先把USB协议、枚举流程、描述符结构这些底子打牢再配合GreatFET这类可编程工具反复做实验才能建立对“USB攻击点在哪里”的肌肉记忆。GreatFET的学习曲线不算平缓尤其是第一次配置环境、第一次写描述符、第一次看着Wireshark里跳出一大堆URB包的时候会觉得信息量爆炸。但只要你肯静下心从最简单的HID模拟实验开始一步步推进它绝对能成为你硬件安全武器库里最趁手的一件工具。
返回列表