天天看點

如何用Wireshark捕獲USB資料?

現在越來越多的電子裝置采用usb接口進行通訊,通訊标準也在逐漸提高。那麼,我們就會好奇這些裝置是如何工作的?而無論你是一個硬體黑客,業餘愛好者或者隻是對它有一點興趣的,usb對我們都是具有挑戰性的。

如何用Wireshark捕獲USB資料?

事實上通過wireshark,我們可以捕獲到usb裝置發送給我們主機的資料,這樣就可以進一步研究了。

如何用Wireshark捕獲USB資料?

本文中,我們将向大家介紹怎樣通過wireshark捕獲usb資料,使用的環境如下:

你也可以用其他版本的wireshark,隻要是1.2.0以上的都行。這裡并沒有測試window上能不能行。

簡介

在開始前,我們先介紹一些usb的基礎知識。usb有不同的規格,以下是使用usb的三種方式:

uart或者universal asynchronous receiver/transmitter。這種方式下,裝置隻是簡單的将usb用于接受和發射資料,除此之外就再沒有其他通訊功能了。

hid是人性化的接口。這一類通訊适用于互動式,有這種功能的裝置有:鍵盤,滑鼠,遊戲搖桿和數字顯示裝置。

最後是usb memory,或者說是資料存儲。external hdd, thumb drive / flash drive,等都是這一類的。

其中使用的最廣的不是usb hid 就是usb memory了。

每一個usb裝置(尤其是hid或者memory)都有一個供應商id(vendor id)和産品識别碼(product id)。vendor

id是用來标記哪個廠商生産了這個usb裝置。product id用來标記不同的産品,他并不是一個特殊的數字,當然最好不同。如下圖:

如何用Wireshark捕獲USB資料?

上圖是連接配接在我電腦上的usb裝置清單,通過lsusb檢視指令。

例如說,我有一個無線滑鼠logitech。它是屬于hid裝置。這個裝置正常的運作,并且通過lsusb這個指令檢視所有usb裝置,現在大家能找出哪一條是這個滑鼠嗎??沒有錯,就是第四個,就是下面這條:

bus 003 device 010: id 046d:c52f logitech, inc. unifying receiver

其中,id 046d:c52f就是vendor-product id對,vendor id的值是046d,并且product id的值是c52f。bus 003 device 010代表usb裝置正常連接配接,這點需要記下來。

準備

我們用root權限運作wireshark捕獲usb資料流。但是通常來說我們不建議這麼做。我們需要給使用者足夠的權限來擷取linux中的usb資料流。我們可以用udev來達到我們的目的。我們需要建立一個使用者組usbmon,然後把我們的賬戶添加到這個組中。

addgroup usbmon

gpasswd -a $user usbmon

echo 'subsystem=="usbmon", group="usbmon", mode="640"' > /etc/udev/rules.d/99-usbmon.rules

接下來,我們需要usbmon核心子產品。如果該子產品沒有被加載,我們可以通過以下指令家在該子產品:

modprobe usbmon

捕獲

打開wireshark,你會看到usbmonx其中x代表數字。下圖是我們本次的結果(我使用的是root):

如何用Wireshark捕獲USB資料?

如果接口處于活躍狀态或者有資料流經過的時候,wireshark的界面就會把它以波形圖的方式顯示出來。那麼,我們該選那個呢?沒有錯,就是我剛剛讓大家記下來的,這個x的數字就是對應這usb bus。在本文中是usbmon3。打開他就可以觀察資料包了。

如何用Wireshark捕獲USB資料?

最後

那麼我們擷取到了這些有什麼用呢?通過這些,我們可以了解到usb裝置與主機之間的通信過程和工作原理,也許我們就可以把這些知識用到逆向工程中,得到一些東西。好了,就到這裡!!!

作者:老王隔壁的白帽子

來源:51cto

繼續閱讀