Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

patchMe#2

Diskussion: patchMe#2 im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige Hallo Crackme- und Patchme- Fans! Diese Patchme ist eine kleine Windows Applikation, die wieder mal "Hello World" ausgeben soll. ...

Antwort
Alt 09.10.10, 00:41   #1 (permalink)
 
Registriert seit: 21.08.10
josh Leistung: Z3
Likes: 3
erledigt patchMe#2

Anzeige

Hallo Crackme- und Patchme- Fans!

Diese Patchme ist eine kleine Windows Applikation, die wieder mal "Hello World" ausgeben soll. Die Ausgabe erfolgt, nachdem in das Text-Eingabefeld die richtige Zahl eingegeben wurde, und anschliessend der "Ausgabe"-Knopf gedrückt wurde.

Wieder sind mindestens zwei Lösungen möglich. Bei der gewünschten Lösung muss genau ein Bit geändert werden.

Gesucht sind wieder der File-Offset des zu patchenden Bytes, sowie alter und neuer Wert dieses Bytes.

Schön wäre eine kleine Beschreibung des Lösungsweges.

Die Schwierigkeit ist sicher höher als mein vorheriges patchme, sollte aber auch nicht allzu hoch sein. Etwas Windows-Programmiererfahrung ist sicherlich von Vorteil.

Und jetzt wieder: Happy patching!

-josh

Angehängte Dateien
Dateityp: zip patchme.zip (10,1 KB, 38x aufgerufen)

Geändert von josh (05.11.10 um 00:18 Uhr)
josh ist offline   Mit Zitat antworten
Alt 03.11.10, 00:18   #2 (permalink)
 
Registriert seit: 21.05.09
Biohazard90 Leistung: Facit NTK
Likes: 0
Standard

Ich fand es etwas verwirrend, weil es gibt keine gültige Zahl, die ohne patchen Hello World anzeigen würde.

Von der Schwierigkeit her würde ich es bei einfach-mittel ansiedeln.

Lösung   
Lösungen, wie man das macht gibt es viele, man könnte sogar nur die Resourcen vertauschen und würde mit der Zahl 130 zum richtigen ergebnis kommen. Da hier aber ein Patch verlangt ist:

Code:
00021116    .  B9 C8000000             MOV ECX,0C8
wird zu

Code:
00021116    .  B9 C7000000             MOV ECX,0C7
danach 130 eingeben und man kriegt Hello World! angezeigt. Zu erwähnen ist vllt auch noch IsDebuggerPresent(), obwohl man darauf mittlerweile dank netter Plugins kaum noch rücksicht nehmen muss.

Geändert von Biohazard90 (03.11.10 um 00:22 Uhr)
Biohazard90 ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 03.11.10, 22:33   #3 (permalink)
Themenstarter
 
Registriert seit: 21.08.10
josh Leistung: Z3
Likes: 3
Standard

Hallo biohazard,

erstmal recht herzlichen Dank für deine Lösung (die aber noch keine ist).

Zitat:
Ich fand es etwas verwirrend, weil es gibt keine gültige Zahl, die ohne patchen Hello World anzeigen würde.
Ja, das hast du völlig richtig bemerkt, und das Verhalten ist beabsichtigt. Es ist eine (alte) Regel, wenn du im Code etwas verheimlichen willst, oder erschweren willst: Keine Informationen für den "Angreifer". Ein geübter Cracker kann mit jeder Information etwas anfangen, daher : Nur etwas mitteilen, wenn es wirklich nötig ist! Diese Grundregel wird allerdings sehr häufig missachtet, auch wenn es um professionellen Kopierschutz geht.

Übrigens, die "IsDebuggerPresent" Geschichte wird vom Compiler, bzw. dem Framework (VStudio) eingefügt. Es ist zwar ein (ganz kleiner) Anti-Debug Schutz in der SW vorhanden, der geht aber nicht mit "IsDebugger Present".

