python以python看到的格式将数据打印到stout。生的。
程序hex.py(代码来自hex.py)先前加载了一个hex.patch文件,该文件包含3项信息 1.要打开的目标文件(在本例中,tar=windows.exe文件) 2.old(要在exe中查找的数据) 3.new(exe中要替换旧数据的数据)。 旧的/新的将被写入十六进制(64000000或6400 0000)或以谁知道是什么格式UTF8 UTF16?的文本?。 我需要能够看到补丁文件'old'和'new'数据以及tar文件数据的格式与python相同(在python将其翻译给我之前),这样我就可以编写校正因子例程。 十六进制:python以python看到的格式将数据打印到stout。生的。,python,Python,程序hex.py(代码来自hex.py)先前加载了一个hex.patch文件,该文件包含3项信息 1.要打开的目标文件(在本例中,tar=windows.exe文件) 2.old(要在exe中查找的数据) 3.new(exe中要替换旧数据的数据)。 旧的/新的将被写入十六进制(64000000或6400 0000)或以谁知道是什么格式UTF8 UTF16?的文本?。 我需要能够看到补丁文件'old'和'new'数据以及tar文件数据的格式与python相同(在python将其翻译给我之前),这样
到目前为止,它正在查找正确的数据,即'old'=数据(匹配的子字符串),并正在写入文件'bus',但'bus'文件的第一行不是,十六进制已被替换为'new'十六进制,它已将'new'替换为文本值。就像您前面的问题一样,没有人知道您的实际意思“以与python相同的格式查看数据”,这就是您没有得到任何答案的原因。请给我们一个示例,说明您的程序的输入将是什么,以及您期望的输出是什么样子。您发布的代码非常糟糕,坦率地说,我不想费心去弄清楚它是做什么的。”一幅画抵得上千言万语编辑阿瑟·布里斯班。不幸的是,stackoverflow不允许我发布一个简单的10行hexedit png。这正好说明了这一点。在默认配置下使用hexedit打开windows exe程序时,左窗格显示8字节行,右窗格显示与文本相同的数据。问题:0x00和0x20在右侧窗格中显示相同。因此,有些实例将搜索字符串设置为要搜索的十六进制字符串,有些实例将搜索字符串设置为要搜索的文本字符串。看起来您仍在将编码为ASCII十六进制字符串的数据写入文件,而不是调用
unhexlify()
将其更改为由这些十六进制字符串表示的二进制数据。
modcwd = os.getcwd() #assign var to modman dir
patch = 'hex.patch' #hardcode patch to var
patlst = [line.strip() for line in open(patch,'rb',1)] #Read Patch start
tar = patlst[patlst.index('TAR:')+1];old = patlst[patlst.index('OLD:')+1];new = patlst[ pat.index('NEW:')+1]
#start sub to determine if data hex or alpha
a = old [:8]
count = lambda l1, l2: len(list(filter(lambda c: c in l2, l1)))
a_chars = count(a, string.ascii_letters)
a_digits = count(a, string.digits)
if (a_chars/a_digits) > .45 : alphex = 'a'
else: alphex = 'h'
if alphex == 'h' : old = ''.join(old.split()); new = ''.join(new.split())
oldlc = [o.lower() for o in old];old = ''.join(oldlc)
newlc = [n.lower() for n in new];new = ''.join(newlc)
#load open exe file
pircwd = os.chdir('..'); pircwd = os.getcwd()
fotar = open(tar,'rb')
data = fotar.read(160)
Hdata = (binascii.hexlify(data))
bus = re.sub(old,new,Hdata)
fobus = open ('newhex','wb')
fobus.write(bus)
fobus.close()
fotar.close()
The complete hex.patch :
TAR:
Hex!.exe
OLD:
2068 6572 652C 2073 7765 6574 6965 2E0A
NEW:
2068 6572 652C 2073 6578 792E 2E2E 2E0A
EOF: