• 前言
  • 一、封装dll,调用dll解锁
  • 二、capl写解锁函数
  • 三、CDD加载dll解锁
  • 四、调用DLL实现UDS_TP/NM功能
  • 五、总结
    ————————————————

前言

请输入公众号:总线网络。关注我,获取汽车网络开发及测试方面资料,更新干货!
最近有小伙伴问我关于调用dll和安全算法解锁的问题哈。我所知的有
1、capl里调用封装好的dll;
2、capl里编写安全算法;
3、用CDD的诊断功能来调用dll;
4、利用节点调用dll实现UDS_TP/NM(OSEK/Autosar);
今天我一一介绍下哈,大家有什么疑问可以留言或加我vx,联系方式在我介绍里的。

一、如何封装capl调用的dll解锁

(1)生成dll的工程模板在我们安装CANoe时就自动生成了,以Win 7系统、9.0版本的CANoe为例,该工程路径如下:
C:\Users\Public\Documents\Vector\CANoe\9.0\CANoe Sample Configurations\Programming\CAPLdll\VS 2005 Project(参考)
(2)打开.sln工程,将自己想要被调用的接口函数的定义及声明写入到”capldll.cpp”这个文件中
(3)找到CAPL_DLL_INFO4,了解参数作用,如下:

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表示不是数组。默认则为\000const char*       parNames[MAXCAPLFUNCPARS_8_1]; // 函数显示的参数名(在CAPL中的声明介绍时)
} CAPL_DLL_INFO4;

(4)如下例子,输入seed种子,输出pwd密钥,然后把函数名写在CAPL_DLL_INFO4 table[]里:

#define COC(value,bits) ((value>>bits)|(value << (sizeof(value)*8-bits)))
unsigned long CAPLEXPORT far CAPLPASCAL Key4(unsigned long seed)
{unsigned long pwd = 0;unsigned long tmpseed = seed;unsigned short tmpseed_H = 0;unsigned short tmpseed_L = 0;tmpseed_H = (unsigned short)(tmpseed & 0xff00) >> 8;tmpseed_L = (unsigned short)(tmpseed & 0x00ff);if (tmpseed != 0){pwd =  (COC(COC(COC((tmpseed + 0xFFFFEF71), 1), 1), 1)) ^ (tmpseed_H * tmpseed_L);}else{pwd = 0;}return pwd;
}

(5)返回值看canoe help讲解。按照上图我给的例子写,是没问题的。

(6)最后生成解决方案,获得.dll文件,至此capl调用的.dll文件封装好,把它放到要调用的路径里。
(7)capl里用#pragma library(“\Exec32\capldll.dll”)调用,右边直接拖过来用即可。

(8)若不用capl调用,也可在CANoe Options里调用。

二、如何用capl写安全算法解锁(capl基础编程)

(1)以16位密钥为例如下图:

(2)关键字声明如下图,把c算法函数拷贝过来,改变一下关键字即可,若算法函数包含宏运算的,建议用第一种方法。

三、CDD加载dll解锁

(1)打开如下图路径.cpp可生成CDD用的.dll文件
(2)打开如下路径CDD用的路径demo可看到加载的.dll文件就是安全算法
(4)打开Diagnostics里诊断功能
(5)打开Diagnostic Console,10 03 ->27 01->27 02即可解锁。

四、调用DLL实现UDS_TP/NM功能

(1)以OSEK NM为例,先打开如下路径OSEK的Demo

(2)可以看到A节点调用的.dll文件
(3)脚本运用,可以根据下图help的描述选择你的需求函数。

五、总结

选择合适自己的写脚本的方式,能事半功倍!祝福各位学习CANoe的同学能早日毕业!
有不完善的地方欢迎留言或加我vx补充。
请输入公众号:总线网络。关注我,获取汽车网络开发及测试方面资料,更新干货!
分享总线开发知识
分享CAN/CANFDLIN/ETH等网络资料
分享CANoe/TSMaster/PCAN等设备工具使用
分享UDS/NM/Bootloader测试用例等
一起来学习,进步,交流吧!

CANalyzer及CANOE使用四:调用DLL实现UDS_TP/NM(OSEK/Autosar)或安全算法解锁功能相关推荐

  1. labview如何加载库_LabVIEW如何方便地调用DLL文件

    转自:http://bbs.elecfans.com/jishu_469502_1_1.html LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比如, ...

  2. labview调用DLL

    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON"> &l ...

  3. CANalyzer及CANOE使用五:无DBC,调CSV方式的网关信号转发或单通道信号值控制ECU其他信号变化(包含设计自动化测试)

    前言 Panel界面 CSV文件解析 发送与接收 验证 测试用例说明 拓展思维 补充说明 ---------------- 前言 请输入公众号:总线网络.关注我,获取汽车网络开发及测试方面资料,更新干 ...

  4. C#创建和调用DLL

    一.写在前面 C# 语言是一种简单但功能强大的编程语言,用于编写企业应用程序. C# 语言从C和 C++语言演化而来,在语句.表达式和运算符方面使用了许多 C++ 功能. C# 语言在类型安全性.版本 ...

  5. 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】

    C#中dll调用方法 一.      DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要 ...

  6. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  7. C#调用dll中的函数

    C#调用dll中的函数 文章分类:操作系统 文章来源:http://blog.csdn.net/strmagic/archive/2007/11/02/1863462.aspx 大家在实际工作学习C# ...

  8. Java 调用 C++ (Java 调用 dll)康哥手把手教你

    摘要: 本文原创,转载请注明地址 http://www.cnblogs.com/baokang/p/4979243.html 因为要做点图形处理的项目,需要在Java中调用dll库,所以开发的第一步是 ...

  9. C++ Builder创建和调用dll中的资源

    程序开发中经常会用到一些图标.图片.光标.声音等,我们称它们为资源(Resource).当多个窗口用到同样的资源时,可以将这些公共的资源放到一个dll文件里调用,这样,由于定位资源比在磁盘中定位文件花 ...

最新文章

  1. 五个角度解释深度学习中 Batch Normalization为什么效果好?
  2. 什么是虚拟专用网(×××)
  3. mysql逗号分隔函数_mysql split 函数(用逗号分隔)的实现
  4. linux怎么显示目录层次结构,Linux基础(层级结构、基础命令)
  5. android模拟摄像头,android模拟器如何连接摄像头
  6. 6.2.6 String_Number
  7. 微信公众号推送模板信息
  8. 3G UMTS与4G LTE核心网(一):移动核心网基础
  9. mysql按照学生分组查询_MySQL分组查询
  10. 【AAAI 2021】全部接受论文列表(六)
  11. FoxMail上配置163邮箱的方法
  12. opencv 求矩阵的逆
  13. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:07 规则式自然语言处理系统
  14. 隐藏CAD图层内容,2种方法搞定
  15. Flash与服务器通信简介
  16. 【电子通识】为什么IC需要自己的去耦电容?
  17. 离线环境遇到Problems loading reference..Unable to load schema from https-解决篇
  18. garch dcc用matlab,用matlab工具箱怎么对garch模型做...
  19. html改变元素外边距,CSS 简明教程 - 外边距 ( margin ) 属性
  20. 在Ubuntu系统下运行c语言程序

热门文章

  1. 关于getElementsByTagName的遍历顺序
  2. 百度知道负面信息怎么删除
  3. python+appium,常见报错与解决方法
  4. ffmpeg视频转码记录
  5. 搭建视频点播(VOD)服务(live555 + ffmpeg)
  6. 前端微信小程序生鲜类仿爱鲜蜂微信小程序
  7. 魔乐科技安卓开发教程----李兴华----10动画
  8. a标签去下划线或文字添加下修饰_怎么去掉html a超链接下划线
  9. .map文件用什么打开_Fusion 360 干货集:盘点那些可以用Fusion 360打开的设计文件...
  10. 前后端如何进行数据交互