Die von dir präsentierte Lösung erzeugt zwar das gesuchte Hello World, benötigt aber mehr als ein Bit für den gesuchten Patch, C8->C7: vier Bit anders! Zur gewünschten Lösung dürfte es aber nur noch ein kurzer Weg sein .
Und zur Schwierigkeit: Da sind wir genau einer Meinung!

-josh

Geändert von josh (03.11.10 um 22:39 Uhr)
josh ist offline   Mit Zitat antworten
Alt 04.11.10, 17:04   #4 (permalink)
 
Registriert seit: 27.09.05
ReDoX Leistung: Z3
Likes: 4
Standard

So nach einem Jahr mal wieder angemeldet und direkt ans Werk gemacht

Lösung   
Der Anti-Debugtrick besteht aus zwei GetTickCounts, wenn die Differenz größer als 5 Sekunden ist wird das Programm einfach geschlossen (PostQuitMessage).

Es wird eine Resource mit dem eingegebenen Namen gesucht (FindResourceExA). Da es nur zwei numerische Resourcen gibt, die beide den Namen 130 tragen, ist 130 unsere gesuchte Eingabe. Der Unterschied zwischen den beiden Resourcen ist der Typ. Einmal 56 und einmal 57. Der Typ ist ist hardcodiert, aber wird aus zwei Werten berechnet. Zum einen eine Globale Variable mit dem Wert 256 und zum anderen eine Konstante 200, welche einfach subtrahiert wird. Die 200 müssten wir auf 199 bringen, was 4 Bits drehen würde. Aber die 256 können wir mit nur einem Bit auf 257 bringen. Es wird nun versucht die Resource 257 - 200 = 57 zu laden, welche den verschlüsselten Text "Hello World!" enthält. Die andere Resource(56) enthält den verschlüsselten Text "Leider noch nicht richtig."


Gepatch wird also:

Code:
00401192   C700 00010000    MOV DWORD PTR DS:[EAX],100
->

Code:
00401192   C700 01010000    MOV DWORD PTR DS:[EAX],101



//redox
ReDoX ist offline   Mit Zitat antworten
Alt 04.11.10, 20:21   #5 (permalink)
 
Registriert seit: 21.05.09
Biohazard90 Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Zitat von josh Beitrag anzeigen
Hallo biohazard,

erstmal recht herzlichen Dank für deine Lösung (die aber noch keine ist).


Ja, das hast du völlig richtig bemerkt, und das Verhalten ist beabsichtigt. Es ist eine (alte) Regel, wenn du im Code etwas verheimlichen willst, oder erschweren willst: Keine Informationen für den "Angreifer". Ein geübter Cracker kann mit jeder Information etwas anfangen, daher : Nur etwas mitteilen, wenn es wirklich nötig ist! Diese Grundregel wird allerdings sehr häufig missachtet, auch wenn es um professionellen Kopierschutz geht.

Übrigens, die "IsDebuggerPresent" Geschichte wird vom Compiler, bzw. dem Framework (VStudio) eingefügt. Es ist zwar ein (ganz kleiner) Anti-Debug Schutz in der SW vorhanden, der geht aber nicht mit "IsDebugger Present".

Die von dir präsentierte Lösung erzeugt zwar das gesuchte Hello World, benötigt aber mehr als ein Bit für den gesuchten Patch, C8->C7: vier Bit anders! Zur gewünschten Lösung dürfte es aber nur noch ein kurzer Weg sein .
Und zur Schwierigkeit: Da sind wir genau einer Meinung!

-josh
Ach lol ich dachte Byte und nicht Bit , mist wenn man das zuschnell überfliegt^^
Biohazard90 ist offline   Mit Zitat antworten
Alt 04.11.10, 23:57   #6 (permalink)
Themenstarter
 
Registriert seit: 21.08.10
josh Leistung: Z3
Likes: 3
Standard

@ReDoX:
Kein weiterer Kommentar von mir. Die Analyse ist perfekt! Super Beschreibung!

@biohazard90
Kein Problem, der Lösungsweg war klar!

Nochmal ein Dank an beide Solver!
josh ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » patchMe#2
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61