十六进制文件到字符串数组?
Hex file to string array?
我有过时格式的文件,其中包含我想要提取的关键字符串和数字。如果我在十六进制编辑器中查看文件,我可以看到字符串形式的信息。如何读取此十六进制文件并使用 python?
打印出所需的字符串
这是一个小样本:
ÎFª∆3.0B International Inc.ANONYMOUS, ANONYMOUS 1269959PL 1Thu Sep 2 09:39:29 2004MMWed Aug 25 12:26:17 2004[GTV]øº—¯øÃ—¯@ˇ˝ôôôö?øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?@o◊Á@p(@[ø! @n}†@p∫!@r⁄˚Ä?@Y2.16.840.1.113662.2.12.0.3012.1093437427.1484=P¡AP beamˇˇˇˇˇˇ¸-B-21EX10718X@YAAB@Yhh¥Z@4@D¿¿@FÄ?@4@D¿$¿$@FÄ?
µÏì‡ê??????????????????????????@4@D¿4¿4@N?@ÃÃÃÃÃÕ@ÃÃÃÃÃÕ@@øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?øÒ\ƒzO§k@!€È ≠k¥@5ëÎ8QÎÖ?
µÏì‡ê
µÏì‡ê
µÏì‡ê?ˇˇˇˇ
µÏì‡ê
µÏì‡ê
µÏì‡ê@Yˇˇ¸ˇ2ÑÄ?ÁWuwWux?›]’›]’‡?˙˙Çæ†Ø§?ŸDA¯˜&ëó???ˇˇ¸ˇˇ˛I?“I$íI$í???í€?‚I$íI$í???$m?Îm∂€m∂€??? ∂ˇ@VÅüǧu¿øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?øÒ\ƒzO§k@!€È ≠k¥@5ëÎ8QÎÖ?CerroAAAÖÓ@I
µÏì‡ê@N
µÏì‡ê@
µÏì‡ê
µÏì‡ê
µÏì‡ê1¿ô`@√ʆ?¿
如果您正在寻找类似于 unix 工具 string
, you can mmap
the file and then use itertools.groupby
的东西来提取可打印范围内的连续 字节 的序列(32 到 127,假设您的字符串"legacy" 文件使用 ASCII 编码。
这里是一个可能的起点:
fname = 'wine_gecko-2.24-x86.msi'
threshold = 5
with open(fname, 'rb') as f:
for k, g in itertools.groupby(mm, lambda b: 32 <= ord(b) <= 127):
if k:
gs = b"".join(g)
if len(gs) > threshold:
print(gs)
我有过时格式的文件,其中包含我想要提取的关键字符串和数字。如果我在十六进制编辑器中查看文件,我可以看到字符串形式的信息。如何读取此十六进制文件并使用 python?
打印出所需的字符串这是一个小样本:
ÎFª∆3.0B International Inc.ANONYMOUS, ANONYMOUS 1269959PL 1Thu Sep 2 09:39:29 2004MMWed Aug 25 12:26:17 2004[GTV]øº—¯øÃ—¯@ˇ˝ôôôö?øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?@o◊Á@p(@[ø! @n}†@p∫!@r⁄˚Ä?@Y2.16.840.1.113662.2.12.0.3012.1093437427.1484=P¡AP beamˇˇˇˇˇˇ¸-B-21EX10718X@YAAB@Yhh¥Z@4@D¿¿@FÄ?@4@D¿$¿$@FÄ?
µÏì‡ê??????????????????????????@4@D¿4¿4@N?@ÃÃÃÃÃÕ@ÃÃÃÃÃÕ@@øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?øÒ\ƒzO§k@!€È ≠k¥@5ëÎ8QÎÖ?
µÏì‡ê
µÏì‡ê
µÏì‡ê?ˇˇˇˇ
µÏì‡ê
µÏì‡ê
µÏì‡ê@Yˇˇ¸ˇ2ÑÄ?ÁWuwWux?›]’›]’‡?˙˙Çæ†Ø§?ŸDA¯˜&ëó???ˇˇ¸ˇˇ˛I?“I$íI$í???í€?‚I$íI$í???$m?Îm∂€m∂€??? ∂ˇ@VÅüǧu¿øÒ\ƒzO§kø∏˜QÎÖ@5ëÎ8QÎÖ?øÒ\ƒzO§k@!€È ≠k¥@5ëÎ8QÎÖ?CerroAAAÖÓ@I
µÏì‡ê@N
µÏì‡ê@
µÏì‡ê
µÏì‡ê
µÏì‡ê1¿ô`@√ʆ?¿
如果您正在寻找类似于 unix 工具 string
, you can mmap
the file and then use itertools.groupby
的东西来提取可打印范围内的连续 字节 的序列(32 到 127,假设您的字符串"legacy" 文件使用 ASCII 编码。
这里是一个可能的起点:
fname = 'wine_gecko-2.24-x86.msi'
threshold = 5
with open(fname, 'rb') as f:
for k, g in itertools.groupby(mm, lambda b: 32 <= ord(b) <= 127):
if k:
gs = b"".join(g)
if len(gs) > threshold:
print(gs)