微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 python 程序中的安全 dll 执行 UDS 会话解锁?

如何解决如何使用 python 程序中的安全 dll 执行 UDS 会话解锁?

我想自动化一些需要安全解锁的 WDBI 服务。 我有一个可以从 CANoe 调用的 dll,但我不想使用独木舟硬件,我也不知道 dll 中的函数调用。 有什么办法可以从python程序中调用dll来执行会话解锁吗?

解决方法

有了 DLL,您可以使用 DependencyWalker 之类的工具查看 DLL 的导出符号。但是,如果您已经知道您的 DLL 在 CANoe 中工作,它将遵循指定的 API by Vector Informatik 在 CANoe 的安全访问 DLL 中实现:GenerateKeyEx 和 GenerateKeyExOpt。

GenerateKeyEx:

int VKeyGenResult ExGenerateKeyEx (
  const unsigned char* ipSeedArray,unsigned int iSeedArraySize,const unsigned int iSecurityLevel,const char* ipVariant,unsigned char* iopKeyArray,unsigned int iMaxKeyArraySize,unsigned int& oActualKeyArraySize );

GenerateKeyExOpt:

VKeyGenResult ExOptGenerateKeyExOpt (
  const unsigned char* ipSeedArray,const char* ipOptions,unsigned int& oActualKeyArraySize );

那么这只是从python调用这个Dll的问题,即使用ctypes

import ctypes

mylib = ctypes.WinDLL("./GenerateKeyExImpl.dll")
seed = (ctypes.c_byte * 4)(0xff,0xfe,0xfd,0xfc) # these bytes you should get from the ECU i.e.
# Tx 27 01
# Rx 67 01 ff fe fd fc
key = (ctypes.c_byte * 4)() # this will contain the secret key after Dll call
keylength = ctypes.c_int(4) # this will contain the secret key length after Dll call
mylib.ExGenerateKeyEx(
     ctypes.pointer(seed),# Seed from the ECU
     ctypes.c_int(4),# Example: Seed length = 4 bytes
     ctypes.c_int(1),# Example: Security Level 1
     POINTER(c_int)(),# Example: NULL = No variant string
     ctypes.pointer(key),# Key to send back to the ECU
     ctypes.c_int(4),# Example: Key Max length = 4 bytes
     ctypes.pointer(keylength),# Example: Seed length = 4 bytes
)
# TODO: Send "key" back to the ECU i.e.
# Tx 27 02 XX XX XX XX
# Rx 67 02   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。