在UDS诊断过程中,会涉及到安全访问的问题,也就是常说的Seed&Key。TSMaster中提供了两种Seed&Key的处理方法:第一种是直接加载DLL文件;第二种是直接在TSMaster的编译器中直接添加安全算法。
一、加载外部Seed&KeyDLL
TSMaster诊断模块支持通过dll载入Seed&Key算法,该算法dll跟主流工具的计算接口兼容,接口定义如下图所示:
【1】加载DLL
【2】删除DLL
【3】DLL校验器,通过此按钮,用户可以判断自己加载的dll接口是否正确,算法是否符合设计要求。如下图所示:
如上图所示界面,用户选择Seed的Level过后,输入DemoSeed值,点击GenKey进行判断。如果该DLL接口跟模板定义接口统一,则会输出提示信息:GenerateKeySuccess,然后用户根据Key值跟目标值对比,进一步确认DLL中的算法是否符合设计要求。
【4】打开TSMaster安装目录下Seed&Key接口工程所在的路径。用户可以拷贝该工程添加自己的Seed&Key算法。
“
默认SeedKey函数接口
目前,要想被TSMaster的诊断模块直接加载,该DLL必须实现如下三种函数接口中的一种:
【1】接口1:
unsignedintGenerateKeyEx(
constunsignedchar*ipSeedArray,/*Arrayfortheseed[in]*/
unsignedintiSeedArraySize,/*Lengthofthearrayfortheseed[in]*/
constunsignedintiSecurityLevel,/*Securitylevel[in]*/
constchar*ipVariant,/*Nameoftheactivevariant[in]*/
unsignedchar*iopKeyArray,/*Arrayforthekey[in,out]*/
unsignedintiMaxKeyArraySize,/*Maximumlengthofthearrayforthekey[in]*/
unsignedint&oActualKeyArraySize);/*Lengthofthekey[out]*/
【2】接口2:
unsignedintGenerateKeyExOpt(
constchar*iPara,/**/
unsignedint&oActualKeyArraySize)/*Lengthofthekey[out]*/
【3】接口3:
boolASAP1A_CCP_ComputeKeyFromSeed(
unsignedshortiSeedArraySize,/*Lengthofthearrayfortheseed[in]*/
unsignedshortiMaxKeyArraySize,/*Maximumlengthofthearrayforthekey[in]*/
unsignedshort*opSizeKey)/*Lengthofthekey[out]*/
用户的DLL只要实现了上述任意一种函数接口,即可直接加载到TP层模块中。如果出现加载失败,主要检查如下情况:
1.是否用Release模式发布,如果是Debug模式,常常会有以上失败的情况出现。
2.是否采用x86平台发布,目前TSMaster为支持X86的版本,用来调试的DLL也必须为X86模式。
如何兼容其他函数接口
日常使用中,经常出现用户已经开发好了dll,如果该dll的接口不是上述三种中的任何一种,就无法直接加载到TSMaster的诊断模块中。对于这种情况,推荐采用如下方案来解决此问题:
下面以一个实际的实例来讲解如何兼容用户现有的DLL文件。
1.用户现有的DLL,名称为UserSeedKey.dll。该函数内部的API函数有:
Seed等级为1的时候,调用函数voidGetKeyFromSeed01(byte*ASeed,byte*AKey);
Seed等级为3的时候,调用函数voidGetKeyFromSeed03(byte*ASeed,byte*AKey);
Seed等级为11的时候,调用函数voidGetKeyFromSeed11(byte*ASeed,byte*AKey);
该dll不支持上述默认加载接口,无法直接加载到TSMaster中使用。因此,需要把这些DLL再包装一层,才能载入到TSMaster的诊断模块中。
2.选择TSMaster安装目录中提供的GenerateKeyEx的模板工程,在该工程中调用上述DLL的函数接口。基本思路是:
采用Loadlibrary动态用户现有的dll。
根据传入的Level参数,采用GetProcAddress函数动态获取实际的用于计算Key的函数指针。
如果获取函数指针成功,则使用该函数指针传输Seed值,并计算对应的Key值。
详细调用示例函数如下图所示:
3.该GenerateKeyEx工程开发结束后,TSMaster直接加载GenerateKeyEx所在的dll。需要注意的是,用户需要把现有的UserSeedKey.dll拷贝到TSMaster根目录或者GenerateKeyEx.dll所在的目录。如果不拷贝过去,GenerateKeyEx.dll执行的时候会出现找不到对应依赖dll的情况,解锁失败。
总结:
在TSMaster安装目录中,提供了封装Seed&Key算法的模板工程。如GenerateKeyEx,GenerateKeyExOptASAP1A_CCP_ComputeKeyFromSeed,用户基于此模板工程开发即可得到能够直接加载的dll函数。
同时,也提供了二次封装的dll的工程,比如GenerateKeyEx_Wrapper_Demo,该工程演示了如何基于已经存在的SeedKey算法库进行包装,生成可以直接加载到TSMaster诊断模块中的dll的过程。
二、采用内置的算法编辑器
基本步骤如下所示:
注意事项:
【1】算法函数的接口,TSMaster目前提供了最常用的接口形式,如果用户有自己特殊的接口形式,无法覆盖住,请联系上海同星把此接口增加到选项中。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。