What is UDS Service 0x10 - Diagnostic Session Control ?

来源:https://www.cnblogs.com/mysticbinary/archive/2023/03/08/17195504.html
-Advertisement-
Play Games

Why need the UDS Service 0x10? ECU在正常工作時會處於某一個會話模式下,上電後會自動進入預設會話模式,所以ECU啟動後我們不需要輸入0x10 01來進入該會話模式。ECU的不同會話模式間存在一定的狀態轉換關係規則(特定邏輯)。 初次接觸UDS的話,可能不太理解這個0x ...


Why need the UDS Service 0x10?

ECU在正常工作時會處於某一個會話模式下,上電後會自動進入預設會話模式,所以ECU啟動後我們不需要輸入0x10 01來進入該會話模式。ECU的不同會話模式間存在一定的狀態轉換關係規則(特定邏輯)。

初次接觸UDS的話,可能不太理解這個0x10服務的含義和用途,我們通過一個隱喻公司的大廳和兩個私密的會議室的例子來進行類比。

例如:我們將ECU之間的通訊類比成兩個員工之間的對話。兩個人在公司的大廳隨便暢所欲言,隨意討論非私密性的話題,這個場景類似預設會話,不會對安全性有要求,無需刻意尋找專門使用場所,即不需要專門會話控制進入此模式,上電即預設進入。

如果兩人想討論機密項目的話題,不想被其他不相關人員知道,於是換個環境,從公司大廳進入了單獨的會議室,這個過程可以類比成從預設會話進入了擴展會話,進入會議室後為了確認對方是本人沒被冒充,進行識別鑒權詢問口令“天王蓋地虎”,查看對方能不能答出“寶塔鎮河妖”,認證鑒權的這個附加過程就屬於跟0x10服務配合使用的安全訪問服務0x27,溝通結束退出會議室回到大廳區域,這個過程就是從擴展會話退出到預設會話的過程。

而從預設會話進入了編程會話,也是類似從公司大廳進入了單獨的會議室溝通,只是這個會議室的功能更高級一點比如可以寫入文件到ECU等,功能更高級相對應的鑒權也得有所區別,在編程會話這個會議室里,就換一個詢問口令“你知道今天下雨嗎?”,如果對方能答上“今天不下明天下”就認為身份合法。

0x10 types

0x10 會話模式的三種模式:

  • 10 01 預設模式(default session)

    • 在預設會話模式下,一般情況下不允許支持寫服務(Write Data By Identifier 0x2E),也不允許支持請求下載服務(Request Download 0x34)
  • 10 02 編程模式(Programming Session)

    • 在編程會話模式下,就可以支持(Request Download 0x34)
  • 10 03 擴展診斷模式(extended Diagnostic Session)

    • 在拓展診斷會話模式下,就允許支持寫服務(Write Data By Identifier 0x2E)

Conversion between session modes

不同會話模式間的切換存在一定的邏輯關係。下圖顯示的就是一個不同會話間轉換示例圖,需要註意的是不同OEM對於進入編程會話通常會有不同的設計要求,具體項目中會話間跳轉關係請依據OEM項目的規範文件為準。

  • 預設會話
    設備上電後自動進入預設會話模式,從圖中我們可以看出在預設會話模式下的切換關係。

    本模式重新進入:可以通過0x10 01再次進入預設會話,或通過0x11 01、0x11 03複位服務重啟進入預設會話。

    本模式進入其他模式:預設會話模式可以通過0x10 02進入編程會話模式,在有些項目中預設會話是不能直接進入編程會話模式,具體項目中是否能夠支持需要查閱項目產品的診斷技術規範;預設會話模式下還可以通過0x10 03進入擴展會話模式。

  • 編程會話
    啟動編程會話ECU會進入boot模式,進入boot模式後ECU可以進行固件的更新。boot的更新可以通過Jtag介面使用工具進行燒錄,相對來說Jtag介面的許可權等級比較高,可以通過工具直接修改存儲空間中對應地址的數據信息。

    實際項目會使用CAN網路來軟體刷寫,商用階段去除Jtag介面,這樣處理的話安全性會得到一定保障。同樣的在boot模式下可以刷寫固件,那很多診斷服務在boot下也可以正常執行,如配合刷寫的0x110x220x2E0x310x280x340x360x370x85等服務。

    本模式重新進入:處於編程會話模式下,可以通過0x10 02再次進入編程會話。

    本模式進入其他模式:編程會話狀態下可以通過0x10 01進入預設會話,或通過0x11 01服務複位ECU來進入預設會話;編程會話不能進入擴展會話模式。

  • 擴展會話

    某些服務需要擴展會話的支持才能執行,擴展會話下如果不配合使用0x3E服務(保持會話服務),ECU會在數秒後自動退出擴展會話模式進入到預設會話模式。

    本模式重新進入:處於擴展會話模式下,可以通過0x10 03再次進入擴展會話。

    本模式進入其他模式:在不使用0x3E服務保持會話時,可以通過超時自動退出到預設會話模式,可以通過0x10 01進入預設會話,或通過0x11 01、0x11 03服務複位ECU來進入預設會話;在某些項目中僅支持在0x10 03擴展模式下,才能進入0x10 02編程會話。

UDS 0x10 Message format

Request Message format

  • SID
    就是0x10
  • Sub-Function
    子服務就是上文講的01預設會話02編程會話03擴展會話
    當然規範中還存在00保留欄位、04安全系統診斷會話、05-3F保留、40-5F主機廠自定義欄位、60-7E零部件供應商自定義欄位等等(瞭解即可)。
  • parameter
    Parameter項是對應到最詳細子功能的屬性參數配置項,屬性參數的配置也是根據實際情況來進行配備。
    0x10服務沒有參數。

