本系列的上一篇文章中,我们介绍了如何在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文件的定制化服务!!!