nettes plain-binary crackme :-) // [SOLVED]

hallo.

nun dachte ich mir dass ich auch mal ein kleines crackme schreibe, etwas spezielles... ;-)

REGELN:
- kein patchen

LÖSUNG:
- das crackme ist erst dann gelöst wenn jemand das passwort gepostet hat, natürlich schadet es auch nicht zu schreiben wie man an das passwort gekommen ist ;-)

HINWEISE:
Dieses crackme ist ein 16-bit msdos-crackme, das binary ist ein plain-binary (*.com file), benutzt also auch die ms-dos interupts ;-)
Sollte aber kein problem sein da man die ja auch unter windows laufen lassen kann.

--

das binary ist 182 byte gross, gepackt 256, aber regel ist regel also findet ihr im anhang die rar datei

zur schwierigkeits-stufe kann ich nicht viel sagen, ist das erste crackme das ich geschrieben habe, aber wenn ihr erstmal dran sitzt werdet ihr auch rausgefunden haben was an dem *.com file so grauenvoll ist... *gg* - ich tippe also man auf mittel-schwer bis schwer wegen dem aussergewöhnlichen format ;-)

VIEL ERFOLG!!
 
von den vielen Sonderzeichen im Passwort wird man ja irre ;).
Als Tipp: MS eigener Debugger (debug.exe im winordner) kennt hier nicht alle Instruktionen. Besser wäre es einen "fortgeschrittenen" Debugger zu nutzen, z.B
http://www.programmersheaven.com/download/26391/download.aspx
oder nach Turbo Debugger suchen (allgemein: 16-Bit Debugger sollten frei verfügbar sein ;) )
eine nette Liste zum Nachschlagen von Interrupts:
http://spike.scu.edu.au/~barry/interrupts.html
Und schließlich: IDA kann alles:
http://www.programmersheaven.com/download/37637/download.aspx
 
Also ich hab folgendes, aber irgendwie kommt die Kommandozeile nicht mit den Sonderzeichen klar:
k`âÇí???|(
 
hm, bisher war noch nichts richtiges bei...

kleiner tipp: die eingabe besteht aus purem ascii, keine sonderzeichen - nur tastatur.
 
die eingabe besteht aus purem ascii, keine sonderzeichen
dann gibt es also mehrere ;) :
ka? (133)â(131)?(165)ó(162)?(146)?(143)t!
(bei Sonderzeichen ist in Klammern der ASCII Code, denn man per ALT+Code auch in Konsole eintippen kann)
 
Original von CDW
dann gibt es also mehrere ;) :

zeigt der bei dieser eingabe denn an dass es richtig ist? ;-)

hm, ich würde gern mal wissen wie du darauf gekommen bist... denn es ist nur teilweise richtig, was richtig war erfährst du dort:

die ersten beiden bytes bzw die letzten beiden bytes 'ka' und die letzten beiden 't!' sind richtig, das dazwischen leider noch nicht.

aber ist schon nah drann.. ;-)
 
Original von CDW
Dein Crackme sagt aber, es wäre richtig ;)

okay, wir wollen meinem crackme ja auch nicht eine lüge unterstellen :p
mich wundert nur wie du mit dieser eingabe 'durchgekommen' bist...

die verschlüsselung des keys ist einfach:
# include <stdio.h>
# include <string.h>

int main(void)
{
int cnt, len;
char* key = "kaesebrot!";

len = strlen(key);
for (cnt = 0 ; cnt < len ; cnt++)
printf("%x ", (((key[cnt] & 0x0f) << 4) + cnt) | (((key[cnt] & 0xf0) >> 4) + cnt));

printf("\n\n");
return 0;
}

vllt hast du ja schon die passende erklärung dafür... hab ich etwa einen bug einprogrammiert? *lach* - nu wie auch immer...: solved by CDW

nächste crackme kommt bald, aber so wie ich das hier sehe kannst du auch noch ein schweres vertragen ;-)
 
vllt hast du ja schon die passende erklärung dafür
ich habe mir eigentlich nur diese codestelle angeschaut:
Code:
                         ; CODE XREF: sub_17E+2Cj
seg000:0183                 mov     ah, 1
seg000:0185                 int     21h             ; DOS - KEYBOARD INPUT
seg000:0185                                         ; Return: AL = character read
seg000:0187                 mov     ah, [bx]
seg000:0189                 or      ah, ah
seg000:018B                 jz      short loc_1AC
seg000:018D                 mov     dl, al
seg000:018F                 mov     dh, al
seg000:0191                 and     dl, 0Fh
seg000:0194                 and     dh, 0F0h
seg000:0197                 shl     dl, 4
seg000:019A                 shr     dh, 4
seg000:019D                 add     dl, cl
seg000:019F                 add     dh, cl
seg000:01A1                 or      dl, dh
seg000:01A3                 cmp     dl, ah
seg000:01A5                 jnz     short loc_1B2
seg000:01A7                 inc     bx
seg000:01A8                 inc     cl
seg000:01AA                 jmp     short loc_183
im Prinzip Zeichen einlesen, jeweils die die ersten und die letzten 4 Bits "freimachen" und deren Position vertauschen,den Zähler addieren und dann ORen.
Rückrechnung gestaltet sich demnach: nehme das Keybyte:
B6 17 5A 3B 5E 2F 2F FF 4F 1B
ziehe die Position ab (beginngend bei 0) und vertausche die Stellen)
B6-0=B6=6B
17-1==16=61
5A-2=58=85 =(dezimal 133)
3B-3=38=83=(dezimal 131)
usw.
allerdings ist eine ODER Verküpfung im Gegensatzu zu XOR nicht umkehrbar, so dass man imho rechnerisch nicht auf das Passwort kommt.
Dafür werden aber auch viel mehr Möglichkeiten "erschaffen" (ich hab mir schon gedacht,dass es nicht das "Hauptpasswort" war):

Code:
Zeichen 0: k,(dez)107,(hex)6B
Zeichen 1: Q,(dez)81,(hex)51
Zeichen 1: a,(dez)97,(hex)61
Zeichen 2: e,(dez)101,(hex)65
Zeichen 2: ?,(dez)133,(hex)85
Zeichen 3: S,(dez)83,(hex)53
Zeichen 3: c,(dez)99,(hex)63
Zeichen 3: s,(dez)115,(hex)73
Zeichen 3: â,(dez)131,(hex)83
Zeichen 4: e,(dez)101,(hex)65
Zeichen 4: ?,(dez)165,(hex)A5
Zeichen 5: R,(dez)82,(hex)52
Zeichen 5: b,(dez)98,(hex)62
Zeichen 5: ?,(dez)146,(hex)92
Zeichen 5: ó,(dez)162,(hex)A2
Zeichen 6: 2,(dez)50,(hex)32
Zeichen 6: R,(dez)82,(hex)52
Zeichen 6: r,(dez)114,(hex)72
Zeichen 6: ?,(dez)146,(hex)92
Zeichen 7: ▼,(dez)31,(hex)1F
Zeichen 7: /,(dez)47,(hex)2F
Zeichen 7: ?,(dez)63,(hex)3F
Zeichen 7: O,(dez)79,(hex)4F
Zeichen 7: _,(dez)95,(hex)5F
Zeichen 7: o,(dez)111,(hex)6F
Zeichen 7: ⌂,(dez)127,(hex)7F
Zeichen 7: ?,(dez)143,(hex)8F
Zeichen 8: t,(dez)116,(hex)74
Zeichen 9: ◄,(dez)17,(hex)11
Zeichen 9: !,(dez)33,(hex)21
Zeichen 9: É,(dez)144,(hex)90
Zeichen 9: ?,(dez)145,(hex)91
Zeichen 9: á,(dez)160,(hex)A0
Zeichen 9: í,(dez)161,(hex)A1
das sollten jetzt alle Möglichkeiten sein, da per Bruteforce ausprobiert ;)
"Bruteforcer" samt Quelltext im Anhang
 
ui... stimmt... hmmm... okay, war mein erstes crackme - und wenn man es mal ein bisschen scherzhaft sieht ist es ein 'serialme' *grins* - das nächste wird besser ;-)

aber so lernt man ja auch, danke auf jeden fall mal für die erkläreung, cdw ;-)
 
Zurück
Oben