Ergebnis 1 bis 20 von 24

Thema: Hilfe: Entschlüsselung von binären dateien.*edit*

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Okay,have es mal ausprobiert:
    Code:
    #include <stdio.h>
    int main(int argc, char** argv) {
        FILE *input = fopen(DATAS,r);
          if ( !input) {
        printf(Konnte die Datei nicht oeffnen.\n);
        return 1;
      }
        char data;
          while ( ! feof(input) ) {
              fread(&data, sizeof(data), 1, input);
                  printf(%02x ,data);
                    }
                      printf(\n);
                        fclose(input);
                          return 0;
    Ich hoffe die leersetllen machen keinen unterschied^^''

  2. #2
    Du haettest problemlos die // Zeilen drin stehen lassen koennen.
    // leitet eine Kommentarzeile ein.

    Ausserdem ist dein Einrueckschema sehr unbrauchbar, da man nicht ersehen kann, welche Programmteile auf einer Ausfuehrungsebene liegen.

  3. #3
    Dann Nochmal von neuem:
    Code:
    #include <stdio.h>
    // Damit bindet man die Bibliothek fuer die Ein und Ausgaberoutinen ein.
    
    int main(int argc, char** argv) {
    // Das ist der Funktionskopf des Hauptprogramms, sowas hat JEDES C/C++ Programm
      FILE *input = fopen("DATAS","r");
    // Dies oeffnet die Datei "Dateiname" zum Lesen. Ueber die variable input kannst du nun auf die Datei zugreifen.
    
      if ( !input) {
        printf("Konnte die Datei nicht oeffnen.\n");
        return 1;
      }
    // Wenn die Datei nicht geoeffnet werden konnte, gib fehler aus und beende.
    
      char data;
    // Eine ein byte grosse Variable mit Namen data. 
    
      while ( ! feof(input) ) {
    // Solange das Dateiende von input nicht erreicht ist, tue alles zwischen { und }
        fread(&data, sizeof(data), 1, input);
    // Lies ein Byte aus der Datei ein. 
    
    // Hier kommt dann dein Code rein, was du mit den binaerdaten machen willst. 
        printf("%02x ",data);
    // Als Beispiel lassen wir einfach mal den Hexadezimalcode des zeichens ausgeben
      }
    // Die Schleife ist beendet.
      printf("\n");
    // Springe auf die naechste Zeile
      fclose(input);
    // Schliesse die Datei
      return 0;
    // Beende das Programm erfolgreich.
    }
    Okay,soweit habe ich alles verstanden.( )
    Was ist der nächste schritt?

  4. #4
    Zitat Zitat
    Wenn du dich dann auch noch mit dem Aufbau von gaengigen Datenformaten zur PSX per Google beschaeftigst, solltest du...
    und dann kommen die erwähnten

    Zitat Zitat
    10 bis 100 Arbeitsstunden, wenn nicht sogar erheblich mehr
    ins spiel.

  5. #5
    Hast du das Programm compilieren koennen und hast du es einmal mit einer (kleinen) Datei ausprobiert ?

    Gegebenenfalls musst du unter windows noch ein
    system("pause");
    vor dem return 0; einfuegen, damit das Fenster nicht gleich geschlossen wird.

  6. #6
    Also ich habs jetzt comilierd.
    Ich habe auch die Exe datei dazu gefunden im meinem C++ ordner.
    Aber alles was es macht ist nur kurz öffnen und wieder schließen...
    ich habe dann vor dem return 0; noch system(''pause'');

    eingefügt sodass es dann so aussieht:
    Code:
    system("pause");
    // damit das Fenster nicht gleich geschlossen wird.
    return 0;
    // Beende das Programm erfolgreich.
    }
    Aber dann ist ein fehler eingetreren beim system(''pause''); :
    Zitat Zitat
    Compiler: Default compiler
    Building Makefile: "CDev-Cpp\Makefile.win"
    Executing make...
    make.exe -f "CDev-Cpp\Makefile.win" all
    g++.exe -c Alundra.cpp -o Alundra.o -I"C:/Dev-Cpp/include/c++/3.3.1" -I"C:/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Dev-Cpp/include"

    Alundra.cpp: In function `int main(int, char**)':
    Alundra.cpp:32: error: `system' undeclared (first use this function)
    Alundra.cpp:32: error: (Each undeclared identifier is reported only once for
    each function it appears in.)

    make.exe: *** [Alundra.o] Error 1

    Execution terminated

  7. #7
    Oh mein Fehler ...

    Fuege hinter dem #include <stdio.h> noch die Zeile
    #include <stdlib.h>
    ein.

    Die Funktion system ist naemlich in der Bibliothek stdlib.h definiert.

  8. #8
    Fehler korrigiert..
    aber dennoch bleibt das .exe fenster nur ganz ganz kurz offen...

    viellciht fehlt da was:
    Code:
    #include <stdio.h>
    // Damit bindet man die Bibliothek fuer die Ein und Ausgaberoutinen ein.
    #include <stdlib.h>
    //Die Funktion system ist naemlich in der Bibliothek stdlib.h definiert.
    int main(int argc, char** argv) {
    // Das ist der Funktionskopf des Hauptprogramms, sowas hat JEDES C/C++ Programm
      FILE *input = fopen("DATAS","r");
    // Dies oeffnet die Datei "Dateiname" zum Lesen. Ueber die variable input kannst du nun auf die Datei zugreifen.
    
      if ( !input) {
        printf("Konnte die Datei nicht oeffnen.\n");
        return 1;
      }
    // Wenn die Datei nicht geoeffnet werden konnte, gib fehler aus und beende.
    
      char data;
    // Eine ein byte grosse Variable mit Namen data. 
    
      while ( ! feof(input) ) {
    // Solange das Dateiende von input nicht erreicht ist, tue alles zwischen { und }
        fread(&data, sizeof(data), 1, input);
    // Lies ein Byte aus der Datei ein. 
    
    // Hier kommt dann dein Code rein, was du mit den binaerdaten machen willst. 
        printf("%02x ",data);
    // Als Beispiel lassen wir einfach mal den Hexadezimalcode des zeichens ausgeben
      }
    // Die Schleife ist beendet.
      printf("\n");
    // Springe auf die naechste Zeile
      fclose(input);
    // Schliesse die Datei
    system("pause");
    // vor dem return 0; einfuegen, damit das Fenster nicht gleich geschlossen wird.
    return 0;
    // Beende das Programm erfolgreich.
    }

  9. #9
    Du hast als Datei "DATAS" angegeben. Allerdings heisst die Datei datas.bin
    Und das funktioniert auch nur, wenn deine Exe im selben verzeichnis ist, wie die zu oeffende Datei.

    Um zu sehen, dass ich recht habe, fuege vor das exit 1; auch mal ein system("pause"); ein.

  10. #10
    Zitat Zitat von Ineluki Beitrag anzeigen
    Um zu sehen, dass ich recht habe, fuege vor das exit 1; auch mal ein system("pause"); ein.
    Wobei Luki return 1; meint, wenn er exit 1; sagt.

  11. #11
    Juchuuu,es klappt.
    Die .exe datei ist offen,und da stehen viele 0er und 1er Ziffern,auch viel f-zeichen hintereinander.
    Am ende steht dann:
    Zitat Zitat
    Drücke eine beliebige Taste....
    Und sos iehts aus:
    http://img413.imageshack.us/img413/7...nce0181is5.png
    Irgendwie ist es allmählig klar,aber dennoch:
    Wie gehts weiter?

  12. #12
    Ok, die Ausgabe ist problematisch, wie ich gerade sehe ...
    Normalerweise sollte nach zwei hex Ziffern ein leerzeichen kommen.

    Aber ich hab den Fehler gefunden ^^
    Schreibe bitte statt char data;
    unsigned char data;
    C hat sich da etwas komisch ...

    Gut ...
    also wir lesen die Datei gerade byteweise ein.
    Bei Binaerdaten ist immer das Problem, dass man nicht weiss, wie die Datei aufgebaut ist. Datentypen koennen unterschiedliche Laengen haben. Einfache Buchstaben haben in der Regel 1 oder 2 byte, Zahlen haben je nach Zahlenbereich 1 bis 4 byte. Graphiken und Sounds und Programme bestehen auch nur aus auseinanderfolgenden Zahlen oder Buchstaben. Wie genau diese aufgebaut sind, ist vom Datenformat abhaengig, oder vom Kompressionsalgorithmus, und vielem anderen.

    Mit fread (puffer, groesse in byte, 1, datei); liest man aus einer Datei eine bestimmte Anzahl von Bytes in einen Puffer.

    Die Frage ist nun, wie die Datei aufbetaut ist. Und das ist die Hauptarbeit, das herauszufinden. Du musst dir einen Hexeditor besorgen (google) und dich kundig machen, wie die Dateien der PSX aufgebaut sind (google). Wenn du dazu nichts findest, musst du selber mit dem HexEditor die Binaerdateien ansehen und versuchen irgendwelche strukturen zu erkennen.

    Wenn du dann einmal weisst wo und wie welche daten in den Binaerdateien stehen, musst du selbige ueber ein C++ Programm auslesen und in ein Datenformat speichern, welches du lesen kannst (z.B. BMP). Dazu musst du dich (mit google, Wikipedia) kundig machen, wie deine Ausgabeformate aufgebaut sind.

    Mit
    FILE *output = fopen("dateiname","w");
    oeffnest du eine Datei zum schreiben, mit
    fwrite(puffer, size, 1, datei);
    kannst du dann in eine datei schreiben.

    Das ist im Grunde mehr oder weniger alles, was du von Seite C/C++ wissen musst. Wie das lesen und schreiben in und aus Puffern funktioniert, kann ich dir gerne ebenfalls erklaehren, wenn du eine konkrete Struktur einlesen / ausgeben willst.

    Geändert von Ineluki (20.08.2007 um 22:32 Uhr)

  13. #13
    Danke für die Hilfe =)

    Ich werde mich versuchen zu informieren wie die Formate nun aufgebaut sind...am besten kontaktiere ich mich mit leuten die PSX tools entwickelt haben,die müssen am besten ahnung haben.

    Ich werde auf dich zurückkommen,wenn ich nochmal hilfe brauch(per ICQ)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •