Decryption von Files
Moderator: Flashy
Decryption von Files
Fangen wir mit etwas Einfachem an
Mit den Dateien aus MercEdt welche die gesprochenen Quotes der Söldner als Text enthalten
Wählen wir Barry als Beispiel mit 000.edt
Die Datei ist in Blöcke zu je 480 Bytes zu zerlegen (je 2 Bytes stehen für einen Buchstaben)
was also in einer maximalen Textlänge von 240 Zeichen entspricht.
Haben wir einen solchen Block in Byteform vorliegen reduzieren wir alle Bytes die größer sind als dezimal 32 (bzw. 33 - da dez. 33 beim encrypten auf 34 erhöht wurde) um 1.
Wir in Deutschland haben Glück das unsere Zeichen im ASCII Code auftauchen, so ist das zweite Byte in der Regel immer 0.
Beginnend mit dem ersten Byte braucht also nur jedes zweite Byte in eine Datei kopiert zu werden, bis wir beim Ende der 480 Bytes anlangen oder auf eine Doppel 0 (00 00 im Hex Editor) treffen.
In diesem Fall schreiben wir dezimal 13 und dezimal 10 in die Datei hinterher (als char) für einen Zeilenumbruch.
Im Beispiel erhalten wir: "Hab' Gesellschaft!"
Der Rest der 480 Bytes ist Datenmüll.
Dann folgt der nächste Block mit "Es gibt Ärger!" usw...
Ich hab mir so eine Übersicht in Excel erstellt, indem ich die entstandenen txt Dateien kopiert und eingefügt habe.
Zu beachten ist, das die Doppel 0 bei langen Texten nicht aufzutauchen braucht - der Text ist dann genau 240 Zeichen lang.
Zu beobachten bei
011 069
014 084 Fox
019 081
019 084 Spider
019 099
031 084 Scully
044 017
050 069
067 069.
Wer will kann nun noch in der ExcelTabelle Links zu den entsprechenden SoundFiles erstellen ca. 75*116 = 8700 Links
Na gut etwas weniger da nicht alle Ziffernkombinationen mit Sprachfiles ausgestattet sind.
Trotzdem sollte man sich dazu entsprechendes in Visual Basic schreiben - oder man hat viel Zeit .
Viel Spaß
Snej
Mit den Dateien aus MercEdt welche die gesprochenen Quotes der Söldner als Text enthalten
Wählen wir Barry als Beispiel mit 000.edt
Die Datei ist in Blöcke zu je 480 Bytes zu zerlegen (je 2 Bytes stehen für einen Buchstaben)
was also in einer maximalen Textlänge von 240 Zeichen entspricht.
Haben wir einen solchen Block in Byteform vorliegen reduzieren wir alle Bytes die größer sind als dezimal 32 (bzw. 33 - da dez. 33 beim encrypten auf 34 erhöht wurde) um 1.
Wir in Deutschland haben Glück das unsere Zeichen im ASCII Code auftauchen, so ist das zweite Byte in der Regel immer 0.
Beginnend mit dem ersten Byte braucht also nur jedes zweite Byte in eine Datei kopiert zu werden, bis wir beim Ende der 480 Bytes anlangen oder auf eine Doppel 0 (00 00 im Hex Editor) treffen.
In diesem Fall schreiben wir dezimal 13 und dezimal 10 in die Datei hinterher (als char) für einen Zeilenumbruch.
Im Beispiel erhalten wir: "Hab' Gesellschaft!"
Der Rest der 480 Bytes ist Datenmüll.
Dann folgt der nächste Block mit "Es gibt Ärger!" usw...
Ich hab mir so eine Übersicht in Excel erstellt, indem ich die entstandenen txt Dateien kopiert und eingefügt habe.
Zu beachten ist, das die Doppel 0 bei langen Texten nicht aufzutauchen braucht - der Text ist dann genau 240 Zeichen lang.
Zu beobachten bei
011 069
014 084 Fox
019 081
019 084 Spider
019 099
031 084 Scully
044 017
050 069
067 069.
Wer will kann nun noch in der ExcelTabelle Links zu den entsprechenden SoundFiles erstellen ca. 75*116 = 8700 Links
Na gut etwas weniger da nicht alle Ziffernkombinationen mit Sprachfiles ausgestattet sind.
Trotzdem sollte man sich dazu entsprechendes in Visual Basic schreiben - oder man hat viel Zeit .
Viel Spaß
Snej
Auf den ersten folgt der zweite Streich: prof.dat
Achtung: die Zuordnung des Structs MercProfileStruct zu den einzelnen Bytes ist noch nicht eindeutig geklärt (siehe auch den Thread MercProfileStruct im SOURCE FORUM).
Das Profil eines Söldners ist abgespeichert 716 Bytes groß.
Es gibt 170 Profile. (Das erste ist wieder das von Barry)
Decryption findet in diesen Blöcken zu 716 Bytes statt. (Also nicht das ganze File auf einmal)
Man braucht folgendes Array:
const int ROTATION_ARRAY_SIZE = 46;
unsigned char ubRotationArray[ROTATION_ARRAY_SIZE] =
{ 132, 235, 125, 99, 15, 220, 140, 89, 205, 132,
254, 144, 217, 78, 156, 58, 215, 76, 163, 187,
55, 49, 65, 48, 156, 140, 201, 68, 184, 13,
45, 69, 102, 185, 122, 225, 23, 250, 160, 220,
114, 240, 64, 175, 57, 233 };
Das Array kann man nun auf 716 Bytes vergrößern, indem man es immer wieder anneinander hängt oder einfacher wenn das Ende des Arrays erreicht ist das Array wieder von vorn durchlaufen.
Das erste Profil fängt mit
198 177 143 242 115 79... 4D A6 EC 70 8E 1E 4C 9A A4 DE
(das sind der Einfachheit halber dezimale Werte) an.
Wir "denken" uns das das letzte Zeichen vor dem Beginn 0 war.
Jetzt kommt die Decryption:
198_177_143_242_115__79...
132_235_125__99__15_220...
__0_198_177_143_242_115...
Die unteren beiden Zeilen werden von der oberen abgezogen. Danach wird solange 256 addiert bis wir einen Wert zwischen 0 und 255 haben. Was folgendes ergibt
_66___0__97___0_114___0...
also die dezimalen ASCII Codes der ersten 3 Buchstaben von Barrys Namen.
Have Fun
Snej
Edit: Die Encryption ist zwar der umgekehrte Prozeß allerdings ist bei Änderungen die eingebaute Checksumme zu beachten.
Achtung: die Zuordnung des Structs MercProfileStruct zu den einzelnen Bytes ist noch nicht eindeutig geklärt (siehe auch den Thread MercProfileStruct im SOURCE FORUM).
Das Profil eines Söldners ist abgespeichert 716 Bytes groß.
Es gibt 170 Profile. (Das erste ist wieder das von Barry)
Decryption findet in diesen Blöcken zu 716 Bytes statt. (Also nicht das ganze File auf einmal)
Man braucht folgendes Array:
const int ROTATION_ARRAY_SIZE = 46;
unsigned char ubRotationArray[ROTATION_ARRAY_SIZE] =
{ 132, 235, 125, 99, 15, 220, 140, 89, 205, 132,
254, 144, 217, 78, 156, 58, 215, 76, 163, 187,
55, 49, 65, 48, 156, 140, 201, 68, 184, 13,
45, 69, 102, 185, 122, 225, 23, 250, 160, 220,
114, 240, 64, 175, 57, 233 };
Das Array kann man nun auf 716 Bytes vergrößern, indem man es immer wieder anneinander hängt oder einfacher wenn das Ende des Arrays erreicht ist das Array wieder von vorn durchlaufen.
Das erste Profil fängt mit
198 177 143 242 115 79... 4D A6 EC 70 8E 1E 4C 9A A4 DE
(das sind der Einfachheit halber dezimale Werte) an.
Wir "denken" uns das das letzte Zeichen vor dem Beginn 0 war.
Jetzt kommt die Decryption:
198_177_143_242_115__79...
132_235_125__99__15_220...
__0_198_177_143_242_115...
Die unteren beiden Zeilen werden von der oberen abgezogen. Danach wird solange 256 addiert bis wir einen Wert zwischen 0 und 255 haben. Was folgendes ergibt
_66___0__97___0_114___0...
also die dezimalen ASCII Codes der ersten 3 Buchstaben von Barrys Namen.
Have Fun
Snej
Edit: Die Encryption ist zwar der umgekehrte Prozeß allerdings ist bei Änderungen die eingebaute Checksumme zu beachten.
Oops, da hab ich doch glatt beim Beitrag verfassen die 0 vor der 57 gelöscht.
Die bedeutete nämlich, das die Zahl als Oktalzahl zu lesen ist: 5*8+7=47.
Also bitte die vorletzte Zahl (57) im Array durch 47 ersetzen.
Auch haben sich jetzt die überschüssigen Bytes gefunden. Wenn man die Bytes von 0 bis 715 durchnumeriert so sind dies Bytes 241, 270, 271, 309, 407, 415, 539, 551 und 573.
Die bedeutete nämlich, das die Zahl als Oktalzahl zu lesen ist: 5*8+7=47.
Also bitte die vorletzte Zahl (57) im Array durch 47 ersetzen.
Auch haben sich jetzt die überschüssigen Bytes gefunden. Wenn man die Bytes von 0 bis 715 durchnumeriert so sind dies Bytes 241, 270, 271, 309, 407, 415, 539, 551 und 573.
-
- Alpha-Squad
- Beiträge: 1593
- Registriert: 01 Feb 2002, 19:22
- Kontaktdaten:
-
- Alpha-Squad
- Beiträge: 1593
- Registriert: 01 Feb 2002, 19:22
- Kontaktdaten: