Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe: Entschlüsselung von binären dateien.*edit*



Tantrix_187
20.08.2007, 16:00
Hallo erstmals.
Ich habe schon lange daran gearbeitet ein PSX spiel zu rippen,und zwar immer mit dem Vorgang :
Screens machen->Rauseditieren...
und es kostet zeit,kraft und nerven >_<

Ihr müsst wissen,ich habe auch schon versucht,mit tools die Tiles und Sprites aus dem spiel zu rippen,aber bei dem spiel funksts überhaupt nicht.
Das spiel heißt ,,Alundra'' und ist ein 2D-Adventure Spiel wie Zelda.

Das einzige was etwas rausrippen konnte war der PSX multi converter:
http://i185.photobucket.com/albums/x40/Tantrix187/SNAG-0001.png?t=1187289261

Aber das wars schon.Ich glaube auch net das es in zukunft tools dafür geben wird.
Wisst ihr,die tools waren in der lage nur zwei dateien zu rippen:
http://i185.photobucket.com/albums/x40/Tantrix187/SNAG-0002.png?t=1187289263

Die zwei dateien waren für die Credits und das Intro Menü bestimmt.
Aber ich möchte unbedingt die .bin dateien rippen,wo der Rest sich befindet:
http://i185.photobucket.com/albums/x40/Tantrix187/SNAG-0003.png?t=1187289264

(mit Psound konnte ich schon die Sound Effekte rippen,das habe ich schon geschaft ;) )

Aber die tools können nicht darin was ausfindig machen,entweder,weils .bin datei sind,oder die tiles/sprites in andere formate anstelle des typischen TIM-formats sind...

Ich klinge gerade sehr besserwisserisch,tut mir auch leid ;_;
Es gibt jetzt nur noch eine EINZIGE möglcihkeit:
Per C++ rippen

Nun,wieso mache ich es dann nicht?
Ganz einfach:
Ich kann kein C++ und habe auch nicht vor zu lernen.
Ich habe einfach keine Zeit dazu,das manuelle rippen hat mir schon genug zeit gekostet >_<

Deswegen suche ich nach einem Programmierer,der mir dabei helfen könnte das spiel zu rippen.
Ich werde auch Credits geben,jede menge credits^^.

Wäre jemand interessiert mir zu helfen?

FF
20.08.2007, 17:29
meines Wissens nach ist sowas illegal, insofern ist dieser thread sowas wie eine aufforderung zur beihilfe zu einer straftat ... oder so.

ganz abgesehen, das ich mir ned vorstellen kann, das jemand sowas für ein paar chredits machen wird. Das scheint mir doch schon ein erheblicher aufwand.

Tantrix_187
20.08.2007, 18:15
Es ist nicht illegal.
Solange man erwähnt wem diese Sprites gehöhren kann man sie verwenden und in Sprite seiten hochladen:
http://www.spriters-resource.com/

Ich weiß dass rippen illegal klingt, ist aber gemeind,die Ressourcen rauszuhohlen und sie in den eigenen Spielen zu verwerten.
Höhr mal,Leute rippen die ganze zeit tiles und Sprites aus Snes spielen(mario,Terranigma,welche auch von Lachsen gerippt und editiert wurden) und GBA spielen.
Und die wurden net verhaftet =P.Ich glaube dann würde nur noch die hälfte aller RPG entwickler noch im forum sein...Sonst würde ich auch net so einen thread öffnen.

Und wieso ist Credits zu wenig für den Aufwand?
Soll ich etwa die hilfe bezahlen?

FF
20.08.2007, 18:24
wenn ichs dir doch sage.
das rippen von resourcen aus spielen, auch wenn du die firma nennst, ist illegal.
solange sie dir keine explizite erlaubnis gegeben haben, ihr Zeug zu benutzen, darfst du es auch nicht.
Das du deswegen nicht unbedingt verhafet wirst ist etwas anderes. Ändert aber nichts daran, das es verboten ist.
s auch dieser thread:
http://www.multimediaxis.de/showpost.php?p=1176186&postcount=7



Und wieso ist Credits zu wenig für den Aufwand?
Soll ich etwa die hilfe bezahlen?

So wie ich das verstehe, soll man dir ein programm schreiben, welches das binärformat des Playstation Roms (welches übrigens auch illegal ist... :rolleyes: ) entschlüsselt (was auch illegal ist... :rolleyes:²).
Und das ist ein Aufwand ohne ende.

Selbst wenn es irgend eine andere Methode gibt (und mir fällt grad keine ein, außer screenshots machen... :P) ist es in jedem falle sehr aufwändig, so das es für lau ganz sicher niemand machen wird. da sind credits in einem spiel, das warschenlich niemal fertig werden wird (nicht gegen dich persönlich gerichtet, das ist nur etwas, das ich in jahrelanger erfahrung mit dem maker gelernt habe...) auch keine angemessene entlohnung.

