一、背景
使用UDS进行刷写时,需要27服务解密后,才能正确执行刷写,本文提供两种制作27解密dll的方法,用于CANoe的CAPL脚本中。
【特别说明】
遇到问题时,CAPL帮助文档提供了很好的指引,大家可以好好利用。
二、方法一:在CAPL中引入dll的制作【制作dll的通用方法】
1、在CAPL中打开帮助文档
2、找到CAPL DLL相关的说明,以下图中标记的为Demo进行dll的制作
CAPL DLL示例所在路径:C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 12.0.75\Programming\Capldll
3、拷贝到桌面,我用VS2019打开
1)下图点击确定:
2)右键点击工程“重新生成",报如下错误代码【C2338】:
C2338 Windows headers require the default packing option. Changing this can lead to memory corruption. This diagnostic can be disabled by building with WINDOWS_IGNORE_PACKING_MISMATCH defined
3)更改如下配置:
4)再次"重新生成”,可编译成功:
4、解析其中一个函数,制作dll类似原理【☆核心☆】
一些说明:
typedef struct CAPL_DLL_INFO4{
char cdlName[MAX_CDL_NAME2]; // 在CAPL中调用时显示的函数名
CAPL_FARCALL adr; // 函数地址,即vs工程中函数定义时的函数名
const char* categoryName; // 函数在CAPL中的所属目录,可以用于对函数的分类
const char* hintText; // 对该函数功能的描述介绍(在CAPL中显示)
char resultType; // 函数的返回值类型,用CAPL中的类型的首字母大写去表示
int parCount; // 函数的参数个数
char parTypes[MAXCAPLFUNCPARS_8_1]; // 函数的参数类型,用CAPL中的类型的首字母大写去表示
unsigned char array[MAXCAPLFUNCPARS_8_1]; // 函数的参数是否是数组:\001表示是数组;\000表示不是数组。默认则为\000
const char* parNames[MAXCAPLFUNCPARS_8_1]; // 函数显示的参数名(在CAPL中的声明介绍时)
} CAPL_DLL_INFO4;
5、27解锁示例
1)在刚才的工程中增加如下代码:
/*27解密算法*/
void CAPLEXPORT far CAPLPASCAL appGetDataThreePars(unsigned long mask, long SecurityLevel,
unsigned char SeedArray[], unsigned char KeyArray[])
{
/*27解密算法--根据实际算法进行更改即可*/
KeyArray[0] = SeedArray[0] + 1;
KeyArray[1] = SeedArray[0] + 1;
KeyArray[2] = SeedArray[0] + 1;
KeyArray[3] = SeedArray[0] + 1;
}
{"dllUnlock27", (CAPL_FARCALL)appGetDataThreePars,"CAPL_DLL","This function will get two datas from DLL into CAPL memory",'V', 4, "DLBB", "\000\000\001\001", {"mask","SecurityLevel","seedblock","keyblock"}},
2)“重新生成”dll,并将capldll.dll改名为27Unlock.dll
3)将dll引入到CAPL工程中
三、方法二:在UDS模块中导入dll的制作【推荐:跑UDS诊断也可以用到】
1、导入dll的方法:
2、dll制作方法:
1)打开CAPL帮助文档
2)进入到如下路径:
C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 12.0.75\CAN\Diagnostics\UDSSystem\SecurityAccess\Sources
将如下文件夹拷贝到桌面,进行制作dll
3)代码解读:【☆核心☆】
右键点击工程“重新生成",工程可正确编译生成dll:
核心代码解读:
文章来源:https://www.toymoban.com/news/detail-458882.html
4)CAPL中调用27解密算法的核心代码:
result=diagGenerateKeyFromSeed(tmpseed,4,Unlocktype,"CommonDiagnostics","",tmpkey,4,gkeysize);
文章来源地址https://www.toymoban.com/news/detail-458882.html
到了这里,关于【CANoe】CAPL_UDS安全算法dll制作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!