3

我必须读取由第三方应用程序存储在 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 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 7 8

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

谢谢

4

5 回答 5

5

尝试差分攻击。

  1. 使用描述的报告/程序从数据库中提取两个图像。
  2. 对 PNG 文件执行二进制差异。
  3. 对数据库中的源 blob 执行二进制差异。

比较 blob 格式和 PNG 格式的文件之间的差异。这应该有助于确定 blob 数据是完全不同的格式还是只是一个包装器。

还可以尝试将两个不同的图像块相互比较——看看有什么变化,什么(如果有的话)保持不变。

于 2009-09-15T22:45:15.300 回答
0

Universal Extractor可以给你一些答案。它是开源的。 http://legroom.net/software/uniextract

于 2009-09-15T01:52:48.480 回答
0

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

于 2009-09-15T02:16:49.680 回答
0

我不知道如何测试它,但 Pkware 至少曾经销售过(大概他们仍然这样做,但我很久没看过了)一种用于合并到程序中的压缩器。它旨在处理内存中的原始数据流,因此它不会在它压缩的数据上留下任何明显的签名。

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

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

我用的是老的dos-era,windows版本太贵了,没处理过。

于 2009-09-15T22:28:19.463 回答
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();
于 2009-09-15T22:58:35.217 回答