看IOT
也有一段時間了,但是一直都是從官網獲取韌體包,沒有嘗試過從真機裡提取韌體。在看了一些師傅的文章後決定嘗試一下從真機中提取韌體。正好手裡也有幾個路由器,於是用剛到手的獎學金去買了提取韌體所需要的工具用來學習一下如何通過串列埠偵錯獲取韌體。
串列埠是一個泛稱,UART、COM、TTL、RS232、RS485都遵循類似的通訊時序協定,因此都被通稱為串列埠。
而在嵌入式開發中所聽到的串列埠一般指的是UART
。UART
使用的是非同步序列通訊,以字元為傳輸單位,一位一位的順序輸送;通訊中兩個字元間的時間間隔是不固定的 ,然而同一個字元內兩個相鄰位之間的時間間隔是固定的。資料的傳送速率用波特率來表示,即每秒鐘傳送的二進位制位數。一般選波特率都會有9600,19200,115200等,最常用的是115200。
UART
有四個pin
,分別是VCC,GND,RX,TX
,用的是TTL
電平,低電平為0V
,高電平為3.3V-5V
。
UART
最好的一點是它只使用兩根線就可以在裝置之間傳輸資料。在UART
通訊中,兩個UART
直接相互通訊。傳送UART
將來自CPU
等控制裝置的並行資料轉換為序列形式,並將其序列傳送到接收UART
,接收UART
然後將序列資料轉換回接收裝置的並行資料。在兩個UART
之間傳輸資料只需要兩根線。資料從傳送UART
的TX
引腳流向接收UART
的RX
引腳,也就是接受和傳送資料的UART
的RX和TX
要反過來連線。
下圖是筆者拆開xxx 路由器
得到的板子,可以看到紅色方框裡有四個孔,這就是UART
串列埠,並且這個板子很人性化已經給我們標好了引腳的名稱。
如果沒給我們標註好串列埠的名稱,我們也可以通過萬用表去定位每一個引腳。
1、定位 GND
將萬用表調到蜂鳴檔,然後將黑表筆接到背面電源焊錫點,紅表筆分別觸碰UART
四個引腳的焊接點。發出聲響的就是GND
引腳。
2、定位 VCC
將萬用表調到直流20V
,然後將黑表筆放到剛剛判斷的GND
引腳上,再用紅表筆觸碰其他三個焊接點進行測試。電壓穩定在3.3V或5V
左右的那個引腳即為VCC
引腳。
3、定位 TXD
開機會出現資料傳輸,如果該引腳出現了電壓變化,則該引腳是TXD
。黑表筆放到剛剛判斷的GND
引腳上,重啟路由器,用紅表筆觸碰其他兩個引腳,電壓發生變化的即為TDX
。
4、定位 RXD
確定了其他三個引腳之後,剩下的一個即為RDX
。
下圖可以看到四個孔處已經被讀者用電烙鐵焊上了幾根針,可以便於我們用杜邦線將板子與FT232
相連線。
之後,我們用杜邦線把板子和FT232
的GND
相連,把兩者的RXD
與TXD
反著連。(也就是板子的RXD
與FT23的TXD
相連,板子的TXD
與FT23的RXD
相連)注意:在板子通電後最好不要將兩者的VCC
相連,否則可能損壞裝置。
在連線好FT232
與板子上的串列埠之後,我選擇使用SecureCRT
連線進shell。在這裡我們可以看出想要進入shell,那麼我們必須有登入名和密碼。所以通過shell提取韌體有一定的侷限性。要麼該裝置不需要賬號密碼就能登陸,要麼知道該裝置登陸的賬號和密碼。
登陸上之後用tftf
或者nc
等方法即可將韌體傳出來。
本文來自部落格園,作者:{狒猩橙},轉載請註明原文連結:https://www.cnblogs.com/pwnfeifei/p/16926238.html