试图确定这个数据库文件是否压缩了数据

本文关键字:是否 文件 压缩 数据 数据库 | 更新日期: 2023-09-27 18:11:07

我不确定这个板是否适合这个问题,但我真的找不到一个更好的地方,所以让我提前道歉。

我试图读取第三方数据库的互操作性的目的,我有一个非常困难的时间与一个特定的表。该表有两列:blobSize和blob。Blob的大小是一个整数,Blob是一个字节数组。

我猜这个字段是基于两个假设被压缩的:

1) blobsize不对应于blob字段的实际大小,例如,我将在帖子末尾发布的blob有294字节,而blobsize通知的大小为2560。

2) blob从0x50 0x4B 0x01 0x02 (p K 12)开始,这与zip文件(https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html#datadescriptor)的中心目录头非常相似。但是,zip文件的压缩数据位于文件的开头,中心目录位于文件的末尾。blob以类似于zip格式的中央目录开始,然后包含大量数据,这是相反的。

我尝试用SevenZipSharp和XCeed Zip库解压缩数据,但没有成功。由于该数据是在应用程序中生成的(而不是压缩文件),因此在blob中不会有任何关于文件名、大小、修改日期等信息,并且这些库期望数据来自文件。

我还试图在字节中找到中央目录的每个元素,它们似乎遵循zip文件格式中指定的内容。在中央目录部分中出现的一个特殊信息是压缩方法,在这些数据库字段中应该是'0x09 0x00',应该增强deflate (deflate64)。

也许我不知道如何用库解压缩这些数据,也许它们甚至不是一个压缩字段。也许在压缩数据或zip文件方面更有经验的人可以告诉我正确的方法。

该数据应该包含一些数据库元素的几何信息。我也不认为这是一个加密的字段,因为数据库中的所有其他数据都是二进制格式的,但是打开了,我设法读取了它们。这是唯一一个让我头疼的领域。

作为示例,下面是一行的内容:

  • blobSize: 2560

  • blob:

string hexa = "504B01021500150004000900C0480E470000C048FFFFFFFF000000000000000000000000FFFF0000000000000000BB705EF0C1C28D520F19D0801D0333C3BFFF9C0C6C48E28C4036088381000303139001E2FFFBFFFF3F44908101C81C550D007F81B1058A3F181E550D883C2A445610433E1096302830B832E401E922864A5856268A16636085E77978D9804367C164959D9DD72E303283E4A18A5D80F6BA31C433043384300401D98E0CBE3874631716636062440E06ECAA30456F610A912D428EFD645B86452325F683A201548E83E20454068CB6070037D552A6591CB3F7E3A0EDA1E2705A80C119585EE4321400C962864C608991CAE00EC4203103206460C06112CC06B849309365817AF0800FF6782491A43ED82FE3021B09564FA82842D238B29900";
byte[] bytes = Enumerable.Range(0, hexa.Length)
                 .Where(x => x % 2 == 0)
                 .Select(x => Convert.ToByte(hexa.Substring(x, 2), 16))
                 .ToArray();

试图确定这个数据库文件是否压缩了数据

但是zip文件的压缩数据在文件的开头,中心目录在文件的末尾。

这是真的,但是从您链接的页面来看,每个zip文件头都以字母"PK"或0x50 0x4B开头。这表明它至少看起来像一个zip文件,您可以尝试这样读取它。

参见解压缩内存流(包含zip文件)并获取示例文件。