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
    Oh...ich verstehe jetzt.
    Danke dass dus mir gesagt...
    wenn du mir helfen würdest wäre es genial und richtig toll.

    Ich bedanke mich auch dass du mich weiter unterstützen wirst^^.

    [Edit=Luki, Reason=Konsistenz]

    Danke für die Aufklärung,ich habe das wirklich nicht gewusst.
    Ich werde selber mich dranmachen die Binären dateien zu entschlüsseln.

    Also ... Wie kann ich mit C/C++ Binärdateien auslesen ?
    Deswegen brauche ich eure hilfe,tuts,emotionale unterstützung(usw.) das zu meistern.
    Keine bange ich habe Bloodshed Dev-C++ ,deswegen ist das erste problem gemeistert^^.

    [/Edit Luki]

    Geändert von Tantrix_187 (20.08.2007 um 19:05 Uhr)

  2. #2
    Gut, Da du ja nicht an den Feinheiten von C/C++ interessiert bist, gebe ich dir schon mal ein kleines Rahmenprogramm vor, und erklaehre, was es macht.

    Wenn du selber Code posten willst, dann verwende bitte das [ Code ]-Tag

    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("Dateiname","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.
    }
    Natuerlich musst du Dateiname durch den Dateinamen ersetzen. Und das Programm macht nichts ausser in Hex den Inhalt ausgeben.

  3. #3
    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^^''

  4. #4
    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.

  5. #5
    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?

  6. #6
    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.

  7. #7
    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.

  8. #8
    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

  9. #9
    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.

  10. #10
    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.
    }

  11. #11
    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.

  12. #12
    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.

  13. #13
    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?

Berechtigungen

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