.dat auslesen Inhalt unbekannt
-
wie dir ja jetzt schon klar ist haben Dateien nicht per se ein bekanntes Format - nur der Entwickler der Software welche die Datei benutzt ist sich über die Struktur und Inhalt im klaren
Es gibt aber schon Dateien mit bekanntem Format z.B. Bild,Sound,Video,etc. - eben für alle Dateiformate die irgendwo beschrieben wurden - oder jemand in Wochen/Monaten den Inhalt entschlüsselt hat (z.B. oft der Fall bei Textur/Model Extraktion bei Spielen wenn keine Editor vorliegt)
Ein Hexdump die einfachste Form der Datendarstellung - es wird einfach Byteweise (kleinste sinnvolle Einheit) jedes Bytes als Hexadezimal ausgegeben - mehr passiert da nicht, es gibt ja keine Format-Beschreibung zu der Datei, und auch nur in solchen Fällen nutzt man überhaupt ein HexDump
in einer Datei steht z.B.
ABC
sonst nix - also genau 3 Byte
1. Byte
in Hex-Darstellung: 0x41
in Dezimal-Darstellung: 65
als ASCII-Zeichen: A2. Byte
in Hex-Darstellung: 0x42
in Dezimal-Darstellung: 66
als ASCII-Zeichen: B3. Byte
in Hex-Darstellung: 0x43
in Dezimal-Darstellung: 67
als ASCII-Zeichen: Cein Hexdump davon sieht dann üblicherweise so aus
41 42 43 | ABC
oft werden nicht darstellbare oder Steuerzeichen z.B. Newline, Beep, Tab usw
als . angezeigtnoch einfacher und verständlicher geht nicht mehr - wenn dir das jetzt
immer noch unklar ist - mehr Erklärung zu Hexdumps gibt es nicht
-
Ah, ok. Also prinzipiell nutzt mir das dann auch nichts.
Wenn man also ein dat File oder andere Datei "analysieren" will, wie geht man dann weiter vor? Ich meine wenn ich das Format nicht kenne, nützt es mir ja auch nichts, wenn statt Hyroglyphen dann Hex codes stehen ?
-
dat_frage schrieb:
Ich meine wenn ich das Format nicht kenne, nützt es mir ja auch nichts, wenn statt Hyroglyphen dann Hex codes stehen ?
Richtig. Hieroglyphen sind lediglich eine andere Represäntation (vom Texteditor als Zeichen interpretiert nämlich) der selben Werte.
Da du das Format nicht kennst, weißt du nicht, welche Werte Zahlen sein sollen, welche Fließkommazahlen, welche Strings (gut, die könnte man evtl. noch erkennen). Wofür wird die Datei denn verwendet?
-
Wenn man also ein dat File oder andere Datei "analysieren" will, wie geht man dann weiter vor?
- du solltest ein erfahrener Entwickler sein damit du mit hilfe deines pratischen Wissens annahmen über mögliche Strukturen machen zu können
- du solltest dich mit Little/Big Endian auskennen
- Binär- Heaxdezimal und manchmal auch Oktaldarstellung sollte sicher sitzen
- du solltes Kodierungen von Standardformaten IEE754 floats, ints, string, Datumsformate, usw. sehr gut kennen
- du solltest einen Haufen gute Tools um dich Scharen z.B. gute Hexeditoren, Disassembler usw.
- du solltest/musst die Software welche das Dateiformat verwendet besser kennen als deine Mutter
- jede Informationsquelle nutzen
- sehr sehr viel Zeit mitbringen
- die Datei modifizieren und schauen was das Programm dazu sagt
- viele varianten der Datei besitzen um nach sich wiederholenden Patterns suchen
- manchmal muss man auch per Reverse-Engineering in das Programm rein - dann ist es wichtig Assembler und die Platform sehr gut zu verstehenund,und,und
Reverse-Engineering von Dateiformaten ist eine sehr anspruchsvolle Aufgabe - was die eigenen Kodierfähigkeiten und strukturiertes/analytisches arbeiten angeht - danach kommt dann nur noch Programm-ReverseEngineering
Ich meine wenn ich das Format nicht kenne, nützt es mir ja auch nichts, wenn statt Hyroglyphen dann Hex codes stehen ?
manche Kodierungen lassen sich einfacher in Hex- oder Binärdarstellung erahnen
-
Weiss ich nicht genau. Glaub fürs deinstallieren von einem Programm. Wie gesagt, es geht mir eher um eine Vorgehensweise im allgemeinen als um eine spezielle Datei.
-
@Gast : Danke, sehr ausführlich. Das hat mich inzeressiert.
Noch eine allgemeine Frage... Ich mach nur hobby kleine programme und hab es noch nie gebraucht : Für was für Anwendungen braucht man es im oraxisleben, eine Datei binär zu öffnen oder was binary zu schreiben? Ios_base::binary ist mir irgendwie suspekt...
-
Praxisleben sollte das heissen
-
ios_base::binary:
http://en.cppreference.com/w/cpp/io/c#Binary_and_text_modesIn kurz: In einigen Betriebssystemen (z.B. Windows) ist das Zeilenende durch \r\n dargestellt.
Wenn du eine Datei im Testmodus oeffnest und etwas daraus liest, wir \r\n "automatisch" zu \n (in deinem Programm). Du liest also einfach ein endline.Wenn du aber tatsaechlich jedes einzelne Zeichen genau lesen moechtest, ohne automatische Umwandlungen zu haben, musst du die Datei eben im Binaermodus oeffnen. Hier gibt es keine Interpretation ueber den Inhalt der Datei.
-
ich glaube dir fehlt noch sehr viel Erfahrung - wenn diese Vorhanden wäre würdes du völlig andere Fragen stellen
aber du scheinst tatsächlich google nicht wirklich zu nutzen (womit du schon mal zeigst das du schon per se nicht alle Informatsquelle nutzt - was ein grosses Manko bei Dateianalyse wäre)
http://www.iwriteiam.nl/Ha_HTCABFF.html
http://en.wikibooks.org/wiki/Reverse_Engineering/File_Formats
http://www.zachtronics.com/yoda-stories/
http://www.rumint.org/gregconti/publications/2008_VizSEC_FileVisualization_v53_final.pdfsolltest du Probleme mit Englisch haben wird es auch schwer, es gibt fast nur Infos in der Sprache
Dateiformat ReverseEngineering ist eine der Königsdisziplinen der Softwareentwicklung/Analyse - da geht man nicht einfach so ran ohne mehrjährige Erfahrung in der Softwareentwicklung - am besten mit Expertenwissen in C/C++ und Assembler
eine Datei zu analysieren kann Wochen oder Monate dauern - das ist definitiv keine Sache von Tagen - hoechstens das Format ist total trivial
-
dat_frage schrieb:
Für was für Anwendungen braucht man es im praxisleben, eine Datei binär zu öffnen oder was binary zu schreiben? Ios_base::binary ist mir irgendwie suspekt...
Gibt viele Anwendungen dafür.
Viele weitverbreitete File-Formate sind einfach binär. Ich würde sogar sagen: die meisten. Mach z.B. mal ein Bild in einem Format deiner Wahl in Notepad oder einem Hex-Editor auf. Das einzige bekannte Bildformat, das mir gerade einfällt, das textbasiert ist, ist SVG. Dagegen BMP, JPEG, PNG, TIFF, TGA - alles binär.Textbasierte Formate sind in letzter Zeit, wo RAM und Festspeicher sehr billig geworden sind, wieder in Mode gekommen. Davor waren auch die gängigen Formate für z.B. Office-Dokumente binär.
Bzw. sind sie eigentlich sogar heute noch, da es primär mal .zip Archive sind, und .zip Archive sind auch Binärfiles.
(Erst in den entpackten .zip Archiven drinnen findet man dann bei den neueren Office-Formaten XML Files.)Binärfiles haben u.A. die Vorteile dass sie kompakt sind (weniger Speicherplatz brauchen) und mit Programmen sehr einfach zu lesen und schreiben sind. Sogar dass sie von Menschen ohne die passenden Programme schwer zu lesen/modifizieren sind kann ein Vorteil sein.
Und wenn diese Punkte wichtig sind, nimmt man halt ein binäres Format.
-
Du kannst im ersten Versuch mal gucken, ob du sowas wie eine Kennung am Anfang der Datei findest. View Formate benutzen eine Kennung, die das Dateiformat bezeichnet, manchmal steht sie als ASCII oder 2/4/8 Byte Folge zu Beginn der Datei. Und dann könntest du danach suchen, ob sich im Netzt eine Formatbeschreibung findet.
-
Also die Datei an sich ist mir eigentlich egal, mir gehts eher um die vorgehensweise usw
...
Danke, sehr ausführlich. Das hat mich inzeressiert.
...
Für was für Anwendungen braucht man es im oraxisleben, eine Datei binär zu öffnen oder was binary zu schreibener will gar kein Format entschüsseln - nur verstehen wie ma sowas macht und unsere Posts + Links erklären das wirklich zu genüge, aber auf seiner Seite fehlt wirklich noch viel zu viel Praxiswissen
-
Richtig, da fehlt Praxiswissen. Wird aber auch nicht kommen, da ich wie gesagt nur als Hobby bisschen programmiere, aber ich wollte einfach mal von den Profis wissen, wie man "theoretisch" an sowas rangeht.
-
DocShoe schrieb:
Du kannst im ersten Versuch mal gucken, ob du sowas wie eine Kennung am Anfang der Datei findest. View Formate benutzen eine Kennung, die das Dateiformat bezeichnet, manchmal steht sie als ASCII oder 2/4/8 Byte Folge zu Beginn der Datei. Und dann könntest du danach suchen, ob sich im Netzt eine Formatbeschreibung findet.
Wobei noch dazuzusagen wäre dass das alles nur Heuristiken sind. (Wobei ich mit "das" meine: das was Programme machen die verschiedenste File-Formate aufmachen bzw. identifizieren können ohne sich auf die Extension zu verlassen.)
Für jedes Dateiformat das eine Kennung an Stelle X stehen hat, gibt es Dateiformate die dort "Nutzdaten" stehen haben -- und diese Nutzdaten können durch Zufall auch jede beliebige Kennung enthalten.
D.h. nur weil etwas mit "BM" anfängt muss es kein .BMP File sein, nur weil etwas mit "MZ" anfängt kein .EXE/.DLL File etc.