4110 Cracking Group

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.