当前位置: 首页 > article >正文

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑤】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase05

作者:车端域控测试工程师
更新日期:2025年02月17日
关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023

TC11-005测试用例

用例ID测试场景验证要点参考条款预期结果
TC11-005未授权访问复位服务安全锁定时发送复位请求§7.3.4返回NRC=0x33(安全访问拒绝)

以下是对TC11-005测试用例的通俗化解释,采用生活场景类比和结构化说明:

通俗版测试流程说明
(就像手机输错密码被锁)

输错3次密码
手机锁定10分钟
锁定期无法登录

一、测试目的
验证当ECU的"安全锁"开启时(就像手机输错密码被锁),如果有人强行发送"重启设备"指令,系统会拒绝并提示"需要解锁"(对应错误码0x33)


二、通俗版测试步骤分解

阶段1:故意"输错密码"触发锁定

  1. 索要密码本

    • 发送请求:“请给我密码本”(0x27服务)
    • ECU回应:给出4位随机数密码本(如:12 34 56 78)
  2. 连续输错3次

    • 第1次错:回复"密码错误"(0x35错误码)
    • 第2次错:再报错
    • 第3次错:系统警告"错误次数过多"(0x36错误码)
  3. 启动10分钟锁定期

    • 类似手机输错密码后显示"请10分钟后再试"

阶段2:尝试"非法重启"验证锁定

  1. 发送重启指令

    • 请求:“立刻重启设备”(0x11服务)
  2. 检查系统反应

    • 预期回应:“拒绝操作,需要先解锁”(0x33错误码)

三、关键技术点生活化解释

技术术语生活比喻测试关注点
安全访问服务手机密码验证错误次数统计是否准确
安全锁定状态手机禁用功能锁定期是否禁止关键操作
NRC 0x33"请先解锁"提示错误提示是否正确
种子值动态验证码每次请求是否生成新密码本

四、为什么这样设计?

  1. 防暴力破解

    • 就像ATM机吞卡机制,防止无限次尝试密码
  2. 关键操作保护

    • 锁定期间禁止敏感操作(如刷机、重置)
  3. 错误追溯

    • 系统会记录异常访问日志(类似手机的安全日志)

五、实际应用场景
当你的爱车在4S店维修时:

  1. 技师用诊断仪连接车载电脑
  2. 若未通过厂家授权验证
  3. 尝试执行复位ECU等敏感操作时
  4. 系统会拒绝并提示需要安全认证

六、测试结果判断标准

  1. 合格标准

    • 3次错误尝试后必定锁定
    • 锁定期内100%拒绝重启
    • 提示明确的安全错误码
  2. 危险情况

    • 未锁定状态下允许任意重启 → 安全漏洞
    • 锁定后仍可执行操作 → 严重缺陷

七、扩展联想测试
可类比测试其他"锁定状态"下的禁止操作:

  1. 禁止软件更新
  2. 禁止删除故障码
  3. 禁止修改配置参数

通过这种"锁定-验证"机制,确保车辆在未授权状态下不会被非法操控,就像你的手机在锁定状态下无法被他人使用一样。

以下是为TC11-005设计的工业级CAPL测试用例,包含完整的安全锁定触发流程:

/*----------------------------------------------------------Title:TC11-005 安全锁定时复位服务验证 作者:车端域控测试工程师 日期:2025-02-17 
------------------------------------------------------------*/variables {// 通信参数 const long ReqID = 0x732;        // 诊断请求标识符 const long ResID = 0x733;        // 诊断响应标识符 const byte SecurityLevel = 0x01; // 安全等级1(根据OEM规范)// 安全参数 const int MaxAttempts = 3;       // 最大错误尝试次数 const dword LockTime = 600000;   // 锁定时间10分钟(单位:ms)byte seed[4];                    // 安全种子存储 msTimer lockTimer;               // 锁定状态计时器 
}testcase TC11_005_SecurityLockTest() 
{TestModuleTitle("TC11-005 安全锁定状态服务拒绝验证");// ███ 阶段1:触发安全锁定 ███ testStep("STEP1 触发安全锁定机制");// ▶ 1.1 请求安全种子 DiagRequestSeed:message ReqID [CAN] {dlc = 2;byte(0) = 0x27;             // 安全访问服务 byte(1) = SecurityLevel | 0x01; // 种子请求子功能 }output(this);// ▶ 1.2 接收种子 if(TestWaitForMessage(ResID, 200) && this.byte(0) == 0x67) {seed[0] = this.byte(2);       // 提取种子值 seed[1] = this.byte(3);seed[2] = this.byte(4);seed[3] = this.byte(5);testStepPass("收到安全种子: %02X%02X%02X%02X", seed[0], seed[1], seed[2], seed[3]);} else {testStepFail("种子请求失败");return;}// ▶ 1.3 发送错误密钥(模拟攻击)for(int i=1; i<=MaxAttempts+1; i++) {testStep("错误密钥尝试 %d/%d", i, MaxAttempts);// 生成错误密钥(示例算法)byte invalidKey[4];invalidKey[0] = ~seed[0] + i;  // 实际需用OEM算法 invalidKey[1] = seed[1] ^ 0x55;invalidKey[2] = seed[2] | 0xAA;invalidKey[3] = seed[3] - 0x10;// 发送密钥 message ReqID [CAN] {dlc = 6;byte(0) = 0x27;byte(1) = SecurityLevel | 0x02; // 密钥发送子功能 byte(2) = invalidKey[0];byte(3) = invalidKey[1];byte(4) = invalidKey[2];byte(5) = invalidKey[3];}output(this);// 响应处理 if(TestWaitForMessage(ResID, 200)) {if(this.byte(0) == 0x7F) {switch(this.byte(2)) {case 0x35:  // 无效密钥 testAddLog("尝试%d返回NRC=0x35", i);break;case 0x36:  // 超过尝试次数 testStepPass("安全锁定已触发");setTimer(lockTimer, LockTime); // 启动锁定计时 break;}}}}// ███ 阶段2:验证服务拒绝 ███ testStep("STEP2 验证复位服务拒绝");// ▶ 2.1 发送复位请求 message ReqID [CAN] {dlc = 2;byte(0) = 0x11;  // ECU复位服务 byte(1) = 0x01;  // 硬件复位子功能 }output(this);// ▶ 2.2 响应验证 if(TestWaitForMessage(ResID, 300)) {if(this.byte(0) == 0x7F && this.byte(1) == 0x11 && this.byte(2) == 0x33) {testStepPass("成功收到NRC=0x33");testCasePass("测试通过");} else {testStepFail("收到异常响应: %02X %02X %02X", this.byte(0), this.byte(1), this.byte(2));}} else {testStepFail("响应超时");}
}/*----------------------------------------------------------安全状态监控模块(示例)
----------------------------------------------------------*/
on sysvar Security::LockStatus {if(@this::LockStatus == 1) {testAddLog("安全锁定激活,剩余时间:%.1f分钟", (LockTime - getTimer(lockTimer))/60000.0);}
}

流程图解(新手友好版)

开始
请求安全种子
收到种子?
循环发送错误密钥
测试失败
达到最大尝试次数?
触发安全锁定
发送复位请求
收到NRC=0x33?
测试通过
测试失败

关键参数说明表

参数名称示例值实际应用要点
SecurityLevel0x01需与OEM定义的访问层级一致
MaxAttempts3根据ISO 14229-1建议值设置
LockTime600000 ms典型值为5-30分钟(OEM指定)
错误密钥算法位运算组合实际需使用OEM的正向算法生成错误值
响应超时300 ms需大于ECU响应时间2倍以上

执行结果判定矩阵

检查项通过标准失败处理措施
安全种子请求100%成功获取4字节种子检查物理层通信
错误密钥响应前3次返回NRC=0x35验证安全计数器逻辑
第4次尝试响应必须返回NRC=0x36检查锁定触发条件
锁定期间复位请求100%返回NRC=0x33检查安全状态机
锁定时间精度误差≤±5%校准ECU内部计时器

