Frage zu Disassembler

Hallo, Leute,

ich habe mal eine Frage. Ich beschäftige mich momentan etwas mit Reverse Engineering und Disassembler. Ich habe von einem befreundeten Informatiker ein kleines Tool bekommen (das hat er mal mit mir vor vielen Jahren programmiert). Es ist ein kleines Tool, um Lottozahlen ausspucken zu lassen, also nix großes:) Nun hat er es modifiziert, und zwar so, dass ein Passwort/Seriennummer verlangt wird. Diese ist mir auch bekannt. Ich möchte aber mit Hilfe eines Disassemblers (PE Explorer) das Programm so verändern, dass es funktioniert, wenn ich eben das falsche Passwort oder Seriennummer eingebe. Ich muss dazu dem Befehl "jnz" in "jz" verändern (dies mache ich mit dem Flex Hex Editor). Das Problem ist aber, an der Stelle, in dem im String steht "Seriennummer ist korrekt", ist darüber kein "jnz" zu finden, was ja eigentlich nicht sein kann. Kann man da auch verstecken?? Ich bitte euch um Hilfe.

Zu Sicherheit sei gesagt, dass ich ja damals bei der Programmierung dabei war und mein Freund es ja eigens zu diesem Zweck geändert hat, ich möchte also nichts Illegales machen.
 
Zuletzt bearbeitet:
Das Problem ist aber, an der Stelle, in dem im String steht "Seriennummer ist korrekt", ist darüber kein "jnz" zu finden, was ja eigentlich nicht sein kann.

Welche Stelle meinst du jetzt? Ein String ist zwar im Data Segment, wird jedoch im Text-Segment (den x86-Anweisungen) referenziert.

Ich empfehle dir IDA Pro mit dem Hex-Rays-Decompiler. F5 drücken, zack, Assembler wurde nach C-Quellcode dekompiliert. Ein Decompiler, wo die Meisten aus Unwissenheit versuchen zu erklären, dass man aus Apfelmus kein Apfel mehr machen kann.
 
Zunächst danke für deine Antwort! Das von dir vorgeschlagene Programm habe ich getestet, ich muss aber sagen, dass ich es etwas unübersichtlich finde. Ich arbeite noch nicht lange mit Disassemblern und habe eben mit dem PE Explorer angefangen, den ich auch übersichtlich finde.

Zu deiner Frage:

Welche Stelle meinst du jetzt? Ein String ist zwar im Data Segment, wird jedoch im Text-Segment (den x86-Anweisungen) referenziert.

Also, ich öffne die genannte "exe- Datei" und starte anschließden den Disassembler. Im unteren Fenster des Disassemblers sthet "Unprocessed data", "Strings", "View1" usw. Im Reiter "Strings" stehen nun alle Zeichen (länger als 3 Zeichen, glaueb ich), die ja irgendwo im Programm vorkommen, darunter auch "Lotto-Fee (so heißt das Programm) ist nun freigeschaltet" oder eben" Lotto-Fee konnte nicht freigeschalten werden bzw. Seriennummer ungültig".

