使用Wireshark捕捉USB通信數據

使用Wireshark捕捉USB通信數據

USB,是英文Universal Serial Bus(通用串行總線)的縮寫,而其中文簡稱爲“通串線”,是一個外部總線標準,用於規範電腦與外部設備的連接和通訊。USB接口支持設備的即插即用和熱插拔功能,是應用在PC領域的接口技術。

現在,越來越多的人喜歡使用USB設備了。很多的設備都會選擇使用USB接口來作爲設備的通信端口,而這也是一種流行的趨勢,這有助於不同設備之間標準的統一。那麼,你對USB設備的工作方式和運行機制真的瞭解嗎?無論你是一個硬件黑客,還是一名對外圍設備感興趣的技術愛好者,USB設備都是一個非常具有挑戰性的領域。在Wireshark的幫助下,我們不僅可以嗅探並截獲到USB設備所發送的數據流信息,而且我們還可以將這些捕獲到的數據存儲至我們的主機中。我們實驗所使用的主機安裝的操作系統爲Windows或者Linux。

在這篇文章中,我們將會討論如何使用Wireshark來捕捉USB設備的通信數據。在我撰寫這篇文章的過程中,我使用到了下列材料:

Wireshark 2.0.1 (SVN)
Linux kernel 4.1.6

在實際操作過程中,你可以選擇使用版本號高於1.2.0的任意版本Wireshark來進行操作。在此,我並沒有在本文中提供Windows系統的操作步驟,我會在實驗操作完成之後的第一時間給大家提供這部分的信息。

一些背景知識

在我們開始操作之前,我覺得還是得給大家介紹一些有關USB設備的基礎知識。USB有其自己的標準和規範。基本而言,我們可以通過以下三種方式來使用USB:

USB UART接口
USB HID(交互設備)
USB存儲設備

UART,即通用異步接收/發送器。這類設備只能夠利用USB來進行數據的接收和發送操作。實際上,這類設備與普通的通信設備並沒有本質上的區別。

HID,即人機交互設備。這也是USB作爲接口來使用的一種典型應用。這類設備包括鍵盤,鼠標,遊戲控制器,以及很多簡單的顯示設備等等。

最後就是USB存儲設備,這也是最常見的一種USB使用形式。比如說外接硬盤,U盤和閃存驅動器等等,這些都屬於USB存儲設備這一類。

正如你所瞭解的那樣,USB交互設備和USB存儲器這兩大類USB設備是目前我們使用最爲廣泛的。

現在,每一種USB設備,尤其是人機交互設備和存儲設備,都有一串特殊的數字,這串數字被稱爲廠商ID和產品ID。這兩個數字一般是成對出現的。廠商ID用於標明該產品是由哪一個製造商所生產的,而產品ID是產品的標識符。需要注意的是,產品ID並不是序列號。具體情況如下圖所示:

上圖所顯示的是連接至我這臺計算機的USB設備信息。我們可以調用lsusb命令來查看系統中的USB設備信息。

首先,我們要選擇一個設備來進行實驗。我有一個羅技無線鼠標,這是一種人機交互設備。而這個鼠標中也配備有一個數據接收裝置,所以我決定將這個無線鼠標作爲我的實驗對象。你能從上圖所示的信息中找到這個鼠標嗎?沒錯,就是第四個。該設備的具體信息如下:

Bus 003 Device 010: ID 046d:c52f Logitech, Inc. Unifying Receiver

ID部分所顯示的數據爲046d:c52f,這是廠商ID和產品ID(廠商ID: 產品ID)。很明顯,廠商ID爲046d,產品ID爲c52f。

除此之外,我們可以看到開頭的“Bus 003 Device 010”。這段信息告訴我們這一USB設備所連接的是哪一條總線。這是一條非常重要的信息。

準備工作

現在,我們需要使用root權限來運行Wireshark,並利用Wireshark來嗅探USB通信數據。當然了,我們並不建議大家利用root權限來進行操作。我們可以使用Linux提供的usbmon來爲我們獲取和導出數據信息的操作賦予足夠的權限。具體請參考Linux-udev。我們所要做的就是創建一個usbmon group,然後將我們的賬號加入這個組,最後生成相應的udev規則。相關操作命令如下:

addgroup usbmon
gpasswd -a $USER usbmon
echo 'SUBSYSTEM=="usbmon", GROUP="usbmon", MODE="640"' > /etc/udev/rules.d/99-usbmon.rules

接下來,我們需要使用usbmon的內核模塊。如果系統還未加載該模塊,我們可以使用root權限並運行下列命令來進行加載。

modprobe usbmon

數據捕捉

打開Wireshark之後,我們可以看到如下圖所示的接口列表。你應該能看到形如usbmonX的信息,其中X爲數字。下圖顯示的是我的信息(沒錯,我使用了root權限):

如果Wireshark檢測到了接口中有數據流信息,它會以波形圖的形式將信息顯示給我們。那麼,我們該選擇哪一個呢?還記得我之前說過的嗎?沒錯,數字“X”所對應的就是設備所連接的USB總線。在我的操作過程中,目標設備爲usbmon3。我們打開它之後,就可以看到其中的數據流信息了。點擊usbmon接口,然後點擊那個藍色的魚鰭圖標。

然後呢?

我們在成功捕獲了數據流信息之後,我們能做什麼呢?這一切都將取決於我們自己。通常情況下,我們可以通過這些信息來了解設備與主機的通信機制。而且在某些情況下,我們還可以利用這些信息並結合我們自己的知識來對其進行逆向工程分析。
sigline.gif
本文轉自 K1two2 博客園博客,原文鏈接:http://www.cnblogs.com/k1two2/p/5193535.html ,如需轉載請自行聯繫原作者

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章