關于CAN總線逆向工程的初步探討
隨著中國汽車業的發展,汽車的后端市場也日趨繁榮,但由于各汽車生產廠家的技術壁壘,后端設備供應商如GPS,車載音響,車載DVD,診斷儀等供應商很難得到原汽車廠家各車型的報文定義,以使自己的產品完全和車載兼容。本文將以美國英特佩斯控制系統有限公司的產品(軟件:Vehicle Spy,硬件:neoVI)為例,探討如何解碼CAN總線報文。
Vehicle Spy產品是美國通用汽車的標準測試工具,可以同時支持HS CAN、MS CAN、ISO9141、J1850VPW、J1850PWM、LIN等多種總線協議、 實現車載網絡診斷、節點/ECU仿真、數據采集、自動測試和車載網絡總線監控等功能,相對于其它的總線工具,該產品注重用戶使用的高效性和便捷性,易于用戶學習和使用。
Vehicle Spy可以通過兩種方式監控總線通信:通過車載的ODB接口監控汽車總線通信(圖1)和直接監控ECU之間的通信(包括診斷儀和被診斷設備,圖2)
當設備連接正常并設置好正確的波特率后,打開Vehicle Spy運行界面,無論是車載總線通信數據或是ECU間的總線通信數據都會被毫無遺漏的實時顯示在監控界面上,圖3顯示的是監控的車載CAN總線數據,這些數據都是未經解碼的原始數據,接下來 我將介紹監控界面的各項:
1)、圖3中①所在的部分是濾波器,因為vspy可以同時監控多種網絡數據,該濾波器基于網絡類型濾波,例如,勾選HSCAN,則監控界面將只顯示HSCAN類型網絡數據。
2)、圖3中②所指的欄為濾波欄,在該欄中可以更靈活實現濾波功能,如根據報文名稱,ArbID等濾波,支持“?”“*”等符號,比如現在我們只想監控Arb ID為110和120的報文,則只需要在ArbID欄輸入110,120則可,如圖4所示:
3)、圖3中③所指為進制切換按鈕,只需簡單點擊即可將報文數據切換成其它進制(默認為16進制)。
4)、圖3中數據字節為藍色背景的部分表示變化較慢的數據(④所指)
5)、圖3中數據字節為黑色背景的部分表示變化較快的數據(⑤所指)
6)、圖3中數據字節無背景顏色的部分表示出現過后在一段時間沒有再出現的數據(該時間值是可以設定的)
7)、整個監控界面實際上也是一個緩沖區,該緩沖區的數據可以隨時保存,保存的數據可以用于以后回放以分析數據,圖3所其實就是在回放數據文件,⑥所指為緩沖區進度條。
8)、vspy的默認屬性欄包含了報文數量統計,報文接收時間等屬性,還有其他的屬性用戶可以在設置欄自己定義,這將非常有助于逆向分析。
通過以上的介紹,相信有經驗的工程師已經看出這款產品在總線數據解碼方面的優越性。對于車載CAN總線,由于CAN報文的優先級取決于ArbID,ID值越小,優先級越高,這為我們揣測報文是來自于車載上的哪個ECU提供了依據,由于vspy可以實時無遺漏地監視總線通信報文變化并能以各種顏色來區分數據變化的快慢,因此我們可以通過反復動作車輛來觀察報文變化情況,如開關車門,開和關會引起某個數據字節中的某位產生狀態變化,由于這種變化是非連續性的快速變化數據,在監控界面中必然會以藍色背景顯示,因此我們可以在開關車門的時候在監控界面查找有藍色變化的報文,并將這些報文用上述的濾波功能過濾出來以縮小監視范圍,然后反復動作車門以確定是哪條報文的某位隨著車門動作在變化,這將很容易辨別,在得出結論以后,再將該位提取出來并命名然后再動作車門以進行驗證。當然,vspy提供解析報文的功能,比如我們判定圖3中ArbID為510的報文中第二字節第二位表示車門開關,則可將該位命名為door control,并將該條報文設置為其它顏色,以方便觀察,解析的結果如圖5所示,對解析的結果,vspy還可以將其保存為標準的DBC格式。對于直接監視ECU之間的通信,則過程會簡單的多。
當然,如果要解碼ECU的所有報文,工作量會非常大,如果是解碼整個車輛的報文,那可能是需要團隊來完成,本文只是對解碼工作做初步探討,拋磚引玉,希望能與大家交流。