Crackme
-
Hallo an alle,
ich hatte mir mal einen Seriennummer Algorithmus kopiert um ihn in mein Crackme einzusetzen.
Leider ist mir da was schief gelaufen. Es macht nicht das was es soll.
Ich benutze Windoof und VC++ Express. Für Antworten wäre ich sehr dankbar!Hier der Code:
#include <stdio.h> #include <stdlib.h> #include <cstring> #include <string> #include <iostream> using namespace std; void IsDebuggerLoaded(); int cool; int DebbuggerLoaded=0; int fake=0; int main(int argc,char *argv[]){ unsigned char user[256]; int serialeingabe[256]; char serialeingabe2[256]; int serial[256]; int len=8,i=0; unsigned int ebp_44=0x0,ebp_170=0x0,ebp=0x0,eax=0x0,ecx=0x0,edx=0x0,esi=0x0,edi=0x0,wert2=0x0; int wert[7]; bool wahr=0; //if(argc != 2){ return -1; } cout << "Bitte geben sie ihren Namen ein: "; cin >> user; cout << "\nBitte geben sie ihre Seriennummer ein: "; cin >> serialeingabe2; serialeingabe[256]=serialeingabe2[256]; //strncpy(user,argv[1],8); /* Statische Werte zuweisen */ wert[0] = 0x0190; wert[1] = 0x0123; wert[2] = 0x0486; IsDebuggerLoaded(); wert[3] = 0x0162; wert[4] = 0x0432; wert[5] = 0x0575; wert[6] = 0x084; wert[7] = 0xDEAD; /* Diese Schleife rechnet die Buchstaben des Namens zusammen ... */ for(i=0;i<len;i++) ebp_44 += user[i] + 0xAFFE; IsDebuggerLoaded(); /* In dieser Schleife findet die eigentliche Serialberechnung statt ... */ //for(i=0;i<8;i++) //{ eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[0]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0xFF46FFFF; edi = edx + edi + 0x14D; serial[0] = edi; wahr=1; eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[1]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0x4569FFFF; edi = edx + edi + 0x14D; serial[1] = edi; wahr=1; eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[2]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0x1763FFFF; edi = edx + edi + 0x14D; serial[2] = edi; wahr=1; eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[3]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0x496FFFFF; edi = edx + edi + 0x14D; serial[3] = edi; wahr=1; eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[4]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0x4833FFFF; edi = edx + edi + 0x14D; serial[4] = edi; wahr=1; eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[5]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0x256FFFFF; edi = edx + edi + 0x14D; serial[5] = edi; wahr=1; eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[6]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0x7641FFFF; edi = edx + edi + 0x14D; serial[6] = edi; wahr=1; eax = ebp_44; ecx = len; eax = eax / ecx; eax = eax * ebp_44; eax = eax * wert[7]; ecx = 0xFFFF; wert2 = eax; IsDebuggerLoaded(); eax = eax / ecx; edx = wert2 % ecx; ecx = 0x104; ecx = ecx - ebp_44; edi = ecx + edi; edi = edi ^ 0x4934FFFF; edi = edx + edi + 0x14D; serial[7] = edi; wahr=1; //} eax = user[2]; eax += 0x4783; ecx = len; IsDebuggerLoaded(); eax /= ecx; serial[8] = eax; serial[5]*=fake; cout << serial[0]; //printf("%4.4X-%4.4X-%4.4X-%4.4X-%4.4X-%4.4X-%4.4X-%4.4X-%4.4X\n\n",serial[0],serial[1],serial[2],serial[3],serial[4],serial[5],serial[6],serial[7],serial[8]); if (serial==serialeingabe) cout << char(83) << char(101) << char(114) << char(105) << char(101) << char(110) << char(110) << char(117) << char(109) << char(109) << char(101) << char(114) << char(32) << char(114) << char(105) << char(99) << char(104) << char(117) << char(105) << char(103) << char(33); else cout << char(83) << char(101) << char(114) << char(105) << char(101) << char(110) << char(110) << char(117) << char(109) << char(109) << char(101) << char(114) << char(32) << char(102) << char(97) << char(108) << char(115) << char(99) << char(104) << char(33);//"Seriennummer falsch!"; std::cin >> cool; } inline void IsDebuggerLoaded() { if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; if (DebbuggerLoaded==1) fake=2; else fake=1; }
Danke im Voraus!
Jermuk
-
und wo liegt der fehler? oder gehst du davon aus, jeder hier liest sich jetzt ohne weitere infos den quelltext durch, um zu wissen, was nicht passt?
hast du schon den debugger benützt?
-
Also mein Problem ist, wenn ich mir eine Serial ausgeben lassen und diese dann eingabe kommt Passwort falsch! Ihr könntet mir auch andere Algorithmen zeigen, dies wäre sehr nett.
Gruß
Jermuk