
Tutorial 1 - MED V2.0 (german)
==============================
Wie cracke ich MED - den fuer meine Begriffe wohl besten Programmierertexteditor
fuer OS/2, und jetzt auch fuer Windows.
Nun zuerst mal die benoetigten Tools:
- SoftIce
- einen Hex-Editor fuer den Batch
- W32Dsm
1.) Mit Softice Programmstelle finden die euere Eingaben ueberpueft
Med starten
Hilfe->Registrieren
Cntr-D um Softice zu starten
bpx getdlgitemtexta .. Breakpoint auf Dialogtextauswertung setzen
Name+Code eingeben -> Enter druecken
SoftIce kommt in den Vordergrund
F5 Druecken um SoftIce wieder zu verlassen.
SoftIce meldet sich wieder, da nun der Breakpoint wegen der 2-ten
Dialogzeile aktiv wird. Nun einfach F11 druecken um die Funktion
zu verlassen und an die Stelle des Aufrufs zurueckzukehren.
Nun sieht man folgende Codezeilen
LEA EDX,[ESP+0C] // Euer Code
LEA EAX,[ESP+74] // Euer Name
PUSH EDX
PUSH EAX
CALL 00474B27 // Checkt Laenge der Eingaben
ADD ESP,08
TEST AX,AX
JZ 00474B27
MOV EAX,[004A5B7C]
LEA ECX,[ESP+0C] // Euer Code
LEA EDX,[ESP+74] // Euer Name
PUSH ECX
PUSH EDX
PUSH 00000411
PUSH EAX
CALL 00476290 // Checkt Eueren Code
ADD ESP,10 // liefert Wert != 0 zurueck falls Code nicht
TEST AX,AX // stimmen sollte
JZ ADRESS // DAS IST ES
// Einfach in JNZ patchen und schon sind wir fertig ?!?
Falls man diesen Patch nun durchfuehrt, kann man sich beliebig registrieren,
doch verdammt, wenn man Med erneut startet kommt wieder die Meldung
"nicht registriert".
Nun Med macht einen Eintrag in die Registrierung unter:
LOCAL_USER\MICROSOFT\MULTIMEDIA\X-KMT Wrapper\
mit den Eintraegen KmtxL und KmtxN. Die Eintraege entsprechen eueren
Eingaben im Registrierungsdialog mit der kleinen Änderung das von jedem
ASCII-Zeichen eins abgezogen wurde. z.B. "b"-1 = a;
Wie und wo das im Code gemacht wird ist relativ einfach zu sehen falls
man etwas den Code rund um unserem 1. Breakpoint beobachtet, bzw. immer
den Inhalt der verschiedenen Register im Auge behaelt.
Das heisst, wir muessen auch diese Abfrage beseitigen um Med entgueltig
zu cracken! Doch wie stellen wir das am besten an.
2.) Wie stelle ich fest welche Dll's ein Programm verwendet, und welche
Funktionen es exportiert ?
Eine relativ einfache Moeglichkeit besteht darin WD32dsm zu starten, und
das betreffende Programm zu laden, in unserem Fall MED.exe.
Das sieht dann so, oder so aehnlich aus !
Disassembly of File: med.exe
Code Offset = 00000400, Code Size = 00088A00
Data Offset = 0008A400, Data Size = 00016A00
Number of Objects = 0005 (dec), Imagebase = 00400000h
Object01: .text RVA: 00001000 Offset: 00000400 Size: 00088A00 Flags: 60000060
Object02: .rdata RVA: 0008A000 Offset: 00088E00 Size: 00001600 Flags: 40000040
Object03: .data RVA: 0008C000 Offset: 0008A400 Size: 00016A00 Flags: C0000040
Object04: .idata RVA: 000A9000 Offset: 000A0E00 Size: 00002000 Flags: C0000040
Object05: .rsrc RVA: 000AB000 Offset: 000A2E00 Size: 00015600 Flags: 40000040
+++++++++++++++++++ MENU INFORMATION ++++++++++++++++++
There Are 2 Menu Resources in This Application
But they are in an unrecognized Format
+++++++++++++++++ DIALOG INFORMATION ++++++++++++++++++
There Are No Dialog Resources in This Application
+++++++++++++++++++ IMPORTED FUNCTIONS ++++++++++++++++++
Number of Imported Modules = 7 (decimal)
Import Module 001: KERNEL32.dll
Import Module 002: USER32.dll
Import Module 003: GDI32.dll
Import Module 004: comdlg32.dll
Import Module 005: ADVAPI32.dll ----> ist zustaendig fuer die Registrierung
Import Module 006: SHELL32.dll
Import Module 007: COMCTL32.dll
:
:
:
Import Module 005: ADVAPI32.dll
Addr:000AA8FE hint(0117) Name: RegCloseKey
Addr:000AA90C hint(0136) Name: RegQueryValueExA -> Das koennen wir gut gebrauchen
Addr:000AA920 hint(012E) Name: RegOpenKeyExA
Addr:000AA930 hint(0141) Name: RegSetValueExA
Addr:000AA942 hint(011B) Name: RegCreateKeyExA
Ich persoehnlich verwende W32dsm auch dazu den Fileoffset fuer eine bestimmte
Programmzeile im Code festzustellen. Nun das laeuft immer nach Schema F ab.
1. Code der geaendert werden soll wird in SoftIce festgestellt
In unserem Beispiel waehre es z.B.
1B:00412329 jz 00412348
2. Die Programmzeile in W32dsm suchen
:00412329 741D je 00412348
\
\HexCode fuer je=74 Offset=1D (jne=75)
In der letzten Zeile von W32dsm steht dann der Offset der Codezeile
im File @Offset 00011729h in File:med.exe
3. Hex-Editor oeffnen, den Offset suchen und den Code an diese Stelle aendern !
3.) Registrierungsabrage verhindern
Falls ADVAPI32.dll noch nicht im WINICE.dat File eingtragen wurde, muesste es
an dieser Stelle nachgehlt werden. Unter WindowsNT befindet es sich unter
WinNt\system32\drivers\winice.dat. Win9X ?!? -> einfach mal FileFind starten !
a.) bpx RegQueryValueExA
b.) med neu starten
c.) F11
d.) F11
e.) ein paar mal F10
f.) nun solltet Ihr folgende Codezeilen sehen
:
:
1B:0041231C PUSH ESI // Code
1B:0041231D PUSH EBX // Name
CALL 004748E0 // ohne Bedeutung
ADD ESP,08
TEST AX,AX
JZ 00412348
PUSH ESI
PUSH EBX
CALL 00411E50 // ist sehr interessant, checkt ob Code OK ist
ADD ESP,08
TEST AX,AX
JZ 00412348 // Guter-Schlechter Junge, wir sind doch wohl
: // die guten Buben darum machen wir aus dem
: // jz ein jnz
:
ENDLICH wir haben es geschaft, nun koennen wir uns mit jedem Namen registrieren !
Aenderungen mittels HEX-Editor
11738 : 740E -> 750E (Dialogabfrage)
73DE5 : 0F84BD000000 -> 909090909090 (Abfrage der Registrierung)
cracked!
Appendix: Mail to p_m_a@gmx.net
Written with MED V2.0 :-) 01.01.1999
Auch die letzte Version 2.11 ist nach diesem Schema zu cracken !
Zusaetzliche Informationen zu den benoetigten Programmen findet Ihr im
Internet, oder im Notfall auch bei mir, siehe Mail-Adresse !
Ich hoffe dieses Tutorial hilft euch weiter, so wie mir die Tutorials
von +ORC, Xoanon, Laxity und vielen anderen geholfen hat.