【CANoe】CAPL_UDS安全算法dll制作

文章目录

  • 一、背景
  • 二、方法一:在CAPL中引入dll的制作【制作dll的通用方法】
    • 1、在CAPL中打开帮助文档
    • 2、找到CAPL DLL相关的说明,以下图中标记的为Demo进行dll的制作
    • 3、拷贝到桌面,我用VS2019打开
    • 4、解析其中一个函数,制作dll类似原理【☆核心☆】
    • 5、27解锁示例
      • 1)在刚才的工程中增加如下代码:
      • 2)“重新生成”dll,并将capldll.dll改名为27Unlock.dll
      • 3)将dll引入到CAPL工程中
  • 三、方法二:在UDS模块中导入dll的制作【推荐:跑UDS诊断也可以用到】
    • 1、导入dll的方法:
    • 2、dll制作方法:
      • 1)打开CAPL帮助文档
      • 2)进入到如下路径:
      • 3)代码解读:【☆核心☆】
      • 4)CAPL中调用27解密算法的核心代码:

一、背景

使用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:

核心代码解读:

4)CAPL中调用27解密算法的核心代码:

result=diagGenerateKeyFromSeed(tmpseed,4,Unlocktype,"CommonDiagnostics","",tmpkey,4,gkeysize);      

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年12月22日
下一篇 2023年12月22日

相关推荐