Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.10.2013, 13:14

Binäre Dateien

Hey,

ich hab ein paar fragen zu binären Dateien, und zwar:

Ist es möglich eine binäre Datei sinnvoll zu lesen & zu verwerten
ohne die Struktur zu kennen? Bzw. ist es möglich die Strukturen zu entschlüsseln?

Falls ja, wie schwer ist so was und wie geht man an so etwas ran?

Wie erkennt man z.B dass das 3. Byte in einer binären Datei einem die Anzahl der Tannenbäume in der Region X (wahlloses Beispiel)
verrät oder ähnliches. Geht das nur mit dem wissen über die Struktur der jeweiligen Datei?

Könnte man sagen, dass binäre Dateien die einen gewissen Grad an Komplexität aufweisen sicher vor
Fremdzugriffen sind?

Ich frag mich nämlich wie z.B in MMORPG`s Modelle etc. vor Fremdzugriffen geschützt werden, man
könnte ja schließlich das ganze Spiel umdesignen, Modelle vergrößern um Vorteile zu erhalten oder Maps
manipulieren um an bestimmte Sachen unerlaubt ranzukommen. Wie schützen sich da die großen Online Spiele vor?
Werden da überhaupt die Level Modelle etc. dem Clienten überliefert oder gibt es da andere Techniken, wie läuft das ab?

Momentan glaub ich das die Texturen beim Clienten gespeichert werden und die Modelldateien erst beim spielen
von den Servern dauernd wieder runtergeladen werden. Allerdings klingt das für mich irgendwie absurd.
Oder werden die Modelldateien binär abgespeichert und eventuell sogar zusätzlich verschlüsselt?

Sorry, für die vielen Fragen, aber mich interessiert diese Thematik momentan brennend heiß.
Ich wäre dankbar, wenn jemand etwas Zeit aufopfern könnte um es mir etwas zu erklären.

Vielen Dank im voraus.

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

2

05.10.2013, 14:02

Das klingt nicht nur absurd, das ist es auch ;)

Natürlich liegen die Model-Daten beim Client, allerdings nicht im 3ds-Format oder ähnlichem, sondern meist binär in einem für das Spiel bzw. die Engine spezifizierten Format.

Dass die Daten unverändert bleiben, lässt sich ganz einfach mit einem Hashwert (oder auch Checksum) realisieren. Der lässt sich aus der jeweiligen Datei berechnen und sobald die Datei verändert wird, ist der Hashwert anders, wodurch erkannt werden kann, dass die Datei verändert wurde.

Und zur ersten Frage ist zu sagen, dass es eigentlich unmöglich ist, ohne Kenntnis über die Spezifikation der Binärdatei etwas über ihren Inhalt heraus zu finden. Meist kann man noch den Header lesen, da dieser in ASCII vor liegt, aber die reinen Daten sind dann einfach nur noch Nullen und Einsen. Du hast keine Chance zu erkennen, wie du die Daten zu interpretieren hast. Es scheitert ja schon daran, dass vollkommen unterschiedliche Sachen raus kommen, wenn du binäre Daten als Zeichen, Integer oder Float auswertest. Zudem weißt du nicht, wie viele Bits du zum jeweiligen Wert zuordnen musst.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

05.10.2013, 14:43

Man kann Binärdateien natürlich auch mit einem Hex Editor öffnen und selbst gucken. Wenn man irgendwelche Muster entdeckt kann man darüber möglicherweise auf Informationen schließen. Aber dafür benötigt man natürlich schon irgendwo Hintergrundwissen. Auch wenn es nur ist, wie bestimmte Dateiformate aufgebaut sind um sie möglicherweise wieder zu erkennen. Das mit dem Modellen ist so eine Sache. Spätestens wenn das Modell in den speicher geladen wird liegt es normal nicht verschlüsselt vor. Hier könnte ich jetzt die Daten anpassen ohne die Verschlüsselung in der Datei auf der Festplatte zu beachten. Bei einem MMO dürfen die Modelle schon auf dem Client gespeichert sein. Normal bekommt der Server hier eine übergeordnete Rolle. Der Server legt die Regeln fest, egal was der Client möchte. Soll heißen, egal was der Client vorgibt, der Server überprüft das ganze. Passt du beim Client das Kollisionsmodell an um durch Wände gehen zu können, so verhindert dies der Server. Dieser überprüft deine Bewegungen und passt diese gegebenenfalls wieder an. Natürlich kann man am Client immer noch einiges anstellen. So kann man zum Beispiel die Ausgabe am Client anpassen. Warnsignale bei nahen Gegnern ausgeben zum Beispiel. Ich kann halt gucken welche Informationen mit beim Client zur Verfügung stehen und was ich daraus machen kann. Hier kann man natürlich auch wieder gucken was man wie verhindern kann, aber normal reicht es nicht aus Modelldaten anzupassen um bei einem MMO zu cheaten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

06.10.2013, 15:26

Ein Beispiel, dass es schwer, aber möglich ist, die Struktur einer Binärdatei zu erkennen, ist das 3ds Format. Das 3ds Format wurde in Chunks aufgesplittet, d.h. es gab einen großen Chunk, dann einen der die Daten an sich enthielt, wiederum einen, der Kameraeinstellungen enthielt, und, und, und. Nun hat man sich mehrere 3ds Dateien angesehen, und festgestellt, dass z.B. 4D4D immer ganz am Anfang auftaucht. Dann nahm man an es könnte eine Art "Magic-Number sein, was sich im Nachhinein auch als richtig herausstellte. Dann fand man mehr und mehr Gemeinsamkeiten und musste letztendlich nur noch das Format der Vertex-Daten bestimmen. Dazu können man einen einfachen Würfel analysieren. Dieses Beispiel soll zeigen, dass es zwar möglich ist, Binärdateien zu lesen, aber dass es mit seeeehr viel Aufwand verbunden ist, sofern man nicht genau über das Format Bescheid weiß.

Was das nun bedeutet? Nun, deine Daten sind generell nie wirklich sicher, aber du kannst, wie Sp3iky schon sagte, deine Daten überprüfen, ob denn alles so ist, wie es sein soll. Demnach kannst du dann entscheiden, ob du diese Daten zulässt oder nicht. Wobei anzumerken ist, dass auch die ursprünglichen Hashcodes wieder irgendwo gespeichert sein müssen, und wenn du diese nicht ausgerechnet auf dem Server speicherst, kann ein Hacker auch diese verändern.

Liebe Grüße,
~ EuadeLuxe ~

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

06.10.2013, 16:03

Ich ich bisher gesehen habe war, dass die Files mit einer Signatur versehen wurden und mittels public Key auf Korrektheit geprüft werden. Natürlich kann man den public Key patchen, die Files mit einem anderen private Key neu verschlüsseln und so beliebig manipulieren. Aber das ist schon sehr aufwendig.
Bei MMORPGs gibt's weil dies möglich ist deshalb sogar sehr oft Mods für Texturen oder Modelle.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

07.10.2013, 17:11

Vielen Dank für eure Hilfe, jetzt ist mir einiges viel klarer geworden. :)
Ich werde mich mal als nächstes mit Checksums beschäftigen und danach mal probieren kleine fremde
binär Dateien zu analysieren und die Struktur zu entschlüsseln. Ich finde das ganze nämlich ziemlich spannend. :)

Danke nochmal! :thumbsup:

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

07.10.2013, 20:26

Spannend ist es allemal.
Für die meisten Dateiformate findet man aber schon Spezifikationen im Internet.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

8

08.10.2013, 17:35

Interessant, dass bisher niemand den Begriff "Reverse Engineering" in den Raum warf... =/
Ein paar mögliche Vorgehensweisen wurden ja bereits genannt. Wichtig zu wissen ist aber immer: Kann man selbst entsprechende Daten erzeugen? (bspw. wenn man über den Editor verfügt) Ist das Ergebnis zu jeder vorhandenen Beispieldatei bekannt? Wie viele Beispiele sind vorhanden?
Grundsätzlich ist es am Besten, wenn man sich selbst entsprechende, zu analysierende Dateien erzeugen kann, da man dann beliebig viele besitzt und zu jeder grundsätzlich weiß, was enthalten ist.
Empfehlenswert sind grundsätzlich aber auch Hintergrundinformationen über übliche Formate, da, so wie ich mitbekommen habe, für propritäre Formate teilweise dennoch gebräuchliche Unterformate (3D-Modelle und deren Texturen) verwendet werden könnten.

Ein großes Problem, das bereits angesprochen wurde, ist die Verschlüsselung des Inhalts. Wenn eine solche vorliegt, dann wird es schon um einiges schwieriger. In einem solchen Fall muss man wohl am ehesten die ausführbaren Dateien der Software analysieren, was sehr viel Wissen und Erfahrung bedarf, aber dennoch nicht von Erfolg gekrönt sein muss. Im einfachsten Fall wird ein Verschlüsselungsverfahren verwendet, welches relativ gebräuchlich ist, wodurch man dieses nur identifizieren und den passenden Schlüssel finden müsste.


Interessant ist es aber auch von Leuten zu hören, die Dateiformate Reverse Engineeren dürfen, weil die Formate sehr schlecht oder gar nicht dokumentiert wurden... ^^


@BlueCobold:
Ich weiß ja nicht warum, aber bisher hatte ich bei Verschlüsselung von Dateiinhalten eher an symmetrische Verschlüsselungsverfahren gedacht... egal... :whistling:
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

09.10.2013, 08:11

Man kann symmetrische verwenden, muss man aber nicht. :) Der Vorteil bei asymmetrischen ist eben, dass du die ganze Executable cracken musst, um den public Key auszutauschen und sonst den private Key bräuchtest um Änderungen zu machen. Oft reicht bei Dateien, die man nur lesen muss, wie gesagt auch eine Signatur mit der man den Inhalt verifiziert.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

09.10.2013, 16:05

Mhhh... bei dem Stichwort "Reverse Engineering" hab ich dann doch noch ein paar Fragen parat, speziell was MMO Spiele angeht, und zwar:

Könnte man nicht die Prüfsumme in der ausführbaren Datei zu seinem "Vorteil" über
einen Hexeditor anpassen und somit eine veränderte binäre Datei durch mogeln?

Da gibt es dann ja eigentlich nur noch die Option die Prüfsummen der Dateien auf den Server zu verlegen
und das ganze dann Serverseitig zu überprüfen, weil so wie ich es bisher verstanden hab, die Prüfsumme sich
aus einer Komponente (Bits, Bytes, ...) * einen Faktor bildet und das Schema somit schnell geknackt werden kann.

Und bei einer Modell Datei, stelle ich mir das ganze erst recht "einfach" vor,
da jede Modell Datei irgendwo die vertices, indices, texturen etc. beinhaltet,
also immer eine gewisse Struktur hat, die man mit etwas Mühe sicher irgendwann erkannt und dann
auch bearbeiten kann. Dann müsste man ja nur noch das Schema knacken, wie die Prüfsumme generiert wird,
in der ausführbaren Datei die Prüfsumme ersetzen und fertig ist die Laube.

Oder stelle ich mir das viel zu einfach vor? :P

Und kann man wirklich ganz einfach die Modelle bearbeiten, sobald sie in den Speicher
geladen wurden? Wie muss man sich das vorstellen? Ich dachte immer die (Modell) Daten
werden in tausenden von Speicherblöcken mit verschiedensten Adressen
zusammenhanglos abgespeichert? Wie kann man denn dann speziell die
Modell Daten finden, wenn die Zahlen / Daten zusätzlich sogar konstant bleiben / sind?

Sorry, für die vielen Fragen... :P

Werbeanzeige