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

CANdela/Diva系列8--如何生成0x27服务解锁的DLL

本系列的上一篇文章中,我们介绍了如何在CDD文件中去根据客户需求来配置诊断服务,其实每个诊断服务的配置方式都是大同小异,但是0x27服务略有不同,为了能够让CDD文件根据ECU返回的种子去自动计算出密钥,需要添加一个解锁相关的DLL文件,这篇文章就给大家介绍一下解锁的DLL是怎么生成的,Let's Go!!!

目录

1. 获取Security算法编辑工程:

2. 编辑算法:

2.1 更新解锁函数:

2.2 编译DLL:

后言:


1. 获取Security算法编辑工程:

如果你安装了CANDiva的安装包,那么你可以通过如下的路径来获取:"C:\Users\Public\Documents\Vector\CANoe.DiVa\15.0\SeedKey"

如果你没有安装过CANDiva,也可以通过如下的路径来获取:"C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 11.0.81\CAN\Diagnostics\UDSSystem\SecurityAccess\Sources"

然后将上述的文件夹copy出来,放到你的工作目录,然后再用Visual Studio来打开这个工程。

注意:KeyGenDll_GenerateKeyEx 和 KeyGenDll_GenerateKeyExOpt 两个工程都可以用来制作dll文件,分别提供 GenerateKeyEx 和 GenerateKeyExOpt 接口。其中 GenerateKeyExOpt 多一个传入参数,普通应用并不需要。

2. 编辑算法:

打开工程后如下所示:

2.1 更新解锁函数:

我们需要做的只是根据解锁算法的文档来更新解锁函数,如下例所示:

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] */
      )
{
    unsigned long key32 = 0x0;
    key32 = ((iSeedArray[0] * 0x1000000) | (iSeedArray[1] * 0x10000) | (iSeedArray[2] * 0x100) | iSeedArray[3]);
    key32 = ~key32 + 0x47414549;
    ioKeyArray[0] = (key32 & 0xFF000000) >> 24;
    ioKeyArray[1] = (key32 & 0x00FF0000) >> 16;
    ioKeyArray[2] = (key32 & 0x0000FF00) >> 8;
    ioKeyArray[3] = key32 & 0x000000FF;
    iKeyArraySize = 4;
    oSize = 4;

    return KGRE_Ok;
}

上述代码中的定义变量含义如下所示:

  • iSeedArray: ECU返回的种子数组
  • iSeedArraySize:ECU返回的种子数组最大长度
  • iSecurityLevel:要解锁的级别(01、03、05、11等)
  • iVariant:ECU变体限定符
  • ioKeyArray:Tester返回计算出的密钥
  • iKeyArraySize:Tester返回计算出的密钥最大长度
  • oSize:计算出密钥的字节数(这个密钥的字节数一定要与实际需求的密钥的字节数长度保持一致,不然解锁自动发送出去的密钥会根据oSize的值来发送密钥长度

2.2 编译DLL:

编辑完解锁函数后,我们要开始编译DLL了:

首先在配置中选择“Debug”,"x86", 然后在右侧的工程名出右击,选择“Build”,最后在Output窗口检测编译结果:

“1 succeeded”表示编译成功,最后我们可以在工程目录下的“Debug”文件夹中找到生成的DLL文件了:

这样我们就有解锁算法的DLL可以使用了。

通过前面的介绍和本篇文章的介绍,我们的CDD文件就准备完毕了,接下来就要开始在CANoe工程中添加CDD文件,开始应用CDD了。敬请期待!!!

后言:

本人有CANdelaStudio Admin的license,最高支持CANdela V15的版本,支持CDD文件的定制化服务!!!


http://www.kler.cn/a/316786.html

相关文章:

  • 应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片
  • Bugku CTF_Web——文件上传
  • Springboot集成syslog+logstash收集日志到ES
  • 【网络工程】计算机硬件概述
  • OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示
  • 7天用Go从零实现分布式缓存GeeCache(学习)(3)
  • MySQL 数据库课程设计详解与操作示例
  • Java : 图书管理系统
  • ArcGIS Pro SDK (十四)地图探索 6 图形与工具
  • AIGC7: 高通骁龙AIPC开发者沙龙过程记录A
  • 力扣刷题之2398.预算内的最多机器人数目
  • Shelly实测天工的音乐创作功能,写了一首歌,来听听效果
  • 学习笔记JVM篇(四)
  • python教程修订版
  • Redis 集群策略详解
  • oracle查询历史操作记录
  • 行为型设计模式的全面解析
  • 中小企业体系技术抽象沉淀-异地灾备篇
  • Android中如何调用DLL文件
  • 通信工程学习:什么是VM虚拟机
  • 在交互式系统中,非剥夺是不是一个好的策略?为什么?
  • kettle从入门到精通 第八十六课 ETL之kettle kettle调用https接口忽略SSL校验
  • 设计原则模式概览
  • Java项目实战II基于Java+Spring Boot+MySQL的房屋租赁管理系统的设计与实现
  • 编写webpack插件自动上传sourceMap
  • MySQL高阶1831-每天的最大交易