如何解决如何使用 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 举报,一经查实,本站将立刻删除。