Hackerboard WikiHaboBlog

[HaBo]

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

First CrackMe by MrSpider

Diskussion: First CrackMe by MrSpider im Forum Hacks & Crackmes, in der Kategorie Software Home; Servus! Möchte euch hiermit mein erstes CrackMe präsentieren. Sollte theorethisch relativ einfach sein... - Kein Patchen - Gesucht ist das ...

Antwort
Alt 16.11.09, 17:58   #1 (permalink)
 
Registriert seit: 31.03.08
MrSpider Leistung: Facit NTK
Likes: 0
Standard First CrackMe by MrSpider


Servus!

Möchte euch hiermit mein erstes CrackMe präsentieren. Sollte theorethisch relativ einfach sein...

- Kein Patchen
- Gesucht ist das richtige Passwort.

Feedback erwünscht ;-)
EDIT: Fehler behoben, Programm funktioniert jetzt ordnungsgemäß
Ist vllt doch schwieriger als ich anfangs angenommen hatte.

HINT:
[SPOILER]Passt auf Schleifen auf![/SPOILER]

Angehängte Dateien
Dateityp: zip CrackMe1.zip (5,0 KB, 36x aufgerufen)

Geändert von MrSpider (18.11.09 um 20:00 Uhr)
MrSpider ist offline   Mit Zitat antworten
Alt 18.11.09, 19:45   #2 (permalink)
 
Registriert seit: 11.11.09
Painful Leistung: Facit NTK
Likes: 0
Standard

Hat 20 Sekunden gedauert :p
Spoiler   
pw: 13610

Geändert von throjan (20.11.09 um 13:34 Uhr)
Painful ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 18.11.09, 19:59   #3 (permalink)
Themenstarter
 
Registriert seit: 31.03.08
MrSpider Leistung: Facit NTK
Likes: 0
Standard

Komisch, das ist eigentl gar nicht die Lösung ... (Funktioniert bei mir auch nicht)
Da ist wohl was schiefegelaufen beim erneuten Hochladen

So jetzt ist die aktuelle Version oben -_-
MrSpider ist offline   Mit Zitat antworten
Alt 18.11.09, 21:48   #4 (permalink)
 
Registriert seit: 11.11.09
Painful Leistung: Facit NTK
Likes: 0
Standard

Jetzt bist du ein witzbold.
MOV EAX,DWORD PTR DS:[EBX]
ist eax = 3258 und das wird IMMER ausgeführt, egal was man eingibt.
das heisst es wird an 0x004013C7 IMMER gesprungen und somit
natürlich auch nie an der Addresse (was nötig wäre)i:
004013EC. Desweiteren wird die erste Zahl bzw der erste Buchstabe von den eingegeben password garnicht gecheckt.
DH:
Erste Zahl bzw Buchstabe egal.
So weiter....
PW muss sein XBCDEF (erste wird wie gesagt nicht gescheckt ),
damit hier --->
004013A4 |. /7F 1A JG SHORT CrackMe1.004013C0

nicht gesprungen wird und somit nicht 3258 in EAX gepackt wird.
Jedoch ist es egal ob dort gesprungen wird oder in den anderen möglichen jump (in der PW check function) 3258 wird immer in EAX gesetzt.
Weil beide jumps zu der
MOV EAX,DWORD PTR DS:[EBX]
Zeile springen und wie bereits gesagt, ändert sich ebx nicht.
Wers nicht glaubt kann es testen.
Code:
004013C2   |.  3D 5A320000                  CMP EAX,325A
004013C7   |.  7C 1E                        JL SHORT CrackMe1.004013E7
004013C9   |.  C703 BEBA0000                MOV DWORD PTR DS:[EBX],0BABE
004013CF   |>  8D9D E4FDFFFF                LEA EBX,[LOCAL.135]
004013D5   |.  891C24                       MOV DWORD PTR SS:[ESP],EBX
004013D8   |.  E8 83000000                  CALL CrackMe1.00401460
004013DD   |.  8D65 F4                      LEA ESP,[LOCAL.3]
004013E0   |.  31C0                         XOR EAX,EAX
004013E2   |.  5B                           POP EBX                                           ;  CrackMe1.00403016
004013E3   |.  5E                           POP ESI                                           ;  CrackMe1.00403016
004013E4   |.  5F                           POP EDI                                           ;  CrackMe1.00403016
004013E5   |.  5D                           POP EBP                                           ;  CrackMe1.00403016
004013E6   |.  C3                           RETN
004013E7   |>  3D BEBA0000                  CMP EAX,0BABE                                     ; |
004013EC   |.^ 74 E1                        JE SHORT CrackMe1.004013CF                        ; |
ps:
auch wenn das pw pBCDEF ist, damit am anfang gesprungen wird ändert sich EBX nicht
(da der erste Buchstabe doch verglichen wird und zwar mit p, aber egal wie mans dreht und wendet, es wird in eax immer 2258 sein).
Soviel zu deinem neuen hochgeladen crackme nachdem ich dein vorheriges nach 20 sekunden geknackt hab :>

004013EC an der Zeile müsste übrigens gesprungen werden
damit "das kannst du besser" nicht ausgegeben wird, aber ich hab ja erklärt,
das es unmöglich ist das dort gesprungen wird weil dort halt vergleichen wird
ob eax 0xBABE ist.


Insgesamt wird verglichen ob der erste Buchstabe "p" ist, der zweite "B" der dritte "C" der vierte
"D" und der letzte "E"

Geändert von Painful (18.11.09 um 22:00 Uhr)
Painful ist offline   Mit Zitat antworten
Alt 18.11.09, 21:59   #5 (permalink)
Themenstarter
 
