mix不要不要加密了
背景知識(shí):TS / RA2 Mix文件由標(biāo)題,索引和主體組成。標(biāo)頭包含有關(guān)MIX的基本信息(它具有校驗(yàn)和,是否已加密,其中有多少文件,有多大)。索引包括混合中每個(gè)文件的大小,位置和校驗(yàn)和,正文包含實(shí)際文件。那里有兩個(gè)主要的“ MIX保護(hù)器”或“ Leechkiller”程序,它們會(huì)以某種方式處理頭文件(特別是內(nèi)部文件的大?。?,以使RA2能夠正確讀取混合,但XCC Mixer會(huì)拒絕打開它。它們都在基本相同的原理下運(yùn)行。首先,有必要了解標(biāo)題的布局。前四個(gè)字節(jié)是加密和校驗(yàn)和標(biāo)志。如果MIX具有加密的標(biāo)頭(請(qǐng)不要與“ protected”混淆:“ encrypted”是指Westwood自己使用的Blowfish加密; XCC對(duì)此沒(méi)有問(wèn)題)標(biāo)志是00 02 0000。如果MIX有一個(gè)校驗(yàn)和,標(biāo)志是00 01 0000。當(dāng)前的MIX Protector程序都不能在帶有加密頭的文件上工作,(盡管可以稍加修改以使其變通),所以我現(xiàn)在就不討論它了。 。在未加密的MIX(即您將需要破壞的所有MIX)上,這些標(biāo)志帶有“標(biāo)頭”。標(biāo)頭由一個(gè)等于MIX中文件數(shù)量的16位整數(shù)和一個(gè)等于MIX主體大?。∕IX文件的大小減去標(biāo)頭和索引的大?。┙M成的32位整數(shù))。這些數(shù)字是“ big-endian”,這意味著字節(jié)向后排列(但每個(gè)字節(jié)中的位正常排列)。(這是因?yàn)镮ntel x86體系結(jié)構(gòu)是半延遲的)。因此,如果字節(jié)04和05(文件數(shù))為0xB801,則需要將其重新排列為0x01B8以獲取實(shí)際的文件數(shù)。(十進(jìn)制的0x01B8為440,如有必要,您可以使用Google計(jì)算器進(jìn)行轉(zhuǎn)換。)旁注:這意味著在RA2引擎下,大于2 GB或包含32,765個(gè)以上文件的MIX文件是不可能的。因此,到目前為止,這是一張大圖:MIX的前幾個(gè)字節(jié)是字節(jié)00:始終為00字節(jié)01:如果校驗(yàn)和為01,則為02,如果加密則為02,否則為00。受保護(hù)的混合物應(yīng)始終為00。字節(jié)02:始終為00(VK的Mix Protector將用垃圾覆蓋它)字節(jié)03:始終為00(VK的Mix Protector將用垃圾覆蓋它)字節(jié)04-05:包含文件數(shù)的大端數(shù)字。字節(jié)06-09:包含MIX主體大小的大端數(shù)字。(LeechKiller和VK的Mix Protector都將用垃圾覆蓋字節(jié)06和07)。然后,您將擁有索引(每個(gè)索引條目12個(gè)字節(jié)),然后是正文。所有“ MIX保護(hù)器”所做的就是在機(jī)身尺寸上增加一些數(shù)字。XCC混合器在讀取MIX時(shí)首先檢查主體大小,如果標(biāo)頭中的主體大小大于實(shí)際主體大小,則拒絕MIX。(如果我擁有XCC源代碼,則可以輕松解決此問(wèn)題,盡管它托管在sourceforge上,但我似乎無(wú)法在XCC網(wǎng)站上找到它。Strange。)這樣做是為了避免訪問(wèn)未分配的內(nèi)存并崩潰。細(xì)分錯(cuò)誤。另一方面,紅色警報(bào)2顯然只是忽略標(biāo)頭中的正文大小,而完全對(duì)索引中的信息進(jìn)行操作。從理論上講。我想“受保護(hù)的”混合可能會(huì)導(dǎo)致RA2超出范圍訪問(wèn)內(nèi)存并崩潰,但是我還沒(méi)有看到這種情況的發(fā)生。無(wú)論如何,VK的Mix Protector顯然只是在字節(jié)06上加上2,從而導(dǎo)致XCCU失敗,但易于修復(fù)MIX文件。XRML LeechKiller會(huì)在06-07字節(jié)中添加一個(gè)隨機(jī)的16位值,這會(huì)增加難度。要修復(fù)“受保護(hù)的” MIX,您需要重新計(jì)算主體大小,并使用十六進(jìn)制編輯器將其寫入字節(jié)06-09中。要計(jì)算主體大小,請(qǐng)通過(guò)右鍵單擊文件并單擊“屬性”來(lái)獲取實(shí)際文件大小。Windows應(yīng)為您提供大?。簄 MB(x字節(jié))。(忽略“磁盤大小”)。取字節(jié)數(shù)并應(yīng)用以下公式:BodySize = FileSiz((NumberOfFilesInMix * 12)+ 10)您會(huì)看到,每個(gè)文件的索引都有十二個(gè)字節(jié),標(biāo)頭有四個(gè)字節(jié)用于標(biāo)志,兩個(gè)字節(jié)用于標(biāo)記文件和四個(gè)字節(jié)的正文大小。別忘了,文件的大小和數(shù)量都是big-endian格式的,必須這樣插入。簡(jiǎn)短形式的教程:1)抓住您最喜歡的十六進(jìn)制編輯器并打開受保護(hù)的混音。2)確保前四個(gè)字節(jié)(字節(jié)00-03)為0x00000000。3)讀取接下來(lái)的兩個(gè)字節(jié)(字節(jié)04-05)并顛倒順序(例如b8 01變?yōu)?1 b8)。這是文件數(shù)。將其從十六進(jìn)制轉(zhuǎn)換為十進(jìn)制。4)將文件數(shù)乘以12。然后加10。我們將此數(shù)字稱為H。5)取文件大小。我們將其稱為F。6)F-H =B。7)將B轉(zhuǎn)換為十六進(jìn)制。用零填充正面,直到長(zhǎng)度為八位十六進(jìn)制數(shù)字。以大字節(jié)序重新排列字節(jié)(例如00 94 26 7F變?yōu)?F 26 94 00)8)用此更正后的值覆蓋接下來(lái)的四個(gè)字節(jié)(字節(jié)06-09)。9)保存MIX文件并退出十六進(jìn)制編輯器。注意:這不會(huì)恢復(fù)MIX中每個(gè)文件的文件名。那些永遠(yuǎn)消失了。