[Verständnisfrage]Decrypten von Gamefiles

04/21/2010 19:23 Xelvair#1
Hiho E*Pvp

Ich beschäftige mich seit geraumer Zeit im Moddingbereich (ausserhalb von elitepvpers) und habe schon öfters sogenannte File-Extractors benutzt, welche aus gecrypteten dateien die originale wiederherstellen. Ich habe jetzt schon ein wenig erfahrung in C++, und schon meine eigenen Versuche mit einfacher Text En bzw. Decryptung gestartet.

Was mir eben spontan einfiel, war dass ich jeweils einen Char in einen Int caste, den modifiziere und wieder in einen Char caste, das dann mit allen Chars wiederhole und meine Gecryptete Datei dann bekomme, jetzt meine Frage.

Mir hat ein Freund, der selber solche Programme schreibt, mal irgendwas von Headern zugeflüstert... ich hab auch eine gewisse Vorstellung, wie diese in einem File aussehen, aber wie sollen diese mir beim extrahieren bzw. decrypten helfen?

Zweite Frage wäre, dass wenn ich mit meiner Theorie richtig liege, ob die Dateien einfach nur so mit einem festen Wert verschlüsselt werden (z.b. alle Chars+34) oder per algorithmen...

So, das wars erstmal und Ich hoffe auf positive und aufschlussreiche Antworten :)

mfG, Xel~
04/21/2010 20:39 MrSm!th#2
Quote:
Originally Posted by Xelvair View Post
Hiho E*Pvp

Ich beschäftige mich seit geraumer Zeit im Moddingbereich (ausserhalb von elitepvpers) und habe schon öfters sogenannte File-Extractors benutzt, welche aus gecrypteten dateien die originale wiederherstellen. Ich habe jetzt schon ein wenig erfahrung in C++, und schon meine eigenen Versuche mit einfacher Text En bzw. Decryptung gestartet.

Was mir eben spontan einfiel, war dass ich jeweils einen Char in einen Int caste, den modifiziere und wieder in einen Char caste, das dann mit allen Chars wiederhole und meine Gecryptete Datei dann bekomme, jetzt meine Frage.

Mir hat ein Freund, der selber solche Programme schreibt, mal irgendwas von Headern zugeflüstert... ich hab auch eine gewisse Vorstellung, wie diese in einem File aussehen, aber wie sollen diese mir beim extrahieren bzw. decrypten helfen?

Zweite Frage wäre, dass wenn ich mit meiner Theorie richtig liege, ob die Dateien einfach nur so mit einem festen Wert verschlüsselt werden (z.b. alle Chars+34) oder per algorithmen...

So, das wars erstmal und Ich hoffe auf positive und aufschlussreiche Antworten :)

mfG, Xel~
Kleine Antwort am Start, um mal etwas zu klären: Alle Chars+34 ist auch ein Algorithmus ;)

So nun kommen wir zur 1. Frage:

Es kommt drauf an, was er genau mit Headern meint.
Es gibt einerseits Header von bekannten Krypto-Librarys, sodass er meinen könnte, dass du dir so eine für das Ver-/Entschlüsseln nimmst, was meist deutlich sicherer als eigenen Algorithmen ist.
Oder er meint File-Header.
Die haben was mit dem strukturellen und logischen Aufbau deines Archivformats zutun.
Normalerweise wird ja ein Archiv verwendet; also überlegst du, wie dieses Archiv aufgebaut sein soll:
-Wie sollen die Namen der originalen Dateien gespeichert werden?
-Wo genau?
-Wie soll die File-Entry-Table aufgebaut sein? (Tabelle, in der die Daten aller Dateien wie Größe, Name, Position im Archiv etc. stehen)
-Soll diese Tabelle mit verschlüsselt werden? (zu empfehlen)
-Benutzt du einen festen Key, ein festes Passwort oder einen Hash von irgendwas?

Der File Header steht normalerweise als erstes im Format; da siehst du welche Version des Formats es ist und andere Daten die du eben einbauen möchtest, wenn du dein eigenes Format aufbaust.
Normalerweise wird in Formaten von Verschlüsselungsprogrammen ein Hash vom Passwort im Format gespeichert (niemals das Passwort so!), um zu überprüfen, ob das eingegebene richtig ist (man kann das auch lassen, aber so wird man bei einem Tippfehler nicht benachrichtigt und bekommt eine beschädigte Datei beim entpacken).

2. Frage:

