| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: Algorithmen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi Leute, ich hab da mal eine Frage zu Algorhitmen und zwar zu einem ganz bestimmten und zwar dem ...
![]() |
| | #1 (permalink) |
| Anzeige Hi Leute, ich hab da mal eine Frage zu Algorhitmen und zwar zu einem ganz bestimmten und zwar dem hier: Code: #include <iostream>
#include <windows.h>
using namespace std;
int main() {
//Algo funktioniert:
//unsigned char MyKey[15] = "QNUL0JCT71YZML";
unsigned char MyKey[15] = "ABCDEFGHJKLOKM"; //Klappt natürlich nicht
unsigned long int ABC[] = {'\x41','\x42','\x43','\x44','\x45','\x47','\x48','\x49','\x4A','\x4B','\x4C','\x4D','\x4E','\x4F','\x50','\x51','\x52','\x53','\x54','\x55','\x56','\x57','\x58','\x59','\x5A','\x30','\x31','\x32','\x33','\x35','\x37'};
unsigned long int sEDX=0, sESI=0, sECX=0, loop=0, loop2=0, loop3=0;
unsigned long int esi=0, eax=0, edi=0, esp=0, ecx=0;
for(loop2 = 0;loop2<14;loop2++) { //Jeder Buchstabe durchläuft eine Schleife
for(loop=0;loop<32;loop++) { //Zaehlt
if(MyKey[loop2]==ABC[loop])
break;
}
loop++;
for(loop3=0;loop3<5;loop3++){
//edi ist einzige beeinflußbare Variable
//ecx ist abhaengig von dem geraden durchlaufenen buchstaben und edi
edi = loop; //loop ist immer verdoppelt
loop = loop*2;
ecx = loop2; //ecx nimmt die Buchstaben schleife an
edi >>= 4;
edi &= 1;
edi <<= ecx;
if(loop3==0)
ecx = sEDX;
else if(loop3==1)
ecx = sESI;
else if(loop3==2)
ecx = sECX;
ecx |= edi;
if(loop3==0)
sEDX = ecx;
else if(loop3==1)
sESI = ecx;
else if(loop3==2)
sECX = ecx;
}
}
eax = loop3;
//Vorerst fertig
cout << sESI << " " << sEDX << " " << sECX << endl;
loop2 = sESI; //muss 16183 rauskommen
loop = sEDX; //muss 3989 rauskommen
eax = sECX; //muss 4358 rauskommen
loop2 &= 16383; //3FFFh 11111111111111b
cout << loop2 << " " << eax << endl;
loop <<= 14;
loop2 |= loop; //loop2 und loop werden aneinander gehaengt
cout << loop2 << " " << eax << endl;
eax >>= 10;
loop2 <<= 4; //100b
cout << loop2 << " " << eax << endl;
eax &= 15; //1111b
loop2 |= eax; // hier muss ne zahl mit nur 1 stehen
cout << loop2 << " " << eax << endl;
if(loop2==1045951396)
cout << "Valid Key" << endl;
else
cout << "Nein:" << loop2 << endl;
system("PAUSE");
return 0;
} EDIT: Wer keine große Lust hat sich den Code groß anzuschauen: Im Endeffekt läuft es bei diesem Algorhitmus daraus hinaus das der Eingabestring mit 14 Buchstaben und Zahlen in eine Zahl umgerechnet wird und diese dann mit 1045951396 verglichen wird. Das Prinzip ist ähnlich einer Einwegverschlüssellung, deswegen habe ich ja bedenken, ob man es schafft dazu einen KeyGenerator zuschreiben. Vielen Dank im voraus! Gruß craven | |
| | |
| | #2 (permalink) |
| Registriert seit: 14.07.08 ![]() Likes: 0 | Warum keygen wenn man ne HardCoded Serial hat LOL Einmal auslesen und ich habe mein key 1045951396..... |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter | Großer Denkfehler: 1045951396 gilt hier wie ein Hashwert,d.h. er ist der Wert den dein Key haben soll, wenn er umgerechnet wurde. Natürlich kann man hier einfach die letzte Abfrage patchen sprich aus if(loop2==1045951396), if(loop2==loop2) machen, das ganze ist aber nicht der Sinn der Sache. Ich möchte nämlich wissen, ob man an Hand von diesem Algorithmus einen Keygen schreiben kann. Achja dein Key sollte mindestens 14 Stellen haben. gruß craven |
| | |
| | #4 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Der Decompilercode ist ja grauenhaft - Asm wäre in dem Fall deutlich klarer
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #5 (permalink) |
| Themenstarter | Ja war auch eigentlich früher mal Assembler, wie vielleicht unschwer zu erkennen ist EDIT: hier als Assembler Code, wobei ich finde dass der c++ Code trotzdem verständlicher ist Code: 009A0670 33F6 XOR ESI,ESI ; LOSGEHTS ESI == 0 009A0672 0FBE5434 10 MOVSX EDX,BYTE PTR SS:[ESP+ESI+10] ; TOUPPER SCHLEIFE 009A0677 52 PUSH EDX ; BUCHSTABE WIRD ÜBERGEBEN 009A0678 FF15 A0E0A300 CALL DWORD PTR DS:[<&MSVCRT.toupper>] ; msvcrt.toupper 009A067E 83C4 04 ADD ESP,4 009A0681 33D2 XOR EDX,EDX 009A0683 0FBE8A 28D5A400 MOVSX ECX,BYTE PTR DS:[EDX+A4D528] 009A068A 3BC1 CMP EAX,ECX ; GEHT DAS ALPHABET DURCH 009A068C 74 08 JE SHORT womble.009A0696 009A068E 42 INC EDX 009A068F 83FA 20 CMP EDX,20 009A0692 ^ 7C EF JL SHORT womble.009A0683 009A0694 33D2 XOR EDX,EDX 009A0696 33C0 XOR EAX,EAX 009A0698 8BFA MOV EDI,EDX ; EDI=0 009A069A 8BCE MOV ECX,ESI ; ECX WIRD GESETZTESI IST DER COUNTER ZWISCHEN 1 und E 009A069C C1FF 04 SAR EDI,4 ; EDI 0!! 009A069F 83E7 01 AND EDI,1 009A06A2 03D2 ADD EDX,EDX ; EDX MAL 2 009A06A4 D3E7 SHL EDI,CL ; EDI NULL 009A06A6 8B4C84 20 MOV ECX,DWORD PTR SS:[ESP+EAX*4+20] ; ECX WIRD GESETZT 009A06AA 0BCF OR ECX,EDI 009A06AC 894C84 20 MOV DWORD PTR SS:[ESP+EAX*4+20],ECX ; ECX, EAX ZWISCHEN 0 UND 4 009A06B0 40 INC EAX 009A06B1 83F8 05 CMP EAX,5 009A06B4 ^ 7C E2 JL SHORT womble.009A0698 ; EAX WIRD BIS 5 GEZAEHLT 009A06B6 46 INC ESI 009A06B7 83FE 0E CMP ESI,0E ; ABgleich mit der String Laenge 009A06BA ^ 7C B6 JL SHORT womble.009A0672 009A06BC 8B7424 24 MOV ESI,DWORD PTR SS:[ESP+24] ; ESI WIRD GESETZT 009A06C0 8B5424 20 MOV EDX,DWORD PTR SS:[ESP+20] ; EDX WIRD GESETZT 009A06C4 8B4C24 28 MOV ECX,DWORD PTR SS:[ESP+28] ; ECX WIRD GESETZT 009A06C8 81E6 FF3F0000 AND ESI,3FFF ; AND 3FFF(16383d) S: AENDERT NIX 009A06CE C1E2 0E SHL EDX,0E ; DA 0 NIX 009A06D1 8BC1 MOV EAX,ECX ; ECX=EAX 009A06D3 0BF2 OR ESI,EDX ; NIX 009A06D5 C1F8 0A SAR EAX,0A ; 10 Bits nach Rechts Aus 30F0 wird 10 009A06D8 C1E6 04 SHL ESI,4 ; Mal 2 hoch 4(16d) 009A06DB 83E0 0F AND EAX,0F ; Wird mit 16 AND 009A06DE BA 20D5A400 MOV EDX,womble.00A4D520 009A06E3 0BF0 OR ESI,EAX ; ESI GROSS EAX KLEIN(10) 009A0705 B9 A4F3573E MOV ECX,3E57F3A4 ; VERGLEICH NOCHMAL 009A070A 3BF1 CMP ESI,ECX 009A070C 74 3F JE SHORT womble.009A074D |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Zukunftsträchtige Algorithmen... | enkore | Cryptography & Encryption | 9 | 09.08.09 21:17 |
| Algorithmen für die SAM | subzeroo | Cryptography & Encryption | 20 | 24.10.05 18:17 |
| Algorithmen für WPA | Elderan | Cryptography & Encryption | 4 | 23.10.05 20:13 |
| Laufzeitanalyse bei Algorithmen | Dawen | Code Kitchen | 4 | 17.05.05 15:36 |
| Datenstrukturen und Algorithmen | Dawen | Code Kitchen | 0 | 14.04.05 23:05 |