Wenn ich nun also den String "Lotto-Fee ist freigeschaltet" anklicke komme ich im Fenster über den Strings zu den Assembler Befehlen, also "mov", "call", "jnz" usw. Und da sieht man ja dann (es wird ja von oben nach unten abgearbietet, wo im Speicher bzw. welcher Bereich dafür verantworlich ist, dass "...freigeschaltet" steht. Und dann suche ich ja nach den Referenzen. Wenn ich nun über dei Hexadezimale an diesen "Ort" der Referenzen springe, dann sehe ich die Assemblerbefehle. Aber genau da steht eben nirgendwo "jnz". Kann mir da bitte jemand weiterhelfen?

Edit: Kann man sowas "verstecken"?`Wie gesgat, ich beschäftige mich nicht lange damit. Aber so könnte man ja auch ein anders Programm bearbeiten, da muss es doch einen Schutz geben.
 
Zuletzt bearbeitet:
Also erst einmal mit Hex Rays IDA Pro und dem Decompiler auf ein kleines Lotto-Programm loszugehen finde ich ein wenig mit Kanonen auf Spatzen, zumal es ja auch zu dem Compiler meines Wissens nach keine Demo-Version gibt ;).

Verstecken lässt sich eigentlich alles in Programmen, z.B. könnte der String nicht vollständig vorliegen, sondern aus Stückchen zusammengebastelt werden oder der vorliegende String ist nur eine Ablenkung oder ähnliches.
Es kann aber auch gut sein, dass du ohne es zu merken in einer Subroutine des Programms gelandet bist, welche nur dafür zuständig ist, die entsprechende Fehlermeldung auszuwerfen. Die Lösung wäre in diesem Fall, wieder aus der Routine heraus zu gehen und sich anzuschauen, von wo aus die Routine aufgerufen wird und ob es da eine Möglichkeit gibt, die Routine zu umgehen und die korrekte Routine aufzurufen (oder noch besser, das Programm so umzuschreiben, dass sämtliche Überprüfungen auf Richtigkeit der Seriennummer jede beliebige Nummer akzeptieren).

Ich würde dir dafür den OllyDbg Debugger empfehlen, damit kannst du Schritt für Schritt das Programm durchgehen und genau schauen, ab wo es dann zu Problemen kommt.
Als gutes Tutorial (bzw. sogar als ganze Tutorial Reihe) kann ich nur Lena's Tutorials empfehlen, zu beziehen von hier: Reversing for Newbies - Complete / Lenas Reversing for Newbies / Downloads - Tuts 4 You
 
Zunächst auch dir vielen Dank!

zumal es ja auch zu dem Compiler meines Wissens nach keine Demo-Version gibt ;)

Also ds Tool ist Freeware, das schon, aber es liegt mir nicht wirklich.

z.B. könnte der String nicht vollständig vorliegen, sondern aus Stückchen zusammengebastelt werden oder der vorliegende String ist nur eine Ablenkung oder ähnliches.

Wie kann ich das feststellen? Gibt es da dann Hinweise, die darauf hindeuten?

welche nur dafür zuständig ist, die entsprechende Fehlermeldung auszuwerfen.

Auch das ist sehr gut möglich, da ich erst dabei bin, mich in die Materie allgemein einzuarbeiten.

Die Lösung wäre in diesem Fall, wieder aus der Routine heraus zu gehen und sich anzuschauen, von wo aus die Routine aufgerufen wird

Wie kann man das am besten machen bzw. feststellen?

die Routine zu umgehen und die korrekte Routine aufzurufen (oder noch besser, das Programm so umzuschreiben, dass sämtliche Überprüfungen auf Richtigkeit der Seriennummer jede beliebige Nummer akzeptieren).

Nun ja, gehen tut das auf jeden Fall, nur ist es wohl nicht immer ganz einfach.

Ich würde dir dafür den OllyDbg Debugger empfehlen, damit kannst du Schritt für Schritt das Programm durchgehen und genau schauen, ab wo es dann zu Problemen kommt.

Ich werde ihn mir laden und testen. Danke! Auch danke für das Tutorial!

Edit: Mal eine dumme Frage, mithilfe eines Disassemblers ist es möglich, jedes Programm ohne Seriennummer zu nutzen oder ein Spiel ohne original CD/DVD. Dort wird es doch aber sicher schwerer sein, oder?

Edit2: Wo stehen denn im OllyDbG die Strings??
 
Zuletzt bearbeitet:
IDA Pro gibt es auch als Freeware (in einer älteren Version), ja. Der Decompiler von Hex-Rays allerdings ist keine Freeware und wie gesagt soweit ich weiß nicht als Demo verfügbar.
Am besten siehst du das, indem du das Programm einmal durchgehst oder indem du Schleifen erkennst, die Stückweise auf Speicherbereiche mit Zeichen oder Textstücken verweisen, dafür benötigt man aber ein wenig Erfahrung.
Wenn du das Programm in OllyDbg geöffnet hast, kannst du einfach an den Anfang der Routine gehen und dann unten in der Infoleiste ablesen (bzw. per Rechtsklick zu den aufrufenden Orten springen).
Calls.jpg

Wundere dich hier nicht über die Farben, die benutze ich nur, um die verschiedenen Anweisungen und Verweise besser auseinander zu halten.

Ja, theoretisch kannst du mit einem Debugger jedes Spiel oder Programm nutzen ohne Restriktionen, das ist allerdings illegal, erfordert jede Menge Ahnung, die Entwickler versuchen ihrerseits dich davon abzuhalten, ihre Programme zu analysieren etc. Wird also nicht so leicht ;).

Strings kannst du einfach suchen, indem du einen Rechtsklick auf das Befehlsfenster machst und dann "Search for"-"All referenced text strings" gehst.

Wie gesagt würde ich dir definitiv zum Einstieg mal die Tutorialreihe von Lena empfehlen, da werden dann auch sämtliche Fenster von OllyDbg genau erklärt.
 
Der Decompiler von Hex-Rays allerdings ist keine Freeware und wie gesagt soweit ich weiß nicht als Demo verfügbar.

Ach so, o.k.

Wenn du das Programm in OllyDbg geöffnet hast, kannst du einfach an den Anfang der Routine gehen und dann unten in der Infoleiste ablesen

Wo ist der Anfang der Routine? Also die erste Code Zeile?

das ist allerdings illegal,

Ja, das weiß ich, das ist auch nicht mein Ziel.

Strings kannst du einfach suchen, indem du einen Rechtsklick auf das Befehlsfenster machst und dann "Search for"-"All referenced text strings" gehst.

Vielen Dank!

Ja, das Tutorial habe ich mir schon angeschaut, also der erste Teil. Es ist nicht ganz so einfach. Kann man das denn verstehen, wenn man das noch nie gemacht hat? Ich kann zwar programmieren, (HTML, ASP und auch etwas Java aus der Schule) aber mit Reverse Enigneering noch nicht.

Hast du vielleicht gute Literatur? Dann würde ich mir auch ein Buch kaufen.
 
@xrayn

Vielen Dank! Nicht das ich der englischen Sprache nicht mächtig wäre (FH-Reife), aber gibt's das auch in deutsch?
 
Deutschsprachige zu dem Thema kenne ich nicht, kann daher auch keine empfehlen. Momentan lese ich eigentlich alles nur auf Englisch nach, bzw. schaue mich in den entsprechenden (ebenfalls englischsprachigen) Foren um.
Es gibt aber zmdst. deutschsprachige Foren zum Thema, welche anscheinend auch von guten Leuten besucht werden: gRn - gERMAN rEVERSING nEWBIEZ
Da bin ich aber selbst nicht angemeldet, ich kenne nur wie gesagt einige der Mitglieder aus anderen Foren und halte sie für fachlich kompetent ;).
 
Ich empfehle ein 3D-Spiel, welches du mit CheatEngine malträtierst (ändere die Player-Position, schieße den Player in den Himmel per Velocity etc.).

Da bekommst du ein gutes Gefühl fürs RE. Hat einen eingebauten Debugger und du kannst sehr einfach die Opcodes ändern. Ein Buch kannst du dir anschaffen, wenn du mal gewisse Themen vertiefen möchtest, ansonsten sehe ich das als Ballast.

Man käuft sich ja auch kein Lehrbuch zum Kochen, wenn man sich ein Schnitzel braten will. Man fängt erstmal an und verbessert sich dann inkrementell über Zeit.
 
O.K., vielen Dank mal an alle!

Edit: Ich habe das buch als PDF im Netz gefunden. Ist es nötig, dass man für RE alles beherrscht, was im Buch erklärt wird?
 
Zuletzt bearbeitet:
Um Gottes Willen, das meiste Geschreibsel ist nutzlos und kannst du dir besser autodidaktisch beibringen.

Chapter Outline


  • Part I: Reversing 101.
    • Chapter 1: Foundations.
    • Chapter 2: Low-Level Software.
    • Chapter 3: Windows Fundamentals.
    • Chapter 4: Reversing Tools.
  • Part II: Applied Reversing.
    • Chapter 5: Beyond the Documentation.
    • Chapter 6: Deciphering File Formats.
    • Chapter 7: Auditing Program Binaries.
    • Chapter 8: Reversing Malware.
  • Part III: Cracking.
    • Chapter 9: Piracy and Copy Protection.
    • Chapter 10: Antireversing Techniques.
    • Chapter 11: Breaking Protections.
  • Part IV: Beyond Disassembly.
    • Chapter 12: Reversing .NET.
    • Chapter 13: Decompilation.
  • Appendix A: Deciphering Code Structures.
  • Appendix B: Understanding Compiled Arithmetic.
  • Appendix C: Deciphering Program Data.

Was brauchst du davon denn schon? Eben.
 
So, ich habe nun angefangen, mit dem buch zu arbeiten. Oben genannte Themen sind nicht unbedingt nötig, da Reverse Malware nicht unbedingt was mit dem zu tun hat, das ich machen will.

Nochmal die Frage: also ich habe davon bisher keine Ahnung. Ich kann zwar HTML und von der Schule etwas ASP, aber is lange her. Aber ich kann es mithilfe des Buches lernen, oder? Also RE?
 
Ungefähr so gut, wie du dir auch Programmierung rein anhand von Büchern beibringen kannst ;).
Bücher sind eine gute Unterstützung und können auch dabei helfen, die theoretischen Hintergründe besser verstehen zu lernen. Um das Thema aber wirklich zu verstehen, solltest du den praktischen Teil ebenfalls trainieren, bestenfalls in einem ähnlichen Tempo, wie du auch mit der Theorie lernst. Mit etwas Glück gibt es für dein Buch bereits Übungen, ansonsten kannst du mal nach sog. Crackmes suchen, das sind kleine Programme, die extra als Herausforderung für (angehende) RE erstellt wurden.
 
Zurück
Oben