You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拦截USB传输数据及获取.dll/.so发往USB的字节以开发Android驱动

捕获.dll/.so发往USB设备的字节数据方案

没问题,针对你要获取USB写入端点字节数据的需求,这里有几个实用且可落地的方案,帮你拿到目标库发往设备的原始字节流:

1. 直接使用USB总线嗅探工具

这是最直接的方法,不需要修改或Hook任何代码,直接捕获USB总线上的所有通信数据包:

  • Windows平台:可以用Wireshark(需安装USB捕获插件)或者USBTrace。打开工具后选择对应的USB设备,过滤usb.transfer_type == 0x02(批量传输,大部分设备的写入端点用这个)或者指定端点地址,就能看到所有发送到设备的原始字节数据,还能解析出传输长度、端点信息等。
  • Linux平台:使用内核自带的usbmon工具,先加载模块modprobe usbmon,然后用tcpdump或者Wireshark捕获usbmon接口的数据包,同样可以过滤目标设备和写入端点,提取发送的字节内容。

2. Hook USB相关API并记录数据

既然你已经了解拦截.dll调用的方法,可以针对性Hook程序中用来写入USB的API,直接记录传入的字节数组:

  • Windows平台:如果目标.dll用Win32 API(比如WriteFile)或者WinUSB API(比如WinUsb_WritePipe),可以用Detours或MinHook这类Hook库,在函数调用前,把缓冲区里的字节数据转成十六进制格式写入日志文件。例如HookWinUsb_WritePipe时,取出pBuffer参数指向的内存内容,按字节输出。
  • Linux平台:如果目标.so依赖libusb,可以用LD_PRELOAD机制自定义一个包装库,Hooklibusb_bulk_transfer或libusb_interrupt_transfer函数,在调用原函数前,将发送的数据缓冲区内容记录到日志中。

3. 调试器动态分析获取数据

用调试器附加到调用目标库的进程,断点在USB写入函数上,实时查看发送的字节数据:

  • Windows平台:用x64dbg或WinDbg附加进程,找到目标.dll调用的USB写入函数(比如WinUsb_WritePipe),设置断点。当断点触发时,查看函数参数中的缓冲区地址,然后dump该地址的内存内容,就能拿到发送的字节数组。
  • Linux平台:用GDB附加进程,断点设在libusb_bulk_transfer,触发后通过x命令查看发送数据缓冲区的内存,比如x/100bx 0x12345678(以十六进制字节形式查看100个字节)。

小提示

  • 先确认目标程序使用的USB通信API(是系统通用的WinUSB/libusb,还是厂商自定义的驱动接口),这样能更精准地选择Hook或断点的目标函数。
  • 如果捕获到的数据是加密的,可能还需要额外分析.dll/.so的加密逻辑,但只是获取原始字节流的话,以上方法完全够用。

内容的提问来源于stack exchange,提问作者Allan Veloso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:46