Response Message format

  • SID
    SID的值為請求報文中SID + 0x40 , 為0x50
  • Sub-Function和Parameter
    這兩部分的內容根據具體情況確定,在項目診斷規範中有明確規定。

Negative Response Code - NRC

負響應回覆報文的格式同樣可以分為3個部分:

  • 首先第一個位元組是0x7F,表明請求失敗;
  • 第二個位元組為請求的服務SID ;
  • 第三個位元組為失敗原因代碼NRC
    NRC代碼具體對應的失敗原因可以查閱NRC的表格來確定,在具體的項目中這部分內容可以查閱項目中的零部件網路診斷規範。
    註意:負響應NRC代碼表一般在項目中是通用的。

負響應報文格式示例:

7F 10 7E
// 7F表明該相應失敗
// 對應的失敗服務是10
// 失敗原因是7E,查閱NRC表知道7E的含義是“Sub-function not supported in active session”,提醒使用請求10 02子功能請求時不應該在當前會話模式下,當前的會話模式不支持10 02子功能請求使用。

UDS 0x10 and 0x27 Process

進入擴展模式編程模式通常是配合0x27服務一起使用的,所以把這兩個服務一起來進行介紹,是因為通常0x27服務使用的前提就是先進入0x10服務的擴展會話,
反過來講0x10服務很少單獨使用,一般都是跟0x27服務配合先完成安全驗證,然後其他服務才能在一定的會話模式和安全接入等級中正常使用。

主機廠和零部件廠商可以通過不同的UDS服務對ECU執行很多操作,這些操作有的會修改ECU配置,有的可以重啟設備,有的可以讀取信息等等。顯而易見的是,不同的操作所造成的後果嚴重程度是不一樣的,因此做敏感操作前需要通過安全認證就很有必要。

我們通常把預設狀態下的ECU叫做鎖定狀態(Locked),成功執行完成$27服務後的狀態叫做解鎖(Unlock),只有在解鎖狀態下才能進行數據寫入、修改等等操作。

上位機和ECU的大致交互流程如下:

//UDS or APP
10 03
50 03
27 01
67 xx xx xx xx
27 02 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx 
67 02
2E xx xx
//BOOT
10 02
50 02
27 11
67 xx xx xx xx
...
34 xx xx

Reference

鑒源丨車載ECU嵌入式設備的診斷測試 - 會話和安全控制
https://www.freebuf.com/articles/ics-articles/346353.html

CAN診斷輕鬆入門第二講-UDS服務講解
https://zhuanlan.zhihu.com/p/348308023

一個軟體開發者(安全方向)的公眾號。 Mysticbinary

Github:https://github.com/Mysticbinary
既然看到了這裡,君何不暢談一番?
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天在群里看到有小伙伴問,Java里如何解析SQL語句然後格式化SQL,是否有現成類庫可以使用? 之前TJ沒有做過這類需求,所以去研究了一下,並找到了一個不過的解決方案,今天推薦給大家,如果您正要做類似內容,那就拿來試試,如果暫時沒需求,就先瞭解收藏(技多不壓身)。 JSqlParser JSqlP ...
  • 本文已經收錄到Github倉庫,該倉庫包含電腦基礎、Java基礎、多線程、JVM、資料庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散式、微服務、設計模式、架構、校招社招分享等核心知識點,歡迎star~ Github地址:https://github.c ...
  • 自動化測試環境的搭建 :一、安裝 selenium: 安裝方式一: pip install -U selenium 安裝方式二: 手動安裝 selenium: 1、安裝python包,選擇全部組件(pip、安裝過程中配置環境變數)解壓selenium-4.8.2.tar.gz,然後用cmd進入解壓目 ...
  • 代碼覆蓋率(Code coverage)是指在軟體測試中測試用例執行時覆蓋的代碼量與總代碼量的比例。代碼覆蓋率是軟體測試中一個重要的指標,它對於保障軟體質量、提高軟體可靠性和可維護性具有許多好處:發現代碼缺陷、提高代碼的可維護性、確保代碼的正確性和優化測試用例質量等。 我們常用的 IDE,Visua ...
  • Github Actions 是 Github 提供的一種持續集成(CI)和持續部署(CD)工具,可以自動化代碼開發、測試、構建和部署的過程。它可以在代碼倉庫中通過配置文件來定義工作流程(Workflow),包括觸發事件、執行任務和處理結果等。這些工作流程可以與Github倉庫的其他功能(如Issu ...
  • 【開門見山】 實現目標: 需要讓歌詞列表隨著播放的時間更新而滾動,即實時的跟隨歌曲的進度而滾動 效果: ​編輯 需要事先準備的東西: 1.音頻(mp3格式): ​編輯 2.歌詞(詳細): ​編輯 先展示html和css的實現(不重要,自己想怎樣調都行,重點在js的邏輯實現) 1.html: 小tip ...
  • 序言 閑來無聊,前段時間發現一個.net開源框架:masa framework。經過一些小型項目使用,發現確實挺不錯的。然後我又去閱讀了整個masa framework源碼,特此來記錄整個源碼閱讀的過程。 如有錯誤之處還請指點 MASA Framework簡介 ​ Masa Framework是 m ...
  • 此文大多數來自這篇文章,但是修改了裡面一些錯誤的地方和優化了一些內容,以及增加了桌面安裝部分和其他一些常用軟體安裝(wayland下的輸入法/firefox等) https://zhuanlan.zhihu.com/p/112541071 正文開始: 安裝前的準備 在Windows還沒有被消滅之前, ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...