工程实践建议

  1. 密钥算法集成
    实际项目中使用CAPL DLL调用OEM提供的加密算法:

    #pragma library("SecurityAlgorithm.dll")
    void GenerateKey(byte seed[], byte key[]);
    
  2. 多场景验证

    // 可扩展测试场景:
    // 1. 不同安全等级的锁定 
    // 2. 锁定期间其他服务访问 
    // 3. 锁定超时自动恢复 
    
  3. 诊断监控配置
    在CANoe Diagnostic Console中设置:

    [Security]
    AccessTiming = Fast 
    DelayBetweenAttempts = 2000ms 
    
  4. 自动化集成
    使用Test Module将用例集成到自动化序列:

    testcase ExecuteAllSecurityTests() {TC11_005_SecurityLockTest();TC11_006_KeyRecoveryTest();// 更多安全测试用例...
    }
    

提示:在Write窗口添加过滤器快速定位关键报文:
id==733h && (byte(0)==7Fh || byte(0)==67h)

相关文章:

【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑤】

ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase05 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月17日 关键词&#xff1a;UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-005测试用例 用例ID测试场景验证要点参考条款预期结果TC…...

137,【4】 buuctf web [SCTF2019]Flag Shop

进入靶场 都点击看看 发现点击work会增加&#xffe5; 但肯定不能一直点下去 抓包看看 这看起来是一个 JWT&#xff08;JSON Web Token&#xff09;字符串。JWT 通常由三部分组成&#xff0c;通过点&#xff08;.&#xff09;分隔&#xff0c;分别是头部&#xff08;Header&…...

Node.js 异步并发控制:`p-map` 和 `p-limit` 的使用与对比

在 Node.js 中&#xff0c;处理异步任务是开发中非常常见的需求。无论是批量处理数据、调用外部 API&#xff0c;还是操作文件系统&#xff0c;我们经常需要对多个异步任务进行管理。然而&#xff0c;当任务数量较多时&#xff0c;如果不加以控制&#xff0c;并发可能会导致性能…...

【c++】c++内存管理

目录 c和c的内存分布回顾C语言动态管理内存的方式malloccallocreallocfree C动态管理内存的方式new和deleteoperator new和operator delete定位new c和c的内存分布 回顾C语言动态管理内存的方式 malloc void* malloc (size_t size);malloc可以在堆上开辟指定内存的空间&#…...

EtherNet/IP转Modbus TCP:新能源风电监控与分析实用案例

EtherNet/IP转Modbus TCP&#xff1a;新能源风电监控与分析实用案例 一、案例背景 在某新能源汽车电池生产线上&#xff0c;需要将采用EtherNet/IP协议的电池检测设备与采用ProfiNet协议的生产线控制系统进行集成&#xff0c;以实现对电池生产过程的全面监控和数据采集。 二、…...

伪装目标检测(Camouflaged Object Detection, COD)教程

1. 引言 伪装目标检测&#xff08;Camouflaged Object Detection, COD&#xff09;是一项计算机视觉任务&#xff0c;旨在识别和分割背景中难以察觉的目标&#xff0c;如动物伪装、隐形物体检测等。由于伪装目标通常与背景高度相似&#xff0c;这项任务比传统的目标检测更具挑…...

烧烤炉出口亚马逊欧盟站CE认证EN1860安全标准

什么是欧盟CE认证&#xff1a; 在欧盟市场“CE”标志属强制性认证标志&#xff0c;不论是欧盟内部企业生产的产品&#xff0c;还是其他国家生产的产品&#xff0c;要想在欧盟市场上自由流通&#xff0c;就必须加贴“CE”标志&#xff0c;以表明产品符合欧盟《技术协调与标准化新…...

动态DNS神器nip.io使用指南:快速实现域名与IP的动态映射--告别配置本地hosts