NPC Fighter
20.08.2007, 18:29
Und die wurden net verhaftet =P.Ich glaube dann würde nur noch die hälfte aller RPG entwickler noch im forum sein...Sonst würde ich auch net so einen thread öffnen.

Wenn jeder für das belangt werden würde, was er mal getan hat oder auch regelmäßig tut, würden in der Tat weniger Leute in diesem Forum sein. Nur weil es die Hersteller nicht interessiert (*), heißt das nicht, dass es rechtlich in Ordnung ist.


Und wieso ist Credits zu wenig für den Aufwand?
Soll ich etwa die hilfe bezahlen?

Guter Ansatz, warum nicht?


(* Zum Teil)

Ineluki
20.08.2007, 18:42
Rippen ist und bleibt illegal, da es einen Verstoss gegen das Urheberrecht darstellt (UrhG). Das Verstoesse gegen das Urheberrecht wahrscheinlich die haeufigsten Kriminaldelikte sind, und selbige in den meisten Faellen nicht verfolgt werden, tut dem Fakt der Illegalitaet keinen Abspruch, sondern zeigt nur, dass das UrhG einer Revision fuer unsere modernen Zeiten bedarf. Dennoch ist die Verwendung von ganzen Werken dritter oder deren Teilen ohne die schriftliche Erlaubnis des Urheberrechtsinhabers bis 75 Jahre nach dem Tode des Schoepfers nicht gestattet. Und ich bezweifle, dass es SNES oder PSX Spiele gibt, die aelter als 75 Jahren sind.

Aber abgesehen von dem rechtlichen Problem (da bei privater und nichtkomerzieller Nutzung nur in seltenen Faellen eine strafrechtliche Verfolgung erfolgt) stellt die Entschluesselung eine binaeren Formates insbesondere ohne explizite Kenntnisse des Inhaltsformates ein extrem schwieriges unterfangen dar. Mit C/C++ wird programmiert. Das ist kein fertiges Programm, dem man einfach sagt, es soll etwas extrahieren. Fuer die Entschluesselung des entsprechenden Formates braucht man abhaengig von der Komplexitaet der in der Binaerdatei verwendeten Datenstrukturen wahrscheinlich 10 bis 100 Arbeitsstunden, wenn nicht sogar erheblich mehr. Wenn das Format entschluesselt ist, ist das Schreiben des eigentlichen Programms in C/C++ meist nicht mehr das grosse Problem und innerhalb von ca. 10 Stunden erledigt. In Anbetracht dieses Zeit- und Arbeitsaufwandes ist eine Hilfe fuer ein paar Credits nur dann wahrscheinlich, wenn dich die betreffende Person sehr gut leiden lann. Ansonsten ist mit einem fairen Stundenlohn von ca. 10,00 Euro netto zu rechnen, sofern nicht die betreffende Person am Thema interessiert ist und dir einen Freundschaftspreis anbietet.

Wie du siehst kommst du mit einer "Hey, ich hab ein Problem, also loest mir das mal, damit ich keine Arbeit habe" Einstellung hier nicht sonderlich weit. Du kannst allerdings alle obigen Probleme umgehen, indem du deine Frage dahingehend abaenderst, dass du Fragst, wie man mit C/C++ binaere Daten auslesen kann. Hierzu wirst du mit Sicherheit kompetente und kostenlose Hilfe erhalten. Wenn du dich dann auch noch mit dem Aufbau von gaengigen Datenformaten zur PSX per Google beschaeftigst, solltest du in weniger als einer Woche bis einem Monat in der Lage sein, selbstaendig mit deinen Untersuchungen bzw. Extraktionen zu beginnen. Auf diese Weise umgehst du das Problem der Anstiftung zu einer Straftat als auch die hohen Kosten, die entstehen, wenn du jemanden ein auf dein Problem zugeschittenes Programm entwickeln laesst.

Ich hoffe, geholfen zu haben.

Tantrix_187
20.08.2007, 18:46
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]

Ineluki
20.08.2007, 19:21
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



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

Tantrix_187
20.08.2007, 19:38
Okay,have es mal ausprobiert:

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

Ineluki
20.08.2007, 19:43
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.

Tantrix_187
20.08.2007, 19:46
Dann Nochmal von neuem:


#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.(:D )
Was ist der nächste schritt?

FF
20.08.2007, 19:48
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



10 bis 100 Arbeitsstunden, wenn nicht sogar erheblich mehr

ins spiel.

Ineluki
20.08.2007, 19:49
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.

Tantrix_187
20.08.2007, 20:07
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:

system("pause");
// damit das Fenster nicht gleich geschlossen wird.
return 0;
// Beende das Programm erfolgreich.
}

Aber dann ist ein fehler eingetreren beim system(''pause''); :

