Hex-Editor Verschlüsselung

Hallo Leute!

Ich hab ein Problem. Und zwar will ich eine *.exe modifizieren allerdings ist meiner Meinung nach alles verschlüsselt. Habe es mit dem MX Hex Editor probiert.

Bin da noch nicht so lange dabei, mit dem Editor zu arbeiten, aber etliches habe ich schon geschafft. Nun hänge ich aber eben bei der Datei.

Was könnte das für eine Verschlüsselung sein bzw. wie findet man heraus was sich dahinter versteckt?
 
Also wenn man nur den verschlüsselten Code sieht, ist es eigentlich nicht möglich den Algorithmus herauszufinden. Da es aber eine .exe ist wie du sagtest kannst du doch diese einfach in OllyDBG öffnen und zu der Adresse springen und schauen ob dort irgendwas passiert. Wenn es tatsächlich verschlüsselt ist und was wichtiges darstellt, dann muss der Code auch irgendwann mal entschlüsselt werden damit er auch ausgeführt werden kann und wenn du diese Stelle findest, wo entschlüsselt wird wirst du auch den Algorithmus sehen können.
 
Was könnte das für eine Verschlüsselung sein bzw. wie findet man heraus was sich dahinter versteckt?
Für mich sieht das nach Assembler aus. Die ist ziemlich hart, braucht man schon bisschen mehr Erfahrung bis man Assembler sinnvoll entschlüsseln kann. Glücklicherweise ist die ziemlich Opensource, dh gibt genug darüber im Internet.
 
@Tsjuder
Danke! Ich Probiers mal aus, was ist denn wenn man ne Adresse findet bei der was passiert? wie veränder ich die denn dann?

Für mich sieht das nach Assembler aus. Die ist ziemlich hart, braucht man schon bisschen mehr Erfahrung bis man Assembler sinnvoll entschlüsseln kann. Glücklicherweise ist die ziemlich Opensource, dh gibt genug darüber im Internet.

Nach was sucht man denn in google am besten um ein gutes tutorial zu finden? einfach "assembler tutorial?" :D

___

Irgendwie funktioniert der "Run debugged app." button nicht.. der hüpft immer nur auf eine bestimmte zeile?
 
Zuletzt bearbeitet:
@Tsjuder
Danke! Ich Probiers mal aus, was ist denn wenn man ne Adresse findet bei der was passiert? wie veränder ich die denn dann?

In OllyDBG einfach Doppelklick drauf :D.

Also ich weiß nicht wieviel du über die .exe weißt. Bist dir aber schon sicher, dass es kein Virus oder sont irgendwas ist oder?
Muss ganz ehrlich sagen anhand des Hex-Code bin ich nicht in der Lage zu erkennen, ob es gültiger ASM Code ist oder nicht. Der ASCII Code daneben zeigt aber an für sich nur Müll an, womit man also nix anfangen kann (nicht dass das etwas mit dem ASM Code zu tun hätte). Ich würde das ganze einfach in OllyDBG laden und nach einem Hex-String suchen den du da siehst. Dann gehste zu der Adresse und schaust ob es nicht doch gültiger Code ist und ansonsten setzt du einen Breakpoint, wenn die Adresse aufgerufen/benutzt wird. Dann wird man schon etwas erfahren können über das was da steht.

P.S: Vielleicht kann dir (und mir) auch jemand erklären wie man den FileOffset den du im Hex Editor siehst umrechnen kann auf die VA die du in Olly brauchst, dann bräuchtest du nicht nach dem Hex-String zu suchen (geht aber auch). Ich habs bis jetzt nicht so wirklich verstanden :D, weil wenn der FileOffset z.B. bei 0x600 bereits den "richtigen" Code beeinhaltet hat man bei Olly diesen z.B. erst bei 0x1000 + ImageBase, weil der PE Header von 0x000 -0x5FF geht (also 0x600 groß ist), aber der EntryPoint erst bei 0x1000 + ImageBase im PE Header deklariert wurde und daher stehen in den restlichen Bytes von 0x600 bis 0xFFF + ImageBase nur 0x00.
 