Nein, werden sie nicht; zumindest nicht wenn es sicher sein soll.
Sonst würde jeder ganz einfach die Dateien entschlüsseln können.
Normalerweise wird zwar ein fester Key genommen, aber der wird nicht nur einfach addiert, sondern kompliziert mit den Daten verknüpft.
Manche Programme nutzen auch dynamische Keys, ist aber nicht unbedingt notwendig, solange der originale gut im Programm versteckt ist, oder sogar, falls es ein Online Game ist, vom Server gesendet wird (lässt sich zwar immer noch finden, aber schwerer als bei einem statisch gespeicherten).

Naja und bei Verschlüsselungsprogrammen wird eben das vom User gegebene Passwort genommen.
04/21/2010 20:57 Xelvair#3
Danke für die tolle Antwort, hat mir definitiv etwas weiter geholfen...
Nehmen wir jetzt einmal an, ich würde die "mob_proto" (Clientside) des Onlinegames Metin2 decrypten wollen, wie würde ich vorgehen?

Ich habe mir sagen lassen, dass ich werte verändere, bis ich Ingame eine Veränderung bemerke, und von dieser Veränderung dann z.b. schonmal alle Werte von 0-9 herausfinden könnte, dann zu Strings weitergehen usw...
Hört sich das plausibel an?
04/21/2010 21:50 MrSm!th#4
Quote:
Originally Posted by Xelvair View Post
Danke für die tolle Antwort, hat mir definitiv etwas weiter geholfen...
Nehmen wir jetzt einmal an, ich würde die "mob_proto" (Clientside) des Onlinegames Metin2 decrypten wollen, wie würde ich vorgehen?

Ich habe mir sagen lassen, dass ich werte verändere, bis ich Ingame eine Veränderung bemerke, und von dieser Veränderung dann z.b. schonmal alle Werte von 0-9 herausfinden könnte, dann zu Strings weitergehen usw...
Hört sich das plausibel an?
Nein ganz und gar nicht.
Du musst den Client in einem Debugger wie zb. OllyDbg öffnen (bei sehr guten ASM Kenntnissen würde evtl. auch ein reiner Disassembler und statische Analyse reichen, glaub ich aber in diesem Fall eher nicht) und die Funktion finden, die die Resourcen einliest.
Davor oder in ihr werden die Resourcen ja auch decrypted.
Den Code kann man nahezu copy&pasten (solange man weiß, wie man ihn aufruft; den Algorithmus selbst muss man nicht verstehen) in ein eigenes Programm.
Den kannst du dann ja auch umkehren (dafür sollte man ihn etwas verstehen; normalerweise werden fertig Algorithmen genommen und etwas abgeändert, also könnte man suchen, wie der passende Encrypt Algorithmus aussieht und den dann abändern, wie es auf den Decrypt Algorithmus passt.
Ich glaube aber, das wäre alles etwas schwer für dich.
Naja auf jeden Fall, wenn du den Encrypt Algorithmus auch hast, kannst du die Resourcen entschlüsseln, verändern und wieder verschlüsseln.
04/21/2010 22:20 Xelvair#5
Also kann ich mit einem Debugger den Assembler-Coder der gerade durchlaufen wurde auslesen? Zu dumm dass ich kein Assembler kann >.<^^
Trotzdem Danke für die hilfe, wir sehen uns in 5 Jahren wenn ich Crysis 5 komplett decrypted hab :awesome:

btw, bist der Helfer des Monats, Danke :P
04/21/2010 23:36 MrSm!th#6
Quote:
Originally Posted by Xelvair View Post
Also kann ich mit einem Debugger den Assembler-Coder der gerade durchlaufen wurde auslesen? Zu dumm dass ich kein Assembler kann >.<^^
Trotzdem Danke für die hilfe, wir sehen uns in 5 Jahren wenn ich Crysis 5 komplett decrypted hab :awesome:

btw, bist der Helfer des Monats, Danke :P
Hm, also ich lerne das seit August letzten Jahres und bin schon recht weit gekommen *will ja jetzt auch ein bisschen bescheiden sein xD*
Wenn du dir Mühe gibst und dich viel damit befasst (da Erfahrung dabei sehr wichtig ist) dann geht das auch.
Ich lerne gerade auch was über Kryptographie, um schneller bekannte Algorithmen mit bloßem Auge zu erkennen, deshalb befasse ich mich gerade sehr damit, um Erfahrung zu sammeln.
Dann sollte ich auch schon ein paar Resourcen decrypten können.
Also 5 Jahre halte ich für definitiv übertrieben; wenn ich als 15 Jähriger das schaffen kann, kannst du das auch ;)

Und joa, ich helfe gern, wenn mein Gegenüber nicht übermäßig faul ist und nicht alles vorgekaut haben will ;)