Canoe/Canalyzer中加载DLL文件“自动“解锁UDS诊断27服务

点击返回「《UDS/OBD诊断需求编辑工具》总目录」

目录

1 如何在CanOe / Canalyzer中加载“DLL动态链接库文件”

2 如何制作该“DLL动态链接库文件”

2.1 如何获取“DLL动态链接库文件”的DEMO

2.2 使用Visual Studio打开“DLL动态链接库文件”的DEMO

2.2.1 API接口参数说明

2.2.2 举例:27服务解锁算法

2.2.3 生成DLL文件

结尾


案例背景

在CanOe / Canalyzer中加载诊断描述文件(CDD,PDX,Arxml…)时,Diagnotic Console窗口中,您可以看到这个诊断描述文件对应variant变体所支持的Service服务列表。在其中我们选中一个Service服务的Subfuncton/DID/RID…,并双击,或者选中一个Service服务的Subfuncton/DID/RID…,并单击Execute,即可通过CanOe / Canalyzer向下位机发送该UDS diagnostic request诊断请求

在请求某些UDS服务(如2E服务写DID…)前,需要先进行27服务对应security level安全等级解锁,Diagnotic Console窗口可以手动输入Key密钥进行解锁,如果解锁算法非常复杂,使用起来会非常的不便。

幸运的是:CanOe / Canalyzer提供加载DLL动态链接库文件,该DLL文件中集成了27服务security level安全等级解锁算法,自动完成“通过Seed计算得到Key”整个过程。

1 如何在CanOe / Canalyzer中加载“DLL动态链接库文件”

在CanOe / Canalyzer中,完成加载诊断描述文件(CDD,PDX,Arxml…)后,菜单栏依次选择Diagnostics -- > Diagnostic/ISO TP,在弹出的Diagnostic/ISO TP Configuration对话框中,选择对应CAN通道诊断描述文件中的Diagnostic Layer,在子页中找到Seed & Key DLL,加载DLL文件的存放路径。

2 如何制作该“DLL动态链接库文件”

2.1 如何获取“DLL动态链接库文件”的DEMO

无论是CanOe还是Canalyzer,在其安装路径下都会有下图这样的文件夹KeyGenDll_GenerateKeyExKeyGenDll_GenerateKeyExOpt,这就是制作该DLL文件的DEMO。

Canoe 11的路径:

Vector CANoe 11.0\Sample Configurations 11.0.55\CAN\Diagnostics\UDSSystem\SecurityAccess\Sources

Canalzyer 12的路径:

Diagnostics\UDSSystem\SecurityAccess\Sources

2.2 使用Visual Studio打开“DLL动态链接库文件”的DEMO

下面以文件夹KeyGenDll_GenerateKeyEx为例。双击打开GenerateKeyExImpl.vcproj文件(须确保电脑已经安装Visual Studio)。

使用Visual Studio打开该工程后,在右侧的“解决方案资源管理器”中,依次选择GenerateKeyExImpl -- > Source Files -- > GenerateKeyExImpl.cpp,接着在左侧你会看到被打开的GenerateKeyExImpl.cpp文件,在其中你会看到一个API GenerateKeyEx接口,在该API接口中完成“27服务各security level安全等级解锁算法”即可。

2.2.1 API接口参数说明

iSeedArray:表示接收到的27服务奇数subfunction中的Seed种子字节值“数组”;

iSeedArraySize:表示接收到的27服务奇数subfunction中的Seed种子长度;

iSecurityLevel:表示接收到的27服务Security Level安全等级;

iVariant:表示CanOe / Canalyzer中加载的诊断描述文件“当前使用的变体”;

ioKeyArray:表示27服务偶数subfunction中发送的Key密钥字节值“数组”;

iKeyArraySize:表示27服务偶数subfunction中的发送的Key密钥长度;

oSize:表示输出Key密钥长度,通常让oSize=iSeedArraySize;。

Key密钥通常按照以下方案在Tester中计算:

1)通过diagnostic request诊断请求从控制单元获取Seed种子

2)根据步骤 1 收到的Seed种子 (iSeedArray) 计算Key密钥 (ioKeyArray)。

为此,必须指定要生成Key密钥的控制单元的variant变体 (iVariant) 和security level安全等级 (iSecurityLevel)。可在diagnostic configuration dialog中配置用于计算的独立于manufacturer-dependent的 SeedKey-DLL 名称。

示例:

下面的 API 显示了计算Key密钥的函数的可能实现示例。API 因 OEM 而异。其他 API 的使用示例可在UDS Diagnostic System Configuration中找到。

KEYGENALGO_API VKeyGenResultEx GenerateKeyEx(const unsigned char* iSeedArray, unsigned int iSeedArraySize, const unsigned int iSecurityLevel, const char* iVariant, unsigned char* ioKeyArray, unsigned int iKeyArraySize, unsigned int& oSize)

3)在相应的diagnostic request诊断请求中设置步骤 2 计算出的Key密钥并发送至控制单元。

2.2.2 举例:27服务解锁算法

假设:Seed的长度为4,Key的长度也是4。Key = Seed + 123456。我们可以这样改写该API GenerateKeyEx接口。

KEYGENALGO_API VKeyGenResultEx GenerateKeyEx(
      const unsigned char*  iSeedArray,     /* Array for the seed [in] */
      unsigned int          iSeedArraySize, /* Length of the array for the seed [in] */
      const unsigned int    iSecurityLevel, /* Security level [in] */
      const char*           iVariant,       /* Name of the active variant [in] */
      unsigned char*        ioKeyArray,     /* Array for the key [in, out] */
      unsigned int          iKeyArraySize,  /* Maximum length of the array for the key [in] */
      unsigned int&         oSize           /* Length of the key [out] */
      )
{
    if (iSeedArraySize>iKeyArraySize)
      return KGRE_BufferToSmall;
    // for (unsigned int i=0;i<iSeedArraySize;i++)
    //  ioKeyArray[i]=~iSeedArray[i];
    unsigned int seed = 0;
    unsigned int key = 0;

    seed = ((iSeedArray[0] << 24) & 0xFF000000);
    seed |= ((iSeedArray[1] << 16) & 0x00FF0000);
    seed |= ((iSeedArray[2] << 8) & 0x0000FF00);
    seed |= ((iSeedArray[3] << 0) & 0x000000FF);

    key = seed + 123456;

    ioKeyArray[0] = ((key >> 24) & 0x000000FF);
    ioKeyArray[1] = ((key >> 16) & 0x000000FF);
    ioKeyArray[2] = ((key >> 8) & 0x000000FF);
    ioKeyArray[3] = ((key >> 0) & 0x000000FF);

    oSize = iSeedArraySize;
    
  return KGRE_Ok;
}

2.2.3 生成DLL文件

GenerateKeyExImpl.cpp文件编辑完成后,在右侧的“解决方案资源管理器”选中GenerateKeyExImpl,并鼠标右键,在其上下文中,单击生成。

在DEMO工程的路径下的Debug文件夹中,你会看到生成的SeednKey.dll文件。

将该SeednKey.dll文件加载到CanOe / Canalyzer中。

结尾

获取更多“汽车电子资讯”和“工具链使用”

请关注CSDN博客“汽车电子助手”,做您的好助手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/612796.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TalkingGaussian:基于高斯溅射的结构保持3D说话人头合成

TalkingGaussian: Structure-Persistent 3D Talking Head Synthesis via Gaussian Splatting TalkingGaussian&#xff1a;基于高斯溅射的结构保持3D说话人头合成 Jiahe Abstract 摘要 TalkingGaussian: Structure-Persistent 3D Talking Head Synthes…

Python专题:十二、再谈函数

Python的函数 print&#xff08;&#xff09;函数 def函数名&#xff08;*参数&#xff09; 一次传入多个参数&#xff0c;并保存在元组中 参数混用&#xff0c;普通的参数最好放在不限个数的特殊参数之前 def函数名&#xff08;**参数&#xff09;一次传入多个参数&#x…

【话题】你用过最好用的AI工具有那些

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景一、C知道二、CSDN工具集三、AI工具的普及与受欢迎程度四、AI工具的实际应用与影响五、总结与展望文章推荐 背景 探讨人们在使用AI工具时&#xff0c;最喜欢的和认…

【Linux】什么是进程?

一个正在执行的程序&#xff0c;我们称之为进程。 然后我们来顺着一条线来思考。 操作系统底层是用C语言编写的&#xff0c;而我们的进程&#xff0c;它会有各种属性&#xff0c;那么各种属性就可以用一个结构体来对进程的各个属性进行描述&#xff0c;然后这个结构体里面&…

无人机+三角翼:小摩托无人机技术详解

无人机与三角翼的结合&#xff0c;为航空领域带来了一种新型且独特的飞行器——“小摩托”无人机。这种无人机结合了无人机的灵活性和三角翼的飞行稳定性&#xff0c;成为了航空运动领域中的一款热门产品。以下是对“小摩托”无人机技术的详解&#xff1a; 1. 定义与特点&#…

深入理解线程的两阶段终止模式:确保线程安全退出

序言 在多线程编程中&#xff0c;线程的安全退出是一个重要的问题。在实际应用中&#xff0c;我们经常需要确保线程在退出时能够完成必要的清理工作&#xff0c;同时避免因资源泄漏或状态不一致而导致的问题。线程的两阶段终止模式是一种解决这个问题的有效方法。本文将深入探…

【全开源】JAVA台球助教台球教练多端系统源码支持微信小程序+微信公众号+H5+APP

功能介绍 球厅端&#xff1a;球厅认证、教练人数、教练的位置记录、助教申请、我的项目、签到记录、我的钱包、数据统计 教练端&#xff1a;我的页面&#xff0c;数据统计、订单详情、保证金、实名认证、服务管理、紧急求助、签到功能 用户端&#xff1a;精准分类、我的助教…

语义分割——脑肿瘤图像分割数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

二级等保与三级等保的区别有哪些

二级等保和三级等保的区别主要体现在保护能力、安全要求、监管严格程度等方面。以下是根据提供的搜索结果中关于二级和三级等保的具体差异&#xff1a; 1. 保护能力&#xff1a; 二级等保要求信息系统能够防护来自外部小型组织的威胁&#xff0c;发现重要的安全漏洞和事件&…

【全开源】酷柚易汛ERP 源码部署/售后更新/上线维护

一款基于FastAdminThinkPHPLayui开发的ERP管理系统&#xff0c;帮助中小企业实现ERP管理规范化&#xff0c;此系统能为你解决五大方面的经营问题&#xff1a;1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机电…

python中的数据可视化:二维直方图 hist2d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化&#xff1a; 二维直方图 hist2d() 选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np x np.random.normal(0, 1, …

最强特征点检测算法 DeDoDe v1/v2

论文地址v1:https://arxiv.org/pdf/2308.08479 论文地址v1:https://arxiv.org/pdf/2404.08928 代码地址:GitHub - Parskatt/DeDoDe: [3DV 2024 Oral] DeDoDe 🎶 Detect, Dont Describe --- Describe, Dont Detect, for Local Feature Matching 实测确实牛X! DeDoDeV1 关…

0基础学PHP有多难?

php作为web端最佳的开发语言&#xff0c;没有华而不实&#xff0c;而是经受住了时间考验&#xff0c;是一门非常值得学习的编程语言。 目前市场上各种网站、管理系统、小程序、APP等&#xff0c;基本都是使用PHP开发的&#xff0c;也侧面反映了PHP的需求以及学习的必要性&…

11个免费的 android数据恢复应用程序功能分析

在手机上丢失数据是一个很大的错误。但是&#xff0c;在这种情况下&#xff0c;除了惊慌失措之外&#xff0c;最好开始使用android数据恢复应用程序搜索以查找将其取回的方法。您可以检查手机的备份存储以在Android上进行数据恢复&#xff0c;但是如果数据仍然无处可寻&#xf…

四川医疗废水处理一体化设备如何选型

医疗废水处理一体化设备的选型是一个综合考量的过程&#xff0c;需要根据医疗废水的特性、处理要求、场地条件、预算等因素来确定。以下是选型时需要考虑的关键点&#xff1a; 废水特性分析&#xff1a;医疗废水通常含有病原体、药物残留、重金属、有机物、放射性物质等污染物。…

【Unity 键盘输入检测】

【Unity 键盘输入检测】 1. Input.GetKeyDown(KeyCode key) 这个方法在玩家按下指定键的那一帧返回true。它适用于触发一次性事件&#xff0c;如跳跃、射击或开始菜单。 void Update() {if (Input.GetKeyDown(KeyCode.Space)){// 玩家按下了空格键&#xff0c;执行跳跃动作} …

jetson tx2 nx实现在ros1中yolov5实现

亲测用以下链接实现功能。 安装ros。Ubuntu18.04安装ROS Melodic&#xff08;详细&#xff0c;亲测安装完成&#xff0c;有清晰的截图步骤&#xff09;_ubuntu 18 ros melodic-CSDN博客文章浏览阅读10w次&#xff0c;点赞835次&#xff0c;收藏3.8k次。这也是我在ubuntu里面安…

完整版解答!2024年数维杯数学建模挑战赛B题

B题 生物质和煤共热解问题的研究 技术文档第一问1.1问题一分析1.2数据预处理1.3问题一Spearman相关性分析 数据代码资料获取 技术文档 第一问 1.1问题一分析 对于问题一&#xff0c;题目要求分析出正己烷不溶物对焦油产率、水产率、焦渣产率这三个指标是否有显著影响&#x…

flutter开发实战-log日志存储zip上传,发送钉钉机器人消息

flutter开发实战-log日志存储zip上传&#xff0c;发送钉钉机器人消息 当我们需要Apk上传的时候&#xff0c;我们需要将日志打包并上传到七牛&#xff0c;上传之后通过钉钉通知我们日志下载地址。 这里我使用的是loggy来处理日志 一、引入loggy日志格式插件 在工程的pubspec.…

Sqli-labs第五~八关(布尔盲注)

目录 首先找到他们的闭合方式 操作 总结&#xff1a; 第五关根据页面结果得知是字符型但是和前面四关还是不一样是因为页面虽然有东西。但是只有对于请求对错出现不一样页面其余的就没有了。这个时候我们用联合注入就没有用&#xff0c;因为联合注入是需要页面有回显位。如果…