從路由器真機提取韌體包(一)

2023-01-20 21:00:30

前言

IOT也有一段時間了,但是一直都是從官網獲取韌體包,沒有嘗試過從真機裡提取韌體。在看了一些師傅的文章後決定嘗試一下從真機中提取韌體。正好手裡也有幾個路由器,於是用剛到手的獎學金去買了提取韌體所需要的工具用來學習一下如何通過串列埠偵錯獲取韌體。

所用到的工具及裝置

  • FT232
  • 電烙鐵
  • 杜邦線
  • 萬用表
  • xxx 路由器
  • SecureCRT

前置知識

串列埠介紹

串列埠是一個泛稱,UART、COM、TTL、RS232、RS485都遵循類似的通訊時序協定,因此都被通稱為串列埠。
而在嵌入式開發中所聽到的串列埠一般指的是UARTUART使用的是非同步序列通訊,以字元為傳輸單位,一位一位的順序輸送;通訊中兩個字元間的時間間隔是不固定的 ,然而同一個字元內兩個相鄰位之間的時間間隔是固定的。資料的傳送速率用波特率來表示,即每秒鐘傳送的二進位制位數。一般選波特率都會有9600,19200,115200等,最常用的是115200。
UART有四個pin,分別是VCC,GND,RX,TX,用的是TTL電平,低電平為0V,高電平為3.3V-5V

UART 引腳介紹
  • VCC:供電pin,一般是3.3v,在我們的板子上沒有過電保護,這個pin一般不接更安全(在路由器通電的時候可以不連VCC)。
  • GND:接地pin,有的時候RX接受資料有問題,就要接上這個pin,一般也可不接。
  • RX:接收資料pin。
  • TX:傳送資料pin。

UART 通訊

UART最好的一點是它只使用兩根線就可以在裝置之間傳輸資料。在UART通訊中,兩個UART直接相互通訊。傳送UART將來自CPU等控制裝置的並行資料轉換為序列形式,並將其序列傳送到接收UART,接收UART然後將序列資料轉換回接收裝置的並行資料。在兩個UART之間傳輸資料只需要兩根線。資料從傳送UARTTX引腳流向接收UARTRX引腳,也就是接受和傳送資料的UARTRX和TX要反過來連線。

尋找 UART 串列埠,並定位 pin

下圖是筆者拆開xxx 路由器得到的板子,可以看到紅色方框裡有四個孔,這就是UART串列埠,並且這個板子很人性化已經給我們標好了引腳的名稱。

如果沒給我們標註好串列埠的名稱,我們也可以通過萬用表去定位每一個引腳。

1、定位 GND

將萬用表調到蜂鳴檔,然後將黑表筆接到背面電源焊錫點,紅表筆分別觸碰UART四個引腳的焊接點。發出聲響的就是GND引腳。

2、定位 VCC

將萬用表調到直流20V,然後將黑表筆放到剛剛判斷的GND引腳上,再用紅表筆觸碰其他三個焊接點進行測試。電壓穩定在3.3V或5V左右的那個引腳即為VCC引腳。

3、定位 TXD

開機會出現資料傳輸,如果該引腳出現了電壓變化,則該引腳是TXD。黑表筆放到剛剛判斷的GND引腳上,重啟路由器,用紅表筆觸碰其他兩個引腳,電壓發生變化的即為TDX

4、定位 RXD

確定了其他三個引腳之後,剩下的一個即為RDX

實操

焊接並連線 UART 串列埠

下圖可以看到四個孔處已經被讀者用電烙鐵焊上了幾根針,可以便於我們用杜邦線將板子與FT232相連線。

之後,我們用杜邦線把板子和FT232GND相連,把兩者的RXDTXD反著連。(也就是板子的RXDFT23的TXD相連,板子的TXDFT23的RXD相連)注意:在板子通電後最好不要將兩者的VCC相連,否則可能損壞裝置。

提取韌體

在連線好FT232與板子上的串列埠之後,我選擇使用SecureCRT連線進shell。在這裡我們可以看出想要進入shell,那麼我們必須有登入名和密碼。所以通過shell提取韌體有一定的侷限性。要麼該裝置不需要賬號密碼就能登陸,要麼知道該裝置登陸的賬號和密碼。

登陸上之後用tftf或者nc等方法即可將韌體傳出來。