cxnet 发表于 2021-12-25 15:41:38

十六进制替换问题

我需要对多个文件里的十六进制代码进行替换,但是它的偏移位置不固定,而要搜索的内容后面有两个数也是随机变化的,但我需要将它一起替换掉,比如原来的代码为\x44\x40\x40\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44\x04\x84\x0A\xOD\xEA\x04\x84,我需要将\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44\x04\x84替换成\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44\x01\x00也就是将最后两个字节替换掉,但也就是最后2个字节每个文件里都是不一样的内容,每个文件里搜索字符串\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44可以定位,无法搜索到后2位,请问大家有什么办法替换呢?

import sys
str_hex=b'\x44\x40\x40\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44\x04\x84\x0A\xOD\xEA\x04\x84'
old_hex=b'\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44' #加后两位\x04\x84它是随机变化的
new_hex=b'\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44\x01\x00'
new=str_hex.replace(old_hex,new_hex,1)
print(new)

jackz007 发表于 2021-12-25 16:11:42

本帖最后由 jackz007 于 2021-12-25 16:18 编辑

with open(fn , 'rb') as fp:
    d = fp . read()
s = b'\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44'
k = d . find(s , 0)
while k != -1:
    d = d[: k + len(s)] + byte() + d
    k = d . find(s , k + len(s) + 2)
with open(fn , 'wb') as fp:# 谨慎操作,最好先备份原始文件。
    fp . write(d)            # 谨慎操作,最好先备份原始文件。

cxnet 发表于 2021-12-25 16:25:23

jackz007 发表于 2021-12-25 16:11


谢谢你的帮助
页: [1]
查看完整版本: 十六进制替换问题