Ergebnis 1 bis 8 von 8

Thema: crackme easy und die Probleme...

  1. #1
    Registered User
    Registriert seit
    Sep 2009
    Beiträge
    193
    Renommee
    55

    crackme easy und die Probleme...

    hi,
    Ich las das tolle Assemblerbuch, Nur um das Crackme zu knacken.
    Die Anleitung von http://www.cdw.de.vu/ habe ich mir ca.20 mal durchgelesen.

    Auszug von OllyDBG und meine Kommentare:
    PHP-Code:
    ok,die nächsten 6 Zeilen sind für die Eingabe von USer und Password...
    004010E6  |. 50             PUSH EAX                                 ; /Count              
    004010E7  
    |. 8D45 E0        LEA EAX,DWORD PTR SS:[EBP-20]            ; |
    004010EA  |. 50             PUSH EAX                                 ; |Buffer
    004010EB  
    |. 6A 67          PUSH 67                                  ; |ControlID 67 (103.)
    004010ED  |. FF75 08        PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
    004010F0  
    |. E8 67000000    CALL <JMP.&USER32.GetDlgItemTextA>       ; \GetDlgItemTextA
    jetzt ist in EDI und ESP mein PAssword
    .

    ;
    Der kommende Lea Befehl fürht folgendes aus:
    ;
    Address=00403012, (ASCII "Falsch!!!     ") ;
    ;
    EDX=00140608
    004010F5  
    |. 8D15 12304000  LEA EDX,DWORD PTR DS:[403012]  ;1.Frage Warum wird hier "falsch" in EDX reinkopiert?
    004010FB  |. 33C0           XOR EAX,EAX
    004010FD  
    |. 33C9           XOR ECX,ECX

    004010FF  
    |> 8A040F         /MOV AL,BYTE PTR DS:[EDI+ECX] ;2.Fragehier wird 
    00401102  
    |. 38E0           |CMP AL,AH                    ;nur die länge der Passwords 
    00401104  
    |. 74 03          |JE SHORT crackme(.00401109   ;ermittelt?!
    00401106  |. 41             |INC ECX
    00401107  
    |.^75 F6          \JNZ SHORT crackme(.004010FF

    00401109  
    |> BB 06000000    MOV EBX,6    ;ok,es wird die Zahl 6 nach EBX kopiert.

    0040110E  |. 49             DEC ECX      ;okder Inhalt ECX Minus 1

    ;Der kommende MOV Befehl führt folgendes aus:
    ;
    Stack DS:[0012FB91]=36 ('6')
    ;
    AL=00
    ;Jump from 0040111C
    0040110F  
    |> 8A040F         /MOV AL,BYTE PTR DS:[EDI+ECX]

    ;
    Der kommende MOV Befehl führt folgendes aus:
    ;
    DS:[0040300D]=72 ('r')
    ;
    AH=00
    00401112  
    |. 8A240E         |MOV AH,BYTE PTR DS:[ESI+ECX]
    00401115  |. 32C3           |XOR AL,BL
    00401117  
    |. 38E0           |CMP AL,AH                   ;ah=72(rund al=30(0)
    00401119  |. 75 05          |JNZ SHORT crackme(.00401120
    0040111B  
    |. 49             |DEC ECX
    0040111C  
    |.^75 F1          \JNZ SHORT crackme(.0040110F
    0040111E  
    |. 74 0E          JE SHORT crackme(.0040112E

    Der folgede LEA Befehl führt folgendes aus
    :
    Address=00403012, (ASCII "Falsch!!!     ")
    EDI=0012FB8C, (ASCII "123456")
    Jump from 00401119
    00401120  
    |> 8D3D 12304000  LEA EDI,DWORD PTR DS:[403012]

    Der folgede LEA Befehl führt folgendes aus:
    Address=00403012, (ASCII "Falsch!!!     ")
    ESI=00403008 (crackme(.00403008), ASCII "urokkr'''"
    00401126  |. 8D35 12304000  LEA ESI,DWORD PTR DS:[403012]

    0040112C  |. EB 0C          JMP SHORT crackme(.0040113A    ;hier wird zur MessageBox"Falsch" gesprungen
    0040112E  
    |> 8D3D 21304000  LEA EDI,DWORD PTR DS:[403021]
    00401134  |. 8D35 38304000  LEA ESI,DWORD PTR DS:[403038]
    0040113A  |> 6A 40          PUSH 40                                  ; /Style MB_OK|MB_ICONASTERISK|MB_APPLMODAL
    0040113C  
    |. 56             PUSH ESI                                 ; |Title
    0040113D  
    |. 57             PUSH EDI                                 ; |Text
    0040113E  
    |. FF75 08        PUSH DWORD PTR SS:[EBP+8]                ; |hOwner
    00401141  
    |. E8 1C000000    CALL <JMP.&USER32.MessageBoxA>           ; \MessageBoxA
    00401146  
    |. C9             LEAVE 
    Wo soll da das Password stehen?
    Ich hoffe, ihr kommt mit dem Zeilenumbruch nicht durcheinander.
    PS In html php VBasic C und C++ tute ich mir Leichter. :-)

  2. #2
    Registered User
    Registriert seit
    Dec 2000
    Beiträge
    766
    Renommee
    251

    Re: crackme easy und die Probleme...

    Du musst ein bischen vor dem GetDlgItemA-Text gucken.
    Dort wird ein Zeiger auf die Speicherstelle 00403008 nach esi geladen.
    Im Speicher steht da der String: "'j{.fo}z.k}.///"

    Interessant wird es dann hier:

    Code:
    .text:0040110C mov     al, [edi+ecx]
    .text:0040110F mov     ah, [esi+ecx]
    .text:00401112 xor     al, bl
    .text:00401114 cmp     al, ah
    .text:00401116 jnz     short loc_40111B
    .text:00401118 dec     ecx
    .text:00401119 jnz     short loc_40110C
    Dort wird Zeichen für Zeichen deines Eingabestring XOR mit der Länge dieses Strings genommen und dann mit dem entsprechenden Zeichen aus dem Speicher verglichen.
    Im Prinzip eine ganz einfache Codierung.

    Spoiler:

    Code:
           
    
    #include <stdio.h>
    
    int main() 
    {
        char test[15] = "j{.fo}z.k}.///";
    
        for(int i = 0; i < 15; i++){
            test[i] = test[i] ^ 14;
        }
        printf("%s\n",test);
    }


    Beim nächstenmal Poste bitte genau die Aufgabenstellung und nen Link auf das CrackMe.
    Außerdem ist das das falsche Forum. Siehe RE.

    Gruß IcePic
    METAL NEVER DIES!

    http://www.linuxassembly.de

  3. #3
    Registered User
    Registriert seit
    Sep 2009
    Beiträge
    193
    Renommee
    55

    Re: crackme easy und die Probleme...

    ok, thx.
    wegen Forum, ich bin doch bei :
    Systemnahe Programmierung ?!

    zum Problem:
    ....die Speicherstelle 00403008 nach esi geladen. <--- das habe ich verstanden.

    Ich habe den Bereich Rot makiert und ich sehe den Inhalt von esi.

    Die folgende Befehle kenne ich, aber wo siehst du die Befehle.
    PHP-Code:
    .text:0040110C mov     al, [edi+ecx]
    .
    text:0040110F mov     ah, [esi+ecx]
    .
    text:00401112 xor     albl
    .text:00401114 cmp     alah
    .text:00401116 jnz     short loc_40111B
    .text:00401118 dec     ecx
    .text:00401119 jnz     short loc_40110C 
    Das C Programm habe ich verstanden :-)
    Ich habe viele Puzzel in Kopf, die ich verstehe. Aber ich bekomme sie nicht zusammen.

  4. #4
    Registered User
    Registriert seit
    Dec 2000
    Beiträge
    766
    Renommee
    251

    Re: crackme easy und die Probleme...

    Haste doch selber gepostet:

    ;Der kommende MOV Befehl führt folgendes aus:
    ;DS:[0040300D]=72 ('r')
    ;AH=00
    00401112 |. 8A240E |MOV AH,BYTE PTR DS:[ESI+ECX]
    00401115 |. 32C3 |XOR AL,BL
    00401117 |. 38E0 |CMP AL,AH ;ah=72(r) und al=30(0)
    00401119 |. 75 05 |JNZ SHORT crackme(.00401120
    0040111B |. 49 |DEC ECX
    0040111C |.^75 F1 JNZ SHORT crackme(.0040110F
    0040111E |. 74 0E JE SHORT crackme(.0040112E
    Das Array wird von hinten durchgelaufen. In ecx steht ja die Länge.

    MOV AH,BYTE PTR DS:[ESI+ECX]
    Das ließt den codierten String nach AH. Davor wird das ecx`te Zeichen deines Eingabestrings nach AL geladen. Dann kommt das XOR wobei irgendwo vorher noch ecx nach bl kopiert wurde.

    Wie gesagt, ist eher Reverse Engineering als systemnahe Programmierung.

    Schreib erstmal deine eigenen Crackmes und guck dir den Quelltext im Disassembler an.
    METAL NEVER DIES!

    http://www.linuxassembly.de

  5. #5
    Registered User
    Registriert seit
    Sep 2009
    Beiträge
    193
    Renommee
    55

    Re: crackme easy und die Probleme...

    hi,
    ich bins wieder :-)
    megathx habs hinbekommen.
    kurz zu Crackme nächsten crackme, ich nehme an du kennst die alle schon :-).
    Ich habe das Password wieder per Papier und Bleistift gelöst, aber es kommt kein "Key ok" sondern ein "hyjh´fnet"
    ähhh hab ich jetzt mein Ziel erreicht?

  6. #6
    Moderator
    Registriert seit
    Aug 2004
    Beiträge
    1.310
    Renommee
    1286

    Re: crackme easy und die Probleme...

    Wenn du weisst, dass das Ergebnis "Key ok" sein sollte, würde ich sagen Nein. Allerdings kannst du ja mal einen Link auf die Seite posten wo du das CrackMe her hast.
    Was steht an den Speicheradressen 0x00403021 und 0x00403038 ?

  7. #7
    Registered User
    Registriert seit
    Sep 2009
    Beiträge
    193
    Renommee
    55

    Re: crackme easy und die Probleme...


  8. #8
    Moderator
    Registriert seit
    May 2002
    Beiträge
    653
    Renommee
    1014

    Re: crackme easy und die Probleme...

    Da sind auch eine Menge andere Crackmes - daher bitte das nächste mal den Namen miterwähnen.

    Das dürfte "alte crackmes -> crackme3" sein. Aus dem Jahre 2002.
    Btw: k.A warum ich dem Ding die Stufe "Mittel" verpasst habe

    Im wesentlichen drüfte es diese Routine sein
    Code:
    00401114  |. /E3 1E         JECXZ SHORT crackme(.00401134
    00401116  |. |49            DEC ECX
    00401117  |> |8A040F        /MOV AL,BYTE PTR DS:[EDI+ECX]  ;<-- hardkodierte Serial
    0040111A  |. |8A240E        |MOV AH,BYTE PTR DS:[ESI+ECX]  ;<--- eingabe
    0040111D  |. |32C3          |XOR AL,BL                      ;in BL ist die Eingabelänge
    0040111F  |. |38E0          |CMP AL,AH
    00401121  |. |75 03         |JNZ SHORT crackme(.00401126
    00401123  |. |49            |DEC ECX
    00401124  |.^|75 F1         \JNZ SHORT crackme(.00401117
    00401126  |> |74 06         JE SHORT crackme(.0040112E
    Dekodieren dürfte wie vorher funktionieren (Taschenrechner oder gleich etwas umpatchen):
    Spoiler:

    Code:
    0040111D      32E3          XOR AH,BL
    0040111F      882439        MOV BYTE PTR DS:[ECX+EDI],AH
    00401122      90            NOP
    schreibt eine gültige Serial rein (statt der Eingabe)

    Die Serialroutine hat einen kleinen "Bug" (ok, ist ein Feature, damit man mehrere Serials eingeben kann) . Und zwar ist das erste Zeichen eigentlich egal. Du musst allerdings auf folgende Faktoren achten: die Länge der Serialeingabe sollte gleich einem bestimmten Wert sein (z.B der Länge des "Vergleichsstrings" *wink* ). Zudem solltest Du darauf achten, Leerzeichen mit einzugeben.
    Hier mal eine gültige Serial:
    Spoiler:

    "+rackmenow "
    bzw. Musterserial:
    "crackmenow "

    Beides natürlich ohne " (die sind nur dafür da, damit man das Leerzeichen am Ende sieht)
    Geändert von CDW (01.03.2010 um 14:16 Uhr)
    Selig, wer nichts zu sagen hat und trotzdem schweigt!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. safeguard easy problem
    Von Helmoot im Forum (In)Security allgemein
    Antworten: 5
    Letzter Beitrag: 09.10.2006, 16:02
  2. easy IT Praktikum in Dublin
    Von Merowig im Forum Technisches Off-Topic
    Antworten: 2
    Letzter Beitrag: 16.05.2006, 00:45
  3. Safeguard easy PROBLEM!!
    Von BigBruder im Forum Kryptologie
    Antworten: 4
    Letzter Beitrag: 28.11.2003, 16:41
  4. Alcatel easy db
    Von BobMorane im Forum (Mobile) Kommunikation
    Antworten: 4
    Letzter Beitrag: 14.12.2001, 22:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •