添加oem解析 未完成

This commit is contained in:
ranchuan
2024-10-16 19:47:59 +08:00
parent e26889c274
commit 0cc0a6cac1
4 changed files with 53 additions and 18 deletions

19
bin/base.py Normal file
View File

@@ -0,0 +1,19 @@
import os
import sys
# 获取执行文件所在的目录
def bin_path():
if(sys.argv[0].endswith('.exe')):
path=os.path.dirname(os.path.realpath(sys.executable))
return os.path.join(path,'bin')
else:
path=os.path.abspath(__file__)
path=os.path.split(path)[0]
return path

View File

@@ -4,6 +4,7 @@ import sys
import struct
import json
from bin.log import myprint
from bin.base import bin_path
# kunlun1,kunlun2,kunlun3的img类型
@@ -157,8 +158,8 @@ def tran_img_headerv0(data:bytearray):
ret["sha256"]=data[32:].hex()
t=str(ret)
t=t.replace(',','\n')
return t
return ""
return t,ret
return "",{}
def tran_img_headerv1(data:bytearray):
size=len(data)
@@ -186,8 +187,8 @@ def tran_img_headerv1(data:bytearray):
ret["sha256"]=data[32:].hex()
t=str(ret)
t=t.replace(',','\n')
return t
return ""
return t,ret
return "",{}
# 判断是不是pkt_header
@@ -215,12 +216,13 @@ def img_header_check(data:bytearray):
# 转化为hex文本
def bin_to_hex(bin:bytearray,f):
def bin_to_hex(bin:bytearray,f,oem_file=None):
all_size=len(bin)
pack_size=32
turned=0
turned_old=0
out_text=''
kunlun=''
if(pkt_header_check(bin)):
out_text=tran_pkg_header(bin[0:96])+'\n'
f.write(out_text)
@@ -238,14 +240,24 @@ def bin_to_hex(bin:bytearray,f):
hdr_data=bytearray()
hdr_v=img_header_check(hdr_data)
if(hdr_v=='V0'):
out_text=tran_img_headerv0(hdr_data)+'\n'
kunlun='kl1'
out_text,ret=tran_img_headerv0(hdr_data)
out_text+='\n'
f.write(out_text)
elif(hdr_v=='V1'):
out_text=tran_img_headerv1(hdr_data)+'\n'
kunlun='kl3'
out_text,ret=tran_img_headerv1(hdr_data)
out_text+='\n'
f.write(out_text)
# 截取oem部分
if(oem_file is not None):
if(_ImgType[hdr_data[1]]=="imgV1OEM"):
size=int(ret["imgSize"])
oem_bin=bin[turned_old+32:turned_old+32+size]
oem_file.write(oem_bin)
out_text=f"[{hex(turned_old)}] {data.hex(' ')}\n"
f.write(out_text)
return kunlun
def bin_to_hex_file(bin_file_name:str,hex_file_name:str,enc=0):
@@ -258,8 +270,19 @@ def bin_to_hex_file(bin_file_name:str,hex_file_name:str,enc=0):
for index in range(len(bin)):
bin[index]=bin[index]^pat
with open(hex_file_name,mode='w+',encoding="utf-8") as f:
bin_to_hex(bin,f)
# oem_bin 去除原始后缀 .bin.txt 添加新后缀 -oem.bin
oem_name=hex_file_name[0:-8]+'-oem.bin'
with open(oem_name,mode='wb+') as oem_f:
kl=bin_to_hex(bin,f,oem_f)
# 调用oem_tool 打印oem信息
myprint(bin_path())
oem_tool=os.path.join(bin_path(),f"{kl}_oem.exe")
if(os.path.exists(oem_tool)):
cmd_str=f"{oem_tool} --parse={oem_name}"
myprint(cmd_str)
os.system(cmd_str)
else:
myprint(f"oem_tool not found: {oem_tool}")
def bin_file_decrypt(bin_file:str):
with open(bin_file,mode='rb') as f:

BIN
bin/kl3_oem.exe Normal file

Binary file not shown.