Python基于周立功ZCANPRO开发刷写脚本
一、概述
1.背景
本文章主要是记录用Python基于周立功ZCANPRO开发VIN和SN码刷写工具。
2.环境搭建
Python3.8.10 32位(必须)
周立功上位机:ZCANPRO
周立功CAN盒:USBCANFD-200U

二、刷写脚本
from ctypes import *
import os, time
import zcanpro """
使用方法:
1.VIN填写需要刷写的VIN码,如:VIN="12345678901234567"
2.SNN填写需要刷写的VIN码,如:SN="12345678901234567890123456"
3.ZCANPRO工具扩展脚本功能执行本脚本
"""
VIN = "" # 填写VIN码
SN = "" # 填写SN码 stopTask = False def z_notify(type, obj):
zcanpro.write_log("Notify " + str(type) + " " + str(obj))
if type == "stop":
zcanpro.write_log("Stop...")
global stopTask
stopTask = True def uds_req(buses, req):
"""诊断服务命令封装"""
zcanpro.write_log("[UDS Tx] " + ("%02X " % req["sid"]) + " ".join('{:02X}'.format(a) for a in req["data"]))
response = zcanpro.uds_request(buses[0]["busID"], req)
if not response["result"]:
zcanpro.write_log("Request error! " + response["result_msg"])
else:
zcanpro.write_log("[UDS Rx] " + " ".join('{:02X}'.format(a) for a in response["data"]))
return response def uds_Serve(sid, data):
"""data组装"""
uds = {"src_addr": 0x113, "dst_addr": 0x11b, "suppress_response": 0, "sid": 0x10, "data": []}
uds["sid"] = sid
uds["data"] = data
return uds def z_main():
udsCfg = {
"response_timeout_ms": 3000,
"use_canfd": 1,
"canfd_brs": 1,
"trans_ver": 0,
"fill_byte": 0x00,
"frame_type": 0,
"trans_stmin_valid": 0,
"trans_stmin": 0,
"enhanced_timeout_ms": 5000
}
lib = cdll.LoadLibrary(os.path.join(os.path.dirname(__file__), 'DLL文件')) # 调用DLL解密文件
buses = zcanpro.get_buses()
zcanpro.uds_init(udsCfg) def unlock_27():
"""处理27服务解锁DLL方法"""
uds_req(buses, uds_Serve(0x10, [0x03]))
response1 = uds_req(buses, uds_Serve(0x27, [0x01]))
if response1["data"][0] == 0x67:
m = 0x00
for i in range(2, len(response1["data"])):
m = m | response1["data"][i] << 24 - 8 * (i - 2)
lib.keyFromSeedLevel1.restype = c_ulong # 定义DLL返回类型
keys = lib.keyFromSeedLevel1(m)
data_27 = [0x02]
n1 = divmod(keys, 0x1000000)[0]
n2 = divmod(divmod(keys, 0x10000)[0], 0x100)[1]
n3 = divmod(divmod(keys, 0x10000)[1], 0x100)[0]
n4 = divmod(keys, 0x100)[1]
data_27.append(n1)
data_27.append(n2)
data_27.append(n3)
data_27.append(n4)
response2 = uds_req(buses, uds_Serve(0x27, data_27))
if response2["data"][0] == 0x67:
return True
else:
zcanpro.write_log('27解锁失败')
return False
return False if VIN != "":
if len(VIN.strip()) == 17:
"""刷写VIN码"""
if unlock_27():
VIN_16hex = [ord(i) for i in VIN]
data = [0xF1, 0x90] + VIN_16hex
uds_req(buses, uds_Serve(0x2E, data))
response3 = uds_req(buses, uds_Serve(0x22, [0xF1, 0x90]))
if response3["data"][3:] == VIN_16hex:
zcanpro.write_log("VIN刷写成功")
else:
zcanpro.write_log("VIN刷写失败")
else:
zcanpro.write_log("27解锁失败")
else:
zcanpro.write_log("VIN码长度不是17位") if SN != "":
if len(SN.strip()) == 26:
"""刷写SN码"""
if unlock_27():
SN_16hex = [ord(i) for i in SN]
write_31 = [0x01, 0xFF, 0xAA, 0x03, 0x04, 0x1A, 0x00] + SN_16hex
CR = 0
for i in range(3, len(write_31)):
CR = CR ^ write_31[i]
write_31.append(CR)
uds_req(buses, uds_Serve(0x31, write_31))
response = uds_req(buses, uds_Serve(0x22, [0xF1, 0x8C]))
if response['data'][3:] == SN_16hex:
zcanpro.write_log("SN刷写成功")
else:
zcanpro.write_log("SN刷写失败")
else:
zcanpro.write_log("SN码长度不是26位")
time.sleep(1)
zcanpro.uds_deinit()
三、刷写VIN与SN
1.打开上位机ZCANPRO-高级功能-扩展脚本

2.执行章节二的刷写脚本


