【发布时间】:2014-10-22 19:09:30
【问题描述】:
tl;dr - 在尝试对专有数据库文件进行逆向工程时,我发现写字板能够自动将一些数据解码为清晰的格式。我正在尝试在 python 中实现该解码。现在,即使是写字板巫毒也无法重复。
准备好脑筋急转弯了吗?
我正在尝试解决一个奇怪的问题。我有一个数据文件,它是科学仪器(Mettler DSC / STARe 软件)程序的数据库,我正在尝试从实验中获取样本信息。根据我在文件中的挖掘,它似乎包含有关运行实验的纯文本、未加密信息以及数据。这是一个 .t00 文件,大小超过 40 mb(它基本上存储了运行的所有数据),而且我对编码知之甚少(除了它看起来很随意。它不应该是一个文本文件)。我可以在写字板中打开这个文件,可以看到我正在寻找的信息(样品名称、时间戳、实验参数),周围是实验运行数据(正如预期的那样,这看起来像很多 gobbledygook,例如¶+ú@”‹ ø@ðßö@¨...)。看起来我基本上很幸运能够理解内容,我正在尝试复制它。
我可以使用基本文件处理程序将文件读入 python 并使用正则表达式来获取我想要的一些信息。 'r' vs 'rb' 似乎没有帮助。
def textOpenLines(filename,mode='rb'):
with open(filename, mode) as content_file:
return [line for line in content_file]
我可以获取该列表并在其中搜索相关字符串并从中获取示例名称。但是通过查看写字板中的文件,我发现样本名称被列出了两次,第二次它后面有日期戳(例如“二苯甲酰过氧化物 120 C 03.05.1994 14:24:30”)。在 python 中,我找不到这个字符串。我什至找不到时间戳本身。当我查看它应该发生的行时,我得到一堆随机字节。在记事本中打开看起来像 python 输出。
我怀疑这是编码问题。我已经尝试以 Unicode 格式读取文件,我尝试使用 sn-ps 行并将其读取,但我无法破解它。我难住了。
关于如何读入它以便正确解码的任何想法?写字板做对了(尽管现在尝试打开它,它看起来像记事本输出)。
谢谢!!
编辑:
- 我不知道是谁更改了标题,但当然它“看起来像 Python/记事本中的随机字节”。主要是数据。
- 它不是一个文本文件。我有点幸运地打开了写字板
- 它没有损坏。 DSC 仪器程序可以很好地读取它。它只是专有的,所以我不知道它是如何滴答作响的。
- 我尝试过使用“r”、“rb”和“U”标志。
- 我尝试使用 utf8、16 和 32 的 codecs.open,但它给出了 UnicodeDecodeError: 'utf8' codec can't decode byte 0xdf in position 49: invalid continuation byte。我不认为它有 BOM,因为我不认为它是为了人类可读的。
-
前 32 个字节 (f.read(32)) 读取
'\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x04\x10\x00\x00'
我对 BOM 了解不多,但通过阅读 Wiki 页面,它看起来不像任何有效的 UTF 标记。
文件的开头,当第一次在写字板中自动解码时,如下所示: 121 22二苯甲酰过氧化物 120 C 03.05.1994 14:24:30 1 0 4096 ESTimeAI–@£®@nôÂ@49Õ@kÉå@FÞò@`sþ@N5A2A®"A"A—¥A¿ÝA¡zA"ÓAÿãAÐÅA䤜AÑÌAŸäA ÆAE–AFNATöAÐ|AõAº^A(ÄAèAýqA¹AÖûAº8A¬uAK«AgÜAüAÞAo4A>N AfAB
文件的开头在记事本、Python 和现在的写字板中打开时,如下所示: (空字节 x00...)](x00...)eß(x00...)NvN(x00)... 等
【问题讨论】:
-
您确定该文件实际上是一个文本文件吗?如果它是来自某个程序的数据库,它可能不会被读取为纯文本。
-
快速谷歌搜索表明应该有一个人类可读的
.h01文件(我想是csv),而.t00文件是某种专有格式。 -
如果它不是文本文件,您可能应该使用 'rb' 标志打开
-
您的文件似乎以某种方式损坏。我希望你有一个备份。