P.S: Vielleicht kann dir (und mir) auch jemand erklären wie man den FileOffset den du im Hex Editor siehst umrechnen kann auf die VA die du in Olly brauchst, dann bräuchtest du nicht nach dem Hex-String zu suchen (geht aber auch).
Kurz? CFF Explorer oder LordPE (und wahrscheinlich jeder gescheite PE Editor).
Lang: Section Headers durchgehen und schauen, ob das FileOffset im "RawAddress" + "RawSize" Bereich der Section liegt. Hat man die nötige Section ermittelt, rechnet man: FileOffset - RawAddress + VirtualAddress
damit bekommt man die RVA (relative Virtual Address). Addiert man noch ImageBase hinzu, hat man VirtualAddress Wert.
 
Also schonmal danke für die ganzen Antworten! :)

Ich hab mich mal heute näher mit dem ganzen Zeug beschäftigt und habe herausgefunden das der Ollydbg doch ganz nützliche sachen anzeigt, allerdings hab ich da noch paar Fragen.

Übrigens, kein Virus, ist eine *.exe eines offlinegames (rennspiel) das so seit etwa 7 Jahren nichtmehr kaufbar ist, weil sich die Firma aufgelöst hat, auswelchen Gründen auch immer. Jetzt gibts das nochnichtmal mehr gebraucht auf ebay oder so, und so zum download findet man auch nirgends mehr.

Mein Problem ist eben das ich ein lenkrad benutzen will. Allerdings haben die das Spiel damals nur mit Controller verkauft und haben deshalb nur den zugelassen. Also wenn ich nun das Spiel starte, kommt alle 5sec. ein Fenster: Controller wurde nicht gefunden. Zwischen den 5sec. kann ich aber irgendwie mit dem Lenkrad spielen, aber eben nur bis das Popup wieder kommt.

Also will ich das nun irgendwie abstellen.

Ich hab schon herausgefunden das ich bei ollyDBG in den strings suchen muss. (hab ein tutorial gefunden, da haben die das popupfenster von winrar entfernt). Die haben da bei dem string "reminder" geschaut. Allerdings finde ich bei mir nicht so eindeutige bezeichnungen. Nur "Register", "Unregister", "SecurityReReadRegistry" etc.

Wenn man den String gefunden hat soll man angeblich den Jump finden der auf die Kommandozeile verweist und dann aus dem JEP einfach JMP machen. Also einfach überpringen. Dann exe speichern und das Popup erscheint nichtmehr (alles laut winrar tutorial)

Also denke ich das es bei mir auch so geht denn ist auch nur ein ganz normales Popupfenster?

Also meine Hauptfrage ist jetzt wie ich den genauen String (Kommandozeile) finde indem das Popup vom Programm aufgerufen wird.

Danke schonmal für Antworten :)
 
Wenn die Nachricht über eine MessageBox kommt, kannst du auch search for all intermodular calls machen und auf denn calls breaken und so die richtige finden. Oder du breakst in der messageboxfunktion.

Sent from my HTC Desire using Tapatalk
 
Wenn die Nachricht über eine MessageBox kommt, kannst du auch search for all intermodular calls machen und auf denn calls breaken und so die richtige finden.

Ich hab jetzt search for all intermodular calls gemacht und wie meinst du das jetzt mit "auf calls breaken"? damit kenne ich mich noch nicht aus. Wie mache ich das Schritt für Schritt?
 
Du sollst einfach einen Breakpoint auf die MessageBox Funktion setzen. Müsste glaube ich irgendwas wie "USER32.MessageBox" stehen und darauf Rechtsklick und dann auf "Set Breakpoint on every call...". Und dann guckst du dir an was für eine MessageBox generiert wurde, wenn das die ist die du brauchst musst irgendwie immer über diese Zeile springen mit einem JMP. Oder du versuchst direkt die Funktion zu finden, die den Controller überprüft und machst die Methode einfach "weg". Es gibt sicherlich noch viele Methoden, manche klappen, manche nicht jenach Programm (also *.exe).

Wenn aber nur das Fenster stört, weil es darauf wartet geschlossen zu werden und dein Kontroller tatsächlich einfach so funktioniert, dann sollte es tatsächlich reichen einfach die MessageBox zu überspringen.
 

Danke, aber irgendwie kapier ich das mit den breakpoints immer noch nicht.

Was machen die denn genau? Warum muss ich die überhaupt setzen?
Und warum weißt du sofort auf welche Messagebox du einen Breakpoint setzen musst bzw. welche du öffnen musst? Weil ich habe hier bestimmt 40 Boxen..

Oder auch, falls man die richtige doppelklicken sollte: woher weiß ich das dass die richtige ist?!
Ich hab nämlich wenn ich eine Messagebox anklicke keinen ASCII Text wo irgendetwas steht.. das meiste ist ohne kommentar.

Und sagen wir noch, die Textbox hat nur einen CALL davor. Wie umgehe ich den?

Irgendwie bin ich überfordert :-(
 
Zuletzt bearbeitet:
Was machen die denn genau? Warum muss ich die überhaupt setzen?
Und warum weißt du sofort auf welche Messagebox du einen Breakpoint setzen musst bzw. welche du öffnen musst? Weil ich habe hier bestimmt 40 Boxen..

Also nochmal folgendes prinzipelle Vorgehen: Du lädst das Programm in OllyDBG und setzt einen Breakpoint(BP) auf jeden CALL zu der MessageBox Funktion. Wie das geht wurde hier schon erklärt. Ein BP macht, wie der Name schon sagte, eine Unterbrechung sobald dein Programm diese Stelle erreicht. D.h. aber natürlich auch das du bei dem Programm die BPs setzt und dann in Olly auf "Run" klickst. Sobald eine Zeile mit einem BP erreicht wird fokusiert sich Olly in den Vordergrund und pausiert das Programm. Das ist der Nutzen von BPs.

Warum du die überhaupt setzen musst: Da du wie du sagtest viele CALLs auf die MessageBox hast musst du herausfinden welche die richtige ist bzw. viel eher gesagt an welcher Stelle diese aufgerufen wird.
Man kann auch einfach die Strings suchen die in der MessageBox geöffnet werden und suchen wo diese referenziert werden, aber das klappt auch nicht unbedingt immer. Vergiss das aber am besten erstmal.

woher weiß ich das dass die richtige ist?
Spätestens zur Laufzeit bzw. aller spätestens 4 Zeilen über dem CALL zur MessageBox müssen die richtigen Wert an den Stellen stehen die 4 Zeilen über dem CALL auf den Stack gepusht werden. Dort wird dann also als Kommentar der ASCII Wert stehen bzw. der ASCII String. Es kann auch sein, dass das standardmäßig in OllyDBG gar nicht eingestellt ist, aber ich meine schon. Ist aber zu lange her als das ich mir da sicher sein könnte, dass ich Olly installiert habe.
Falls dort tatsächlich nichts steht über dem CALL, guck einfach unten rechts in dem Stack Fenster was da drin steht.
Solltest du immer noch nicht klar kommen:
1.Setze die BPs
2. Lass das Programm laufen in Olly
3. Sobald Olly pausiert schau dir den CALL an.
4. Drück einmal F8 (Step Over)
5. Wenn jetzt dein "Kontroller" Fenster aufgeht, dann weißt du das du hier an der richtigen Adresse bist. Also Stelle merken und analysieren.

Wenn du dann nicht weißt wie du da drüber "springst" kannst du dich einfach nochmal melden.

Wenn das Kontroller Fenster einfach so aufgeht, obwohl du die BPs gesetzt hast dann wird es wohl einfach nicht über ein MessageBox Fenster geöffnet.
 
Ok, ich glaube ich hab es kapiert, danke.

Muss ich erst das richtige Programm starten und dann auf Run oder soll es sich automatisch starten wenn ich auf Run klicke? Weil es startet sich nicht von selber wenn ich auf run gehe..


EDIT: Ok, habe es mit einer normalen exe probiert und da hat es sich gestartet mit "Run". Anscheinend ist das Rennspiel nicht so kompatibel mit ollyDBG. Ich lasse es einfach sein...

Trotzdem vielen Dank für die ganzen ausführlichen Antworten!! :-)

EDIT2: Habs herausgefunden warum: For security purposes, this programm don't run if system debuggers are active. Please disable them.
 
Zuletzt bearbeitet:
OK, das sind Anti-Debugging Tricks. Ich weiß nicht inwieweit es eigentlich noch hier erlaubt ist dir weiterzuhelfen.

Man kann es einfach mal versuchen die ollydbg.exe in xyz.exe umzubennen manche Programme scannen erst ob der Prozess in der Prozessliste auftaucht und nach xyz.exe scannen die bestimmt nicht. Gibt auch noch andere Anti-Anti-Debugging Tricks. Kann man auch nur ausprobieren was klappt.
 
Um welches Programm handelt es sich? Und werden manche messageboxen benötigt?
Wenn nicht dann guck dir mal mein Tutorial über detouren an.

Sent from my HTC Desire using Tapatalk
 
Zurück
Oben