tl; dr - 尝试对专有数据库文件进行逆向工程时,发现Wordpad能够自动将某些数据解码为易读的格式。我试图在python中实现该解码。现在,即使写字板伏都不可重复。尝试在Python中解压/解码专有数据文件
准备好一个脑筋急转弯?
我试图破解一些奇怪的问题。我有一个数据文件,它是科学仪器(Mettler DSC/STARe软件)程序的数据库,我试图从实验中获取样本信息。从我在文件中的挖掘中,它似乎包含明文,有关实验运行的未加密信息以及数据。它是一个.t00文件,大小超过40 MB(它基本上存储了运行的所有数据),而且我对编码知之甚少(除了它看似任意,它不是一个文本文件)。我可以在写字板中打开这个文件,并可以看到我正在查找的信息(样本名称,时间戳,实验参数),并由实验运行数据包围(如预期的那样,这看起来像很多gobbledygook,例如¶+ú@“< Ø@ DSSO @¨...)。似乎我基本上能够对内容有所了解,并且我试图复制它。
我可以用一个基本的文件处理程序将文件读入python中,并使用正则表达式来获得我想要的一些信息。 'r'和'rb'似乎没有帮助。
def textOpenLines(filename,mode='rb'):
with open(filename, mode) as content_file:
return [line for line in content_file]
我可以拿到该列表并搜索相关字符串并从中获取示例名称。但是从在写字板中查看文件,我发现样本名称列出了两次,第二次在它后面有日期戳记(例如'Dibenzoylperoxid 120 C 03.05.1994 14:24:30')。在Python中,我找不到这个字符串。我甚至找不到自己的时间戳。当我查看应该发生的行时,我会得到一堆随机字节。在记事本中打开看起来像python输出。
我怀疑这是一个编码问题。我试着以Unicode格式阅读文件,我尝试过使用片段和阅读这些文件,但我无法破解它。我很难过。
有关如何阅读此内容以便它解码正确的任何想法?写字板得到它的权利(虽然现在随后试图打开它,它看起来像记事本输出)。
谢谢!
编辑:
- 我不知道是谁改了称呼,当然它看起来像在Python /记事本中随机字节“。这主要是数据。
- 它不是一个文本文件。我很喜欢写字板开局
- 它没有损坏。 DSC仪器程序读取它就好了。它只是专有的,所以我不知道它是如何剔除的。
- 我试过使用'r','rb'和'U'标志。
- 我试过使用utf8,16和32的codecs.open,但它给UnicodeDecodeError:'utf8'编解码器无法解码位置49中的字节0xdf:无效的连续字节。我不认为它有一个BOM,因为我不认为它是人类可读的。
前32字节(f。读(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 \ x04 \ x10 \ x00 \ x00'
我不太了解物料清单,但是从阅读维基页面看,看起来不像任何有效的UTF标记。
文件,首先,当在写字板自动地解码的开始,看起来像这样: 121 22Dibenzoylperoxid 120℃1994年5月3日14点24分三十秒1 0 4096 ESTimeAI- @£®@ NOA @ 49O @ KEA @FÞò@`STH @N5A2A® “A” A-¥A¿ÝA¡zA“ÓAÿãAÐÅAäHA,œAÑÌAŸäA¤ÆAE-AFNATöAÐ|AõAº^ A(ÄAèAýqA¹AÖûAº8A¬uAK«AgÜAüAÞAo4A>ñ AFAB
的开始文件,当在记事本,Python和现在写字板中打开时,看起来像这样: (空字节x00 ...)](x00 ...)eß(x00 ...)NvN(x00)...等
我试图解码一个未知文件时做的第一件事是[hexdump](http://en.wikipedia.org/wiki/Hex_dump)...呃,实际上是_second one_,刚刚运行[文件(http://linux.die.net/man/1/file)。你尝试过吗?也许这是一个众所周知的格式“隐身”作为别的东西? – 2014-08-28 20:01:08
你确定这个文件实际上是一个文本文件吗?如果它是来自某个程序的数据库,它可能不会被认为是纯文本。 – BrenBarn 2014-08-28 20:02:16
快速谷歌搜索表明应该有一个'.h01'文件,它是人类可读的(csv我想),而'.t00'文件是一些专有格式。 – roippi 2014-08-28 20:05:06