[Need Help] Byte Swap automation. What language or tool?

03/25/2008 12:50 deejayg3rl#1
Hi :)

I want to byte swap about 2000 files. I know the algorithm but I don't know what the best solution is to write a program or script/macro to have this done for me. I know some ASM and more Java (hooray -_-) and Basic. Unfortunately no C++ (yet). Sizes of the files are 1 - 20 kb approximately. Now what came to my mind was to do this in ASM but my half knowledge makes me hope there is an easier solution. Maybe a hex editor which supports macros? Google only gave me irrelevant stuff.

Thanks!


German:
Hallo :)

Ich möchte in etwa 2000 Dateien ein Byte-Swap durchführen. Ich hab den Algorithmus aber ich weiß nicht was die beste Lösung für ein Programm oder Script/Makro ist, was mir die Arbeit abnimmt. Ich kenn mich ein wenig in ASM aus und recht gut in Java und Basic. Leider (noch) kein C++. Die Dateien sind etwa 1 - 20kb groß. Überlegt hab ich, das in ASM zu lösen, allerdings, durch mein Halbwissen bedingt, wäre mir eine einfachere Lösung lieber. Vielleicht gibts es einen Hexeditor der solche Operationen immer wieder ausführen kann über ein Makro? Bei Google hab ich nur irrelevantes Zeug gefunden.

Danke!


PS: I hope this is the right forum. Was thinking whether I put this here or in epvp*coders. Since it has to do with reverse engineering and the files belong to a game, I thought I put this here. Please move (and don't give me an infraction [again :D] if it's in the wrong one)
03/25/2008 13:28 mr.rattlz#2
Kannst du das was du vorhast etwas genauer beschreiben ?
Vielleicht anhand eines Beispiels ?
Grob geschätzt denke ich, dass ein Gemisch aus Assembler und einer Scriptsprache relativ schnell zu einer Lösung führen könnten :)
03/26/2008 07:35 deejayg3rl#3
Es soll geprüft werden ob die letzten 4 Byte einer bestimmten Zeichenfolge entsprechen, wenn ja, dann soll diese gelöscht werden. Anschließend, egal ob true oder false bei der Abfrage rauskam, sollen die ersten 44 Byte mit den letzten 44 Byte getauscht werden.

Das wärs auch schon :)
03/26/2008 11:05 mr.rattlz#4
Das Assemblerwissen, dass du, um das mit einer Datei zu machen brauchst ist absolut minimal. Du wirst ungefähr die folgenden Opcodes brauchen:
CMP
JNE
PUSH
CALL
MOV

Etwas mehr ist da schon das Wissen über die benötigten Api-funktionen, das du brauchst um das unter Windows zu programmieren:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

Wenn du also grundlegendes Assemblerwissen hast sollten die von mir angegebenen Seiten ausreichend sein um das Programm zu schreiben ;)
Die Reihenfolge, in der ich sie angegeben habe ist übrigens nicht zufällig.
03/26/2008 12:10 deejayg3rl#5
Kann ich denn in Assembler direkt Win32 API Funktionen aufrufen? Das habe ich noch nie gemacht ... War bisher immer nur alles im emulierten (DOS?) Bereich. Ausgabe mit MOV ah,09h int21 etc ^_^

Oder muss ich da auf z.B. C(++) zurückgreifen um die API in meinem Programm zu implementieren und dann den Code über Inline Assembler schreiben? :confused: Das ist nämlich das, was ich bei Google zu dem Thema gefunden hab. Aber wär ja seltsam, denn dann könnte ich mir den ASM Teil ja komplett sparen und direkt alles in C(++) schreiben (wenn ichs denn könnte :p). Die Erklärung der einzelnen API Funktionen beim MSDN zeigt ja auch C-Code wenn ich das richtig sehe.

Und schonmal danke für deine Hilfe. Find ich super. Schade, dass Microsoft die Seiten nicht auf deutsch übersetzt hat, die du mir gegeben hast. Aber nach 3x lesen hab ichs halbwegs verstanden ;) Hab allerdings noch nicht alle gelesen. Möchte mir erstmal im Klaren sein, wie ich das jetzt angehe. Ich fürchte du hast mein ASM Wissen überschätzt :rolleyes:
03/26/2008 17:05 mr.rattlz#6
Gut, das ist schon etwas anders als DOS-Programmierung, ich persönlich bin da ein großer Fan von GoAsm: [Only registered and activated users can see links. Click Here To Register...]
An sich kannst du das in so ziemlich jeder Programmiersprache machen, in mancher leichter als in anderen, aber insgesamt ist es deine Wahl. Wenn es dir nicht so unbedingt darum geht etwas zu lernen, sondern die Aufgabe so schnell wie möglich zu lösen kann ich dir auch eine Lösung in einer von mir präferierten Sprache anbieten ;)
03/26/2008 17:54 deejayg3rl#7
Danke fürs Angebot, aber mir gehts in der Tat darum, etwas zu lernen. :) Das ganze Ansteuern der API nur für dieses Programm zu lernen wäre zwar verrückt aber um mein Byte-Swap Proggi gehts mir kaum. Nen großen Nutzen hab ich von dem Ergebnis was es mir liefern soll eh nicht. Ist nur nen schöner Grund mich mal wieder mit der richtigen Programmiermaterie zu befassen. Hab zwar im Thread auch nach nem Tool gefragt aber das nur, weil ichs nicht mag, was zu programmieren, was es schon in vereinfachter Form gibt. Hab in letzten Tagen mehr mit AutoIT und Packeteditoren gespielt.

Ich habe irgendwann letzte Woche GameGuard zu meinem Erzfeind erklärt. Allerdings hab ich da mit meinem jetzigen Wissen keine Chance gegen ihn. Und da ich gelesen habe, dass GG einen in Ring0 zwingt, müsste ich die Ansteuerung der API sowieso lernen. Ob ich das jetzt wirklich mit Assembler mache muss ich mal schauen. Wär vielleicht auch nen guter Zeitpunkt um C++ aufzugreifen.

Ich werd mir deinen GoASM Link später oder morgen mal in Ruhe anschauen und mich dann entscheiden. So wie ich das sehe, müsste ich eh bei beiden Sprachen nahe 0 anfangen.