鱼C论坛

 找回密码
 立即注册
查看: 751|回复: 2

[技术交流] 十六进制替换问题

[复制链接]
发表于 2021-12-25 15:41:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我需要对多个文件里的十六进制代码进行替换,但是它的偏移位置不固定,而要搜索的内容后面有两个数也是随机变化的,但我需要将它一起替换掉,比如原来的代码为\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位,请问大家有什么办法替换呢?

  1. import sys
  2. 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'
  3. old_hex=b'\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44' #加后两位\x04\x84它是随机变化的
  4. new_hex=b'\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44\x01\x00'
  5. new=str_hex.replace(old_hex,new_hex,1)
  6. print(new)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-25 16:11:42 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-25 16:18 编辑
  1. with open(fn , 'rb') as fp:
  2.     d = fp . read()
  3. s = b'\x88\x88\x04\x48\x04\x84\x04\x88\x48\x80\x44\x44'
  4. k = d . find(s , 0)
  5. while k != -1:
  6.     d = d[: k + len(s)] + byte([0x01 , 0x00]) + d[k + len(s) + 2 :]
  7.     k = d . find(s , k + len(s) + 2)
  8. with open(fn , 'wb') as fp:  # 谨慎操作,最好先备份原始文件。
  9.     fp . write(d)            # 谨慎操作,最好先备份原始文件。
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-25 16:25:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 05:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表