Ska HEX modifiera en komprimerad fil, behöver hjälp.

Permalänk
Medlem

Ska HEX modifiera en komprimerad fil, behöver hjälp.

Jag behöver eran hjälp sweclockers användare.
Jag ska förklara så att ni fattar vad jag försöker göra.
Jag har en MIX-fil. MIX fil är som RAR/ZIP, man kan komprimera massa filer i den. Man kan använda ett program som heter XCC Mixer för att öppna och extrahera filer från MIX filen.
Men man kan "låsa" MIX filen, genom att ändra byte 04 och 05 i något program som HEX Workshop(till vad som helst). XCC Mixer kommer att misslyckas att läsa MIX filen, men spelet läser den utan problem.
Jag vill låsa upp filen, alltså jag måste manuellt räkna hur många filer det är, skriva in de i byte 04 och 05.

Vad dessa två bytes representerar:

Citat:

Byte 04 and 05, big-endian number containing the number of files

Så här gör man:

Citat:

Oh, now I remember. The header IDs are always sorted from lowest to highest. I think it was signed though, from 80000000 (int32.min) to FFFFFFFF (-1), and then from 00000000 (zero) to 7FFFFFFF (int32.max).

The files list starts right after the mixfile size, so at byte 0x0A, and each file in the header is a block of 12 bytes, of which the first 4 are the big-endian filename ID. So basically you can just keep reading the blocks of 12 bytes, and going up until you find a value that doesn't match the ID sorting anymore, and then simply count how many you foun

Problemet är att jag inte förstår vad den här killen menar. Jag kan väldigt lite om HEX-relaterade saker.
Kan någon förklara hur jag ska göra?

----------

Här är ett exempel på en olåst mix fil som innehåller 5 filer(byte 04 och 05 är 0500, sen gör man om den till 0005 innan man conventerar till decimal, och då blir det 5):
http://www.mediafire.com/?6b89dbc8cpiooi8

Permalänk
Medlem

Okej, jag är inte helt säker utifrån den information som är given, men det låter som om du har en fil header på 10 byte i början på filen, där det bl.a. finns 2 byte som beskriver antalet filer (big-endian betyder bara att om man vill lagra hex värdet 0x1122 så kommer 0x11 lagras på byten med lägst adress, alltså den första byten, och 0x22 på den efter). Headern följs sedan av ett antal block på 12 byte styck som är en header för varje fil i arkivet. Den innehåller bl.a. 4 byte som är filens ID, och dessa är sorterade.

Så, med andra ord, vad du behöver göra är följande:
1) Hoppa fram 10 bytes i filen (om antalet filer är inkorrekt här så är headern inte av intresse)
2) Läs 4 byte (som ett heltal)
a) Kolla om värdet på de fyra byten är ett ID. Den första filen har förmodligen ID 0 eller 1, och för varje efterkommande ID så är ID(n) = ID(n-1) + 1). Han snackar om signed, men det borde inte vara något problem om du inte har mer än 32767 filer i ett arkiv.
b) Om värdet stämmer med vad som förväntas av ett ID, då är blocket giltigt
3) Hoppa 8 byte fram i filen (resten av 12-byte blocket), och upprepa #2 tills värdet inte längre stämmer. Varje fil i arkivet ska ge en upprepning.
4) Ändra den 5:e och 6:e byten (offset 04 och 05 i filen från start) så att de motsvarar antalet filer. Om du får 436 filer t.ex., ska hexkoden vara 01 B4.

Så tolkar i alla fall jag det hela.

Permalänk
Medlem

Men gud, använd sökfunktionen. Du har ju redan en två år gammal tråd om precis det här: http://www.sweclockers.com/forum/10-programmering-och-digital...

Permalänk
Hedersmedlem