Compiler: Default compiler
Building Makefile: "C:\Dev-Cpp\Makefile.win"
Executing make...
make.exe -f "C:\Dev-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

Ineluki
20.08.2007, 20:10
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.

Tantrix_187
20.08.2007, 20:18
Fehler korrigiert..
aber dennoch bleibt das .exe fenster nur ganz ganz kurz offen...

viellciht fehlt da was:

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

Ineluki
20.08.2007, 20:31
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.

malu
20.08.2007, 20:45
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. ;)

Tantrix_187
20.08.2007, 20:57
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:

Drücke eine beliebige Taste....
Und sos iehts aus:
http://img413.imageshack.us/img413/7740/melzasentrance0181is5.png
Irgendwie ist es allmählig klar,aber dennoch:
Wie gehts weiter?

Ineluki
20.08.2007, 22:21
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.

Tantrix_187
21.08.2007, 09:40
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)

FF
21.08.2007, 14:51
luki, stellst du deinen code rückwirkend unter GPL, falls das tool mal fertig wird? ;)

Ineluki
21.08.2007, 17:38
FF, du bist fies .... aber ja, so ists gedacht :p

@Tantrix_187
Warum per ICQ ... das kann man hier im Forum machen, und es hat den Vorteil, dass auch andere was ggf dabei lernen, und wenns nur basis I/O mit C ist.

Ach ja, es waere schoen, wenn du am Ende dein Programm hier im Forum veroeffentlichen wuerdest, natuerlich inclusive Quelltext. Unsere Community ist sehr OSS-freundlich ^__^

Tantrix_187
24.08.2007, 11:27
Ich hatte eben gedacht,mit ICQ wäre es viel schneller,aber ich stimme doch eher mit dir zu.
Ahh,du möchtest auch was vom tool,den ich vielleicht entwerfen werde, abhaben ,hmmm ;D?Ja werde ich machen,aber du musst dich gedulden >_>

Ich habe im im net eigentlich nichts gefunden über den Aufbau der dateien,per google habe ich nichts gefunden...ich hoffe aber dass ich bald einen Typen finden werde der schon selber tools gemacht hat >_>

Aber ich habe auch noch eine Alternative gefunden:
Ich werde erstmals heraus finden,was für dateien die .bin enthält.
Ich habe eine seite gefunden,die mir bei anforderung freiwillig eine datei analysieren werden,um herauszufinden um was für (bild)formate sich da befinden.(Hier,wenn die vielleicht auch C++ benutzen können ich sie ja über den Aufbau fragen^^)
Der Vorteil ist dass ich dann weiß was für typen von dateien sich darin befinden und ich präzieser die formate entschlüsseln kann,dann kann ich per Hex den aufbau dieser formate herausarbeiten und mich informieren.(hoffe,ich klinge logisch >_>)

Also erstmals abwarten,ich hoffe ich komme gleich mit was neuem hier,weil ich muss warten bis der admin dort meinen Account akzeptiert >_<

Edit:
So,da bin ich wieder.
Also,ich habe ein (paar) gute und schlechte nachrichten.

Die schlechte ist,dass die Typen die Bin datei dort immer noch nicht analysiert haben...wunder mich auch ein bisschen,ist aber jetzt egal.

Die gute nachricht ist,dass ich einen Tool gefunden habe,das mir half die Dateien aus der Bindatei zu rippen.
Leider keine bilder aber dafür 120 dateinen(unbekanntes Format! (http://img209.imageshack.us/img209/2382/melzasentrance0190tp9.png)) die wahrscheinlich alle bilderdateien(tiles/sprites) uns rippern versteckt halten.
Ich würde euch gerne ein besipiel senden aber ich glaub das ist auch illegal und möchte das lieber lassen.(aber wer will,PM=P)
Stattdessen gebe ich mal einen einblick auf die Hex-konstruktur(sagt man das so?):
http://img209.imageshack.us/img209/9557/melzasentrance0189kb1.png

Die andere gute nachricht ist,dass ich etwas über den Hexcode einiger bekannten PSX bilddateien kenne:
TMD (http://wiki.xentax.com/index.php/Playstation_TMD)
Ich habe auch noch was von TIM gesehen,aber die haben den Artiekl gelöscht ;__;
Egal,es gibt auch eine beschreibung von 3 bin-typen:
Typ 1 (http://wiki.xentax.com/index.php/7th_Level_BIN_7L)
Typ 2 (http://wiki.xentax.com/index.php/7th_Level_BIN_7L2)
Typ 3 (http://wiki.xentax.com/index.php/7th_Level_BIN_7LB)
Typ 000+ (http://wiki.xentax.com/index.php/7th_Level_BIN_7LU)

Ich will net auffordern dass ihr das lesen sollt,ich will euch nur informieren und euch genug einsicht geben was ich gerade mache...
ich muss wieder diese seite finden wo ich den hexcode zur TIM datei gesehen habe...