Registriert seit: 31.03.08
MrSpider Leistung: Facit NTK
Likes: 0
Standard

Passwort ist (bis auf ersten Buchstaben) richtig. Es gibt noch einen zusätzl. Schutz, ganz am Anfang (welcher eigentl. auch gepatcht werde kann). Dieser Schutz verändert den Wert, welcher letzenendes überprüft wird und dadurch den GoodBoy ausgibt.

Spoiler   
Das Pw wär eigentlich ABCDEF, wobei noch ei weiterer Schutz eingebaut ist, und zwar dass mind. ein Kommandozeilenparameter angegeben ist.

Quellcode:
Spoiler   
Code:
/*
 * main.c
 *
 *  Created on: 16.11.2009
 *      Author: MrSpider
 */

#include <stdio.h>
#include <string.h>

void badBoy(int*);

int main(int argc, char **argv) {

    char buf[255];
    char msg[255];
    int *point;
    char *buf2 = (buf);
    int x = 0x55;
    int bckup = 0;
    int *pb = &bckup;

    if (argc <= 1) {
        int x = 0x3254;
        point = &x;
        int *p = point;
        --(*p);
        strcpy(msg, "Etwas fehlt noch...");
    } else {
        int x = 0x3254;
        point = &x;
    }

    goto NEXT;
    EXIT:
    return 0;
    NEXT:

    printf("Enter password: ");
    fflush(stdout);
    scanf("%s", buf2);

    if (strcmp(buf, "pw?!") == 0) {
        (*point)--;
        strcpy(buf, "Owned");
    }

    *pb = *point;

    int i = 0;
    for (i = 0; i < 6; ++i) {
        if(*(buf+i) == ('A' + i)){
            (*point)++;
        }
    }

    if(*point >= (0x320F ^ x)){
        *point = 0xBABE;
    }

    if(*point == (0xA88A ^ 0x1234)){
        void (*p2) (int*) = &(badBoy);
        p2 += (*point) ^ 0xBABE;
        (p2)(pb);
        goto EXIT;
    }
    printf("Das kannst du besser *g*\n");

    return 0;
}

void badBoy(int *val){
    if(*val == 0x3253 || *val == 0x3252){
        printf("Aber fast. Fast geschafft!");
        return;
    }
    printf("Thinks that's right");
}


Geändert von throjan (20.11.09 um 13:35 Uhr)
MrSpider ist offline   Mit Zitat antworten
Alt 18.11.09, 22:20   #6 (permalink)
 
Registriert seit: 11.11.09
Painful Leistung: Facit NTK
Likes: 0
Standard

Wird überprüft ob die Eingabe ABCDEF war

Geändert von Painful (20.11.09 um 12:04 Uhr)
Painful ist offline   Mit Zitat antworten
Alt 19.11.09, 19:45   #7 (permalink)
Themenstarter
 
Registriert seit: 31.03.08
MrSpider Leistung: Facit NTK
Likes: 0
Standard

Also, wie im vorherigen Post gesagt, ist der zusätzliche Schutz, dass mind. ein Kommandozeilenparameter angegeben wird (zB: crackme.exe -param). Der Check auf "pw?!" ist ein FakeCheck, welche durch die Compileroptimierung noch weiter verschleichert, sodass es gleicht als ob auf BCDEF verglichen wird. Sieh dir den Quellcode in meinem vorherigen Post an, dann sollte es eigentlich klar sein. --> Its not a Bug, it's a feature.

Code:
00401310  |.  837D 08 01    CMP DWORD PTR SS:[EBP+8],1 <-- Vergleich ob mind. ein Kommandozeilenparameter
00401314  |.  8985 E4FDFFFF MOV DWORD PTR SS:[EBP-21C],EAX
0040131A  |.  0F8E E4000000 JLE CrackMe1.00401404 <-- Wenn nicht springe nach unten und führe anderen Code aus
00401320  |.  BB 54320000   MOV EBX,3254 --X
00401325  |.  899D DCFDFFFF MOV DWORD PTR SS:[EBP-224],EBX --X
0040132B  |.  8D9D DCFDFFFF LEA EBX,DWORD PTR SS:[EBP-224] --X
00401331  |> /C70424 003040>MOV DWORD PTR  SS:[ESP],CrackMe1.00403000 ; |||ASCII "Enter password: " <-- Hierhin wird dann zurückgesprungen
--X: Code wird nicht ausgeführt, bei weniger als 1 Kommandozeilenparameter. Wenn mal also den Jump noped und als PW ABCDEF benutzt, läuft alles super.

Geändert von MrSpider (19.11.09 um 19:54 Uhr)
MrSpider ist offline   Mit Zitat antworten
Alt 20.11.09, 12:06   #8 (permalink)
 
Registriert seit: 11.11.09
Painful Leistung: Facit NTK
Likes: 0
Standard

Naja stimmt das es so klappt, die Sache ist jedoch die,
der Anwender einer Software muss wissen wie diese
normalerweise funktioniert. DH wäre dein Programm
richtige Software, würde es auch bei normalen
ausführen kein Password akzeptieren.
Painful ist offline   Mit Zitat antworten
Alt 20.11.09, 16:57   #9 (permalink)
Themenstarter
 
Registriert seit: 31.03.08
MrSpider Leistung: Facit NTK
Likes: 0
Standard

Dafür würde man dann einfach eine veränderte Verknüpfung oder noch besser einen Launcher verwenden.
MrSpider ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » First CrackMe by MrSpider
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