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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...