Python基于周立功ZCANPRO开发刷写脚本的更多相关文章
- 基于python深度学习的apk风险预测脚本
基于python深度学习的apk风险预测脚本 为了有效判断安卓apk有无恶意操作,利用python脚本,通过解包apk文件,对其中xml文件进行特征提取,通过机器学习构建模型,预测位置的apk包是否有 ...
- 老李分享:Python开发性能测试脚本
老李分享:Python开发性能测试脚本 测试开发工程师的工作主要是根据测试目标来完成,帮助测试人员完成测试目标,测试的业务需求是测试人员提出,但是由于环境的制约,手中没有性能测试工具的时候,性能测 ...
- 周立功USBCAN-II 上位机开发(MFC)
使用的USB转CAN的设备是周立功的USBCAN-II,在购买的时候,会有上位机二次开发的库文件.例程和API文档等材料,可以参考. 1.库函数的调用 首先,把库函数文件都放在工作目录下.库函数文件总 ...
- 【接单】找我付费定制Python工具软件或网站开发、Chrome浏览器插件、油猴脚本
各位可付费找我定制Python工具软件或网站开发.Chrome插件.油猴脚本.自动化软件,可通过我做的软件来评判我的实力,一定要先和我沟通你的需求,做不了的我也不会接. 费用50元起,通过淘宝APP或 ...
- Golang 基于Prometheus Node_Exporter 开发自定义脚本监控
Golang 基于Prometheus Node_Exporter 开发自定义脚本监控 公司是今年决定将一些传统应用从虚拟机上迁移到Kubernetes上的,项目多而乱,所以迁移工作进展缓慢,为了建立 ...
- [Python] 利用Django进行Web开发系列(一)
1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...
- (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇
本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...
- (数据科学学习手札106)Python+Dash快速web应用开发——回调交互篇(下)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- python九周周末总结
python九周周末总结 UDP协议 udp协议的交互模式服务端不需要考虑客户端是否退出,你发多少那么他就会按照你发的东西直接去传输给客户端不存在黏包现象 服务端: import socket ser ...
随机推荐
- 给swap分区扩容
一.先添加一块硬盘,如果硬盘空间还有没有被分区的也可以使用,再创建一个分区(分区可以是主分区或者扩展的逻辑分区) fdisk /dev/sdb n 代表创建分区 p 代表 ...
- 解析数仓OLAP函数:ROLLUP、CUBE、GROUPING SETS
摘要:GaussDB(DWS) ROLLUP,CUBE,GROUPING SETS等OLAP函数的原理解析. 本文分享自华为云社区<GaussDB(DWS) OLAP函数浅析>,作者: D ...
- 初次接触Java感受
认真开始研究了idea后端开发环境 感触很深,突然觉得自己不能再一天的颓废下去,认真找点事情做一做,毕竟自己还是一张白纸,趁着自己年纪轻轻 经过一周的摸索自己努力了还不够,心里多么渴望自己身边的人能够 ...
- plicp 点云迭代最近邻点配准法
输入参数 点云A的极坐标集合 点云A对应Lidar所在pose 点云B的极坐标集合 点云B对应Lidar所在pose Features 根据两个点云的弧度关系确定找点的起始位置 根据两个点云的弧度关系 ...
- 超耐心地毯式分析,来试试这道看似简单但暗藏玄机的Promise顺序执行题
壹 ❀ 引 就在昨天,与朋友聊到JS基础时,她突然想起之前在面试时,遇到了一道难以理解的Promise执行顺序题.由于我之前专门写过手写promise的文章,对于部分原理也还算了解,出于兴趣我便要了这 ...
- ucore lab3 虚拟内存管理 学习笔记
做个总结,这节说是讲虚拟内存管理,大部分的时间都在搞SWAP机制和服务于此机制的一些个算法.难度又降了一截. 不过现在我的电脑都16G内存了,能用完一半的情景都极少见了,可能到用到退休都不见得用的上S ...
- 完全卸载nginx的详细步骤
一个执着于技术的公众号 前言 在开局配置Nginx时有可能会配置错误,报各种错误代码.看不懂或者懒得去看这个报错时,其实最简单的方式是卸载并重装咯.今天就带大家一起学习下,如何彻底卸载nginx程序. ...
- kNN-画图
现在我们想要展示一些可视化内容 首先导包,如果是在jupyter notebook上,需要加入魔法函数:%matplotlib inline,这表示可以在jupyter上直接画图 import dat ...
- 微信小程序云开发如何实现微信支付,业务逻辑又怎样才算可靠
今天打了几把永劫无间后,咱们来聊一聊用云开发来开发微信小程序时,如何实现微信支付,并且保证业务逻辑可靠. @ 目录 注册微信支付商户号 小程序关联商户号 业务逻辑 代码实现 注册微信支付商户号 点击& ...
- zabbix的web界面访问失败问题排查
现象:用curl访问显示拒绝链接,查看zabbix-server日志也无异常 1.检查防火墙,SElinux是否关闭 2.检查zabbix-server服务是否启动 3.检查80端口是否被占用,比方是 ...