检测文件压缩

时间:2009-09-15 01:44:34

标签: delphi image blob zlib compression

我必须在Acess 2000数据库中读取第三方应用程序存储的一些数据。供应商不再提问。

一个表包含看似要压缩的图像数据 - 因为原始应用程序可以将blob字段的内容导出到xls导出文件中的嵌入式png图像。

我使用ADO和Delphi(TADOBlobStream)提取了记录的内容,将其保存到磁盘并使用十六进制编辑器打开它。

十六进制中的前100个字符如下

F8 1B 00 00 07 C0 24 27 01 40 7F 20 EC 5D 24 2D 88 5C F0 A7 49 91 4A C4 EA 85 D2 98 6A B5 79 D7 B7 2B D5 48 F8 1B 00 00 07 C0 24 27 01 40 7F 20 EC 5D 24 2D 88 5C F0 A7 49 91 4A C4 EA 85 D2 98 6A B5 79 D7 B7 2B D5 48 1A 9A C8 D3 54 E3 A3 E4 F5 29 C6 97 22 95 6A 8E 10 BD 3E 4B 0B 11 AA 6D A8 C6 87 92

有人能告诉我这是否符合常用的压缩算法。第三方应用程序似乎使用zlib编码方法,因为其bin目录中存在编码dll。但是使用zlib进行解压缩不会产生PNG。仅供参考,保存的文件大约是嵌入XLS的PNG文件大小的20%。

由于

5 个答案:

答案 0 :(得分:5)

尝试差异攻击。

  1. 使用所述的报告/程序从数据库中提取两个图像。
  2. 对PNG文件执行二进制差异。
  3. 对数据库中的源blob执行二进制差异。
  4. 比较blob格式和PNG格式的文件之间的差异。这应该有助于确定blob数据是完全不同的格式还是仅仅是一个包装器。

    还尝试将两个不同的图像斑点相互比较 - 看看哪些变化和什么(如果有的话)保持不变。

答案 1 :(得分:0)

Universal Extractor可以为您提供一些答案。它是开源的。 http://legroom.net/software/uniextract

答案 2 :(得分:0)

你说当你使用zlib解压缩它不是PNG时。你有没有检查过它是否有其他图像格式?也许JPEG或GIF - 甚至可能是位图?

答案 3 :(得分:0)

我不确定如何测试它,但Pkware至少用于推销市场(可能他们仍然这样做,但我没有看过多少年)一个压缩器意味着并入程序。它被设计为处理内存中的原始数据流,因此它不会在它压缩的数据上留下任何明显的签名。

我会尝试将数据流提供给他们的解压缩程序(我知道两个非常不同的版本),看看他们是否吐出了看起来更合理的东西。

他们的SDK在这里:http://www.pkware.com/software-developer-tools-margin/software-developer-kits

我使用过旧的dos版本,Windows版本太贵了,我从未处理过它。

答案 4 :(得分:0)

我很好奇,所以我决定看一看。我需要把它变成二进制形式,所以为了保存下一个人的工作,我在python中做了这个。希望它有所帮助:

#!/usr/bin/python
from zlib import decompress; 

f = open('/tmp/data', 'w+'); 
s = "";
for b in [int(x, 16) for x in ("F8 1B 00 00 07 C0 24 27 01 40 7F 20 " +
 "EC 5D 24 2D 88 5C F0 A7 49 91 4A C4 EA 85 D2 98 6A B5 79 D7 B7 2B " +
 "D5 48 F8 1B 00 00 07 C0 24 27 01 40 7F 20 EC 5D 24 2D 88 5C F0 A7 " +
 "49 91 4A C4 EA 85 D2 98 6A B5 79 D7 B7 2B D5 48 1A 9A C8 D3 54 E3 " +
 "A3 E4 F5 29 C6 97 22 95 6A 8E 10 BD 3E 4B 0B 11 AA 6D A8 C6 87 92".split(" ")]:
  s += chr(b);

s = decompress(s);
f.write(s);
f.close();