如何制作Vector Vflash中加载的DLL文件--自动解锁刷写过程中27服务

案例背景:

vFlash 是一种易于使用的工具,用于对一个或多个 ECU 进行刷写软件。由于方法灵活,它可以支持各种汽车原始设备制造商的不同刷写规范。它支持通过 CAN、CAN FD、FlexRay、LIN、以太网/DoIP 和以太网/SoAd 对 ECU 进行刷写。

vFlash 既可交互使用,也可通过自动化接口控制。在交互模式下,用户只需按下按钮,即可加载项目并开始编程。

下面教您如何制作Vflash刷写过程中27服务 解锁所需的DLL动态链接库文件。

目录

[1 如何制作该"DLL动态链接库文件"](#1 如何制作该“DLL动态链接库文件”)

[1.1 如何获取"DLL动态链接库文件"的DEMO](#1.1 如何获取“DLL动态链接库文件”的DEMO)

[1.2 使用Visual Studio打开"DLL动态链接库文件"的DEMO](#1.2 使用Visual Studio打开“DLL动态链接库文件”的DEMO)

[1.2.1 API接口参数说明](#1.2.1 API接口参数说明)

[1.2.2 举例:27服务解锁算法](#1.2.2 举例:27服务解锁算法)

[1.2.3 生成DLL文件](#1.2.3 生成DLL文件)

结尾


1 如何制作该"DLL动态链接库文件"

1.1 如何获取"DLL动态链接库文件"的DEMO

在Vflash的安装路径下都会有下图这样的文件夹**SeedKeyExample。**这就是制作该DLL文件的DEMO。

Vflash的路径:

C:\Users\Public\Documents\Vector\vFlash\5\Examples\SeedKeyExample

1.2 使用Visual Studio打开"DLL动态链接库文件"的DEMO

下面以文件夹SeedKeyExample 为例。双击打开SeedKey.vcproj文件(须确保电脑已经安装Visual Studio)。

使用Visual Studio打开该工程后,在右侧的"解决方案资源管理器 "中,依次选择SeedKey -- > Source Files -- > SeedKey.cpp,接着在左侧你会看到被打开的SeedKey.cpp文件,在其中你会看到一个API GenerateKeyEx 接口,在该API接口中完成"27服务各security level安全等级解锁算法"即可。

1.2.1 API接口参数说明

ipSeedArray :表示接收到的27服务奇数subfunction中的Seed种子字节值"数组";

iSeedArraySize :表示接收到的27服务奇数subfunction中的Seed种子长度;

iSecurityLevel:表示接收到的27服务Security Level安全等级;

ipVariant:表示CanOe / Canalyzer中加载的诊断描述文件"当前使用的变体";

iopKeyArray :表示27服务偶数subfunction中发送的Key密钥字节值"数组";

iMaxKeyArraySize :表示27服务偶数subfunction中的发送的Key密钥长度;

oActualKeyArraySize :表示输出Key密钥长度,通常让oActualKeyArraySize =iSeedArraySize;。

1.2.2 举例:27服务解锁算法

假设:Seed的长度为4,Key的长度也是4。Key = Seed + 123456。我们可以这样改写该API GenerateKeyEx接口。

KEYGENALGO_API VKeyGenResultEx GenerateKeyEx(
   const unsigned char* ipSeedArray, unsigned int iSeedArraySize,
   const unsigned int iSecurityLevel, const char* ipVariant,
   unsigned char* iopKeyArray, unsigned int iMaxKeyArraySize, 
   unsigned int& oActualKeyArraySize)
{
    unsigned int seed = 0;
    unsigned int key = 0;

    seed = ((ipSeedArray[0] << 24) & 0xFF000000);
    seed |= ((ipSeedArray[1] << 16) & 0x00FF0000);
    seed |= ((ipSeedArray[2] << 8) & 0x0000FF00);
    seed |= ((ipSeedArray[3] << 0) & 0x000000FF);

    key = seed + 123456;

    iopKeyArray[0] = ((key >> 24) & 0x000000FF);
    iopKeyArray[1] = ((key >> 16) & 0x000000FF);
    iopKeyArray[2] = ((key >> 8) & 0x000000FF);
    iopKeyArray[3] = ((key >> 0) & 0x000000FF);

    oActualKeyArraySize = iSeedArraySize;

  return KGRE_Ok;
}

1.2.3 生成DLL文件

SeedKey.cpp文件编辑完成后,在右侧的"解决方案资源管理器"选中SeedKey,并鼠标右键,在其上下文中,单击生成。

在DEMO工程的路径下的Debug文件夹中,你会看到生成的SeednKey.dll文件。

将该SeednKey.dll 文件加载到Vflash中的Miscellaneous

结尾

获取更多"汽车电子资讯"和"工具链使用"

请关注CSDN博客"汽车电子助手",做您的好助手。

相关推荐
难以触及的高度3 分钟前
source ~/.bash_profile有什么用
开发语言·bash
骆晨学长13 分钟前
基于springboot学生健康管理系统的设计与实现
java·开发语言·spring boot·后端·spring
白总Server21 分钟前
php语言基本语法
开发语言·ide·后端·golang·rust·github·php
小林熬夜学编程23 分钟前
【Linux系统编程】第二十弹---进程优先级 && 命令行参数 && 环境变量
linux·运维·服务器·c语言·开发语言·算法
A懿轩A28 分钟前
MySQL SQL多表查询语句各种连接
java·开发语言·数据库·sql·mysql·mybatis
zls36536537 分钟前
C# WPF中实现深拷贝的五种方式
开发语言·c#
六点半88838 分钟前
【C/C++】涉及string类的经典OJ编程题
c语言·开发语言·c++·算法
爱是小小的癌1 小时前
C语言动态内存管理
c语言·开发语言
MessiGo1 小时前
Python 入门教程(3)基础知识 | 3.3、标识符
java·开发语言·python
二十雨辰1 小时前
[Java]maven从入门到进阶
java·开发语言·maven