修改一個CRC_32CRC32CRC32校驗和保護文件
我不想在不顯示我自己走了多遠的情況下尋求幫助,所以這就是我到目前為止所擁有的:
感興趣的文件是一個加密/混淆的 .bin 腳本,其中包含有關某些武器統計資訊的資訊,例如。損壞或準確性。它是舊電腦遊戲的一部分。原始文件僅包含 hexvalues,我使用擴展的 ASCII 將其“轉換”為它們的 Characters。輸出根本不令人滿意,直到我發現它使用單字節 XOR 進行了混淆。由於只有 256 種不同的可能方式,我手動完成了所有這些方式,並在Key 42上取得了成功。這是解密腳本的樣子:
我製作了自己的小工具,它解密文件 hex -> ascii -> xor decrypt 並使用 hex <- ascii <- xor encrypt 保存更改。所以現在我可以操縱一些武器統計數據並將文件保存為以前的格式。
當我嘗試使用我操縱的文件啟動遊戲時,它會出現 CRC 校驗和錯誤,並且無法啟動。我知道這一點並且已經做了一些研究,使用的校驗和肯定是 CRC32,我發現,你可以通過附加 4 個字節來強製文件校驗和為任何值,但由於文件格式,它顯然不會工作:
CRC32 校驗和現在類似於未觸及的文件,但遊戲無法讀取它並且無法啟動,這就是我卡住的地方。
**那麼現在該怎麼辦呢?**從理論上講,我應該能夠通過使用高斯消除獲得相同的校驗和來進行一些更改,但我確實需要一些幫助來指出我正確的方向。第一次嘗試更改 1 個十六進制值就足夠了,看看接下來要更改什麼以獲得相同的 CRC 校驗和。從那裡我可以考慮改變東西,這在操縱武器方面是有意義的。那麼如果我將文件“16”中的第一個十六進制值更改為“17”,接下來我必須更改什麼才能取回舊的校驗和?這是正確的嘗試嗎?我對這一切都很陌生,但我還不想放棄。
此文件夾包含要在瀏覽器中顯示的原始文件 (items.bin) .txt、處理過的 2 個值和純文字腳本。原始校驗和是’ 3DD1ECB7 '
提前致謝。
CRC 的一個基本屬性是,如果您在消息中的任何位置對多項式的位表示(對於標準 CRC-32,將是 0x0104C11DB7)進行異或,則不會修改 CRC。
所以,你要嘗試的顯而易見的事情是異或那個值(和類似的,例如,上面的位反轉版本)並查看修改後的版本是否具有相同的 CRC。
一旦您驗證了 CRC 多項式(以及處理位的順序),那麼執行任意更改就相當簡單了。
也可以通過用適當的值覆蓋文件的四個連續字節(在您選擇的任何位置)來獲得任意 CRC32 。這篇論文應該有你需要的一切(特別是最後的 C 程式碼)。