动态DNS神器nip.io使用指南&#xff1a;快速实现域名与IP的动态映射--告别配置本地hosts 一、项目简介二、快速入门三、进阶配置四、典型应用场景 本文基于开源项目 v1.2.1版本撰写&#xff0c;适用于开发测试、CI/CD等场景 一、项目简介 nip.io 是由Exentrique Solutions开发…...

人工智能 - 机器学习、深度学习、强化学习是人工智能领域的理论基础和方法论

机器学习、深度学习、强化学习是人工智能领域的三大核心方向,各自具有独特的理论基础和方法论。以下是它们的核心理论知识总结: 一、机器学习(Machine Learning, ML) 1. 基础概念 目标:通过数据驱动的方式,让机器从经验中学习规律,完成预测、分类或决策任务。 核心范式…...

数字电路-基础逻辑门实验

基础逻辑门是数字电路设计的核心元件&#xff0c;它们执行的是基本的逻辑运算。通过这些基本运算&#xff0c;可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门&#xff08;AND&#xff09;、或门&#xff08;OR&#xff09;、非门&#xff08;NOT&#xff09;、异或门…...

国产编辑器EverEdit - 如虎添翼的功能:快速选择

1 快速选择 1.1 应用场景 快速选择适用于批量选择和修改的场景&#xff0c;比如&#xff1a;变量改名。 1.2 使用方法 1.2.1 逐项快速选择 将光标放置在单词前或单词中&#xff0c;选择主菜单查找 -> 快速选择 -> 快速选择或使用快捷键Ctrl D 注&#xff1a;光标放…...

国内外网络安全政策动态(2025年1月)

▶︎ 1.国家互联网信息办公室发布《个人信息出境个人信息保护认证办法&#xff08;征求意见稿&#xff09;》 1月3日&#xff0c;国家互联网信息办公室发布《个人信息出境个人信息保护认证办法&#xff08;征求意见稿&#xff09;》。根据《意见稿》&#xff0c;个人信息出境个…...

68页PDF | 数据安全总体解决方案:从数据管理方法论到落地实践的全方位指南(附下载)

一、前言 这份报告旨在应对数字化转型过程中数据安全面临的挑战&#xff0c;并提供全面的管理与技术体系建设框架。报告首先分析了数字化社会的发展背景&#xff0c;强调了数据安全在国家安全层面的重要性&#xff0c;并指出数据安全风险的来源和防护措施。接着&#xff0c;报…...

AI大模型的文本流如何持续吐到前端,实时通信的技术 SSE(Server-Sent Events) 认知

写在前面 没接触过 SSE&#xff08;Server-Sent Events&#xff09;&#xff0c;AI大模型出来之后&#xff0c;一直以为文本流是用 WebSocket 做的偶然看到返回到报文格式是 text/event-stream,所以简单认知&#xff0c;整理笔记博文内容涉及 SSE 认知&#xff0c;以及对应的 D…...

Electron:使用electron-react-boilerplate创建一个react + electron的项目

使用 electron-react-boilerplate git clone --depth 1 --branch main https://github.com/electron-react-boilerplate/electron-react-boilerplate.git your-project-name cd your-project-name npm install npm start 安装不成功 在根目录加上 .npmrc文件 内容为 electron_…...

Spring Boot三:Springboot自动装配原理

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 原理初探 pom.xml 核心依赖在父工程中 spring-boot-dependencies所有的jar包都在这里管理 我们在写或者引入一些依赖的时候&#xff0c;不需要指定版本 启动器 <…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十八节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析&#xff08;ResponseOnEvent_0x86服务&#xff09; 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月14日 关键词&#xff1a;UDS协议、0x86服务、事件响应、ISO 14229-1:2023、ECU测试 一、服务功能概述 0x86…...

Qt 中使用 SQLite 数据库的完整指南

SQLite 是一款轻量级、嵌入式的关系型数据库&#xff0c;无需独立的服务器进程&#xff0c;数据以文件形式存储&#xff0c;非常适合桌面和移动端应用的本地数据管理。Qt 通过 Qt SQL 模块提供了对 SQLite 的原生支持&#xff0c;开发者可以轻松实现数据库的增删改查、事务处理…...

2024 年 CSDN 博客之星年度评选:技术创作与影响力的碰撞(统计时间2025-02-17 11:06:06)

摘要&#xff1a;在技术的海洋里&#xff0c;每一位博主都像是一座独特的灯塔&#xff0c;用自己创作的光芒照亮他人前行的道路。2024 年 CSDN 博客之星年度评选活动&#xff0c;正是对这些灯塔的一次盛大检阅&#xff0c;让我们看到了众多优秀博主在技术创作领域的卓越表现以及…...

Java零基础入门笔记:(3)程序控制

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili Scanner对象 之前我们学的基本语法中我们并没有实现程序和人的交互&#xff0c;但是Java给我们提供了这样一个工具类&…...

后端生成二维码,前端请求接口生成二维码并展示,且多个参数后边的参数没有正常传输问题处理

一、后端代码 1、controller GetMapping("/generateQRCode/{url}")ApiOperation(value "生成url链接二维码",notes "生成url链接二维码")public JsonResult<NewsQRCodeVo> generateQRCode(PathVariable String url,HttpServletRespons…...

(8/100)每日小游戏平台系列

项目地址位于&#xff1a;小游戏导航 新增一个打地鼠游戏&#xff01; 打地鼠&#xff08;Whack-a-Mole&#xff09;是一款经典的休闲游戏&#xff0c;玩家需要点击随机出现的地鼠&#xff0c;以获取分数。游戏时间有限&#xff0c;玩家需要在规定时间内尽可能多地击中地鼠&am…...

【jar包启动命令简单分享】

最近在做springcloud项目&#xff0c;整理了下启停脚本 批量启动脚本 #!/bin/bashAPP_HOME/data/java/ APP_NAMES("ruoyi-auth.jar""ruoyi-gateway.jar""ruoyi-modules-file.jar""ruoyi-modules-gen.jar""ruoyi-modules-job.jar…...

[Python人工智能] 五十.PyTorch入门 (5)快速搭建神经网络及模型保存

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解PyTorch构建分类神经网络。这篇文章将介绍如何利用PyTorch快速构建神经网络,之前的代码比较复杂,通过自定义Net类实现,本文通过Torch函数定义神经网络。前面我们的Python人工智能主要以Tens…...

SpringBoot+Vue+数据可视化的动漫妆造服务平台(程序+论文+讲解+安装+调试+售后等)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今数字化高速发展的时代&#xff0c;动漫产业迎来了前所未有的繁荣&#xff0c;动漫…...

Go入门之语言变量 常量介绍

func main(){var a int8 10var b int 5var c int 6fmt.Println("a", a, "b", b, "c", c)d : 10fmt.Printf("a%v leixing%T\n", d, d) } main函数是入口函数,fmt包有三个打印的函数Println&#xff0c;Print&#xff0c;Printf。第…...

基于web的留守儿童网站的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

鸡兔同笼问题

鸡兔同笼问题是这样一个问题&#xff1a; 现有鸡、兔合装在一个笼子里。数头一共100个头&#xff0c;数脚一共300只脚。问有多少只鸡多少只兔&#xff1f; 在这里讨论这个问题的解法当然太小儿科了。但是y_tab这个C语言解释器只提供了1维数组。如果需要用到2维数组时&#xff…...

使用 Spring Boot 和 Canal 实现 MySQL 数据库同步

文章目录 前言一、背景二、Canal 简介三、主库数据库配置1.主库配置2.创建 Canal 用户并授予权限 四.配置 Canal Server1.Canal Server 配置文件2.启动 Canal Server 五.开发 Spring Boot 客户端1. 引入依赖2. 配置 Canal 客户端3. 实现数据同步逻辑 六.启动并测试七.注意事项八…...

中上211硕对嵌入式AI感兴趣,如何有效规划学习路径?

今天给大家分享的是一位粉丝的提问&#xff0c;中上211硕对嵌入式AI感兴趣&#xff0c;如何有效规划学习路径&#xff1f; 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问&#xff1a; 中上211&#xff0c;…...