2016-11-07 58 views
0

我正在研究交錯兩種類型的原始字節塊的文件格式。交錯bzip2和非bzip2數據

一個塊將包含一個bzip2壓縮數據塊,其中包含一個包含通常bzip2的頭部(BZh9)。

第二個塊將包含其他感興趣的數據,其中包含一個包含不同幻數(TBD)的標題。

這兩個幻數將用於不同地尋找,識別和處理兩個數據塊類型。

我的問題是:是否有一個神奇的數字,我可以選擇第二個塊類型,這是不可能(或更好,不可能)在bzip2壓縮的字節塊內找到?

換句話說,在壓縮時,是否存在bzip2排除的特定字節,在某些統計閾值內,我可以將其用於同一文件中另一種數據類型的標頭?

一種選擇是,當我找到第二個塊類型的頭字節時,我只會嘗試在第二個塊類型中處理數據,如果處理失敗,那麼我假設我意外地在壓縮的bzip2塊。但是,我想知道是否有可能在bzip2塊中找不到字節,或者不可能找到字節。

回答

2

編號bzip2壓縮數據可以包含任何字節對,基本上所有字節都具有相同的概率。你所能做的只是將更長的一系列字節定義爲簽名,以減少該系列偶然出現在壓縮數據中的概率。但它仍然可以。

bzip2格式是自我終止的,所以如果你願意花時間解碼bzip2數據,你總能找到下一個東西在哪裏。

要回答評論中的問題,整個bzip2流必然終止在字節邊界上。最後一個字節可能有0到7位零填充。您可以從第二個流組件的開頭向後搜索以查找bzip2結束標記0x177245385090(pi的平方根的前十二位數字),它可以從特定字節中的任何位開始。它會回到80到87位。

+0

它終止於一個字節還是位邊界? bzip2流之間的終端位或字節是否一致?也許我可以從我的第二個數據集的標題字節向後讀取? –

+0

Adler,你確定bzip2塊是字節對齊的嗎?在我看來,它們不是:http://www.forensicswiki.org/wiki/Bzip2「壓縮塊是位對齊的,不會出現填充。」; http://stackoverflow.com/questions/18262703/bzip2-block-header-1aysy。 bzip2recover使用位掃描來搜索塊;不是字節:https://www.ncbi.nlm.nih.gov/IEB/ToolBox/CPP_DOC/lxr/source/src/util/compress/bzip2/bzip2recover.c(main - BLOCK_HEADER_HI,BLOCK_HEADER_LO) – osgx

+1

我的不好。我假定搜索並行解壓縮的塊模式是字節對齊的,但它們不是。我只是搜索了一個bz2文件,並發現了任意位邊界的簽名。 –