Programm: |
Download Master 2.0 |
Beschreibung: |
Download Master is a program which eases Downloading
Processes. |
URL: |
http://members.tripod.com/~adhamija |
Schutz: |
Name / Seriennummer |
Benötigte Tools: |
- SoftICE 3.24 |
|
- Symantec C/C++ 6.11 (oder irgendein anderer
KOMPATIBLER C/C++ Compiler) |
Anmerkung: |
Muß ich euch wirklich daran
erinnern, daß durch KAUFEN und NICHT stehlen der Software, die ihr benutzt,
sichergestellt wird, daß diese Firmen weiterhin Software für unseren Gebrauch entwickeln
und viel wichtiger, uns weiterhin Herausforderungen bieten ihre oft sehr schlechten
Schutzmechanismen zu knacken.
BTW, Es ist illegal gecrackte Software zu benutzen!
Wenn du nach Cracks oder
Seriennummern auf diesen Seiten suchst, dann verschwendest du deine Zeit. Suche anderswo
im Web unter Warez, Cracks, etc. |
Information: |
Marken- und Produktnamen sind Warenzeichen oder
eingetragene Warenzeichen ihrer jeweiligen Hersteller. |
Stufe: |
(X)Anfänger (X)Fortgeschrittener ( )Profi ( )Experte |
|
Weil der 'Programmierer' von
Download Master sehr dumm zu sein scheint, werde ich nicht wie gewöhnlich mit einer
kurzen Einleitung beginnen; wir werden direkt zum Schutz springen, ihn analysieren und
dann einen KeyGEN in fast keiner Zeit schreiben. Ich denke jeder kann einen KeyGEN für
dieses Zielprogramm programmieren. Dieser KeyGEN wird wie ein Rechner funktionieren - nur
mit weniger Funktionen. Wie auch immer, laßt uns mit dem richtigen cracken anfangen.
Zuerst, laßt uns klarstellen, daß wir alle wissen, daß dies ein Visual Basic 6.0 'Programm'
ist, also müssen die Visual Basic 6.0 Exports geladen sein (wenn ihr die nicht schon
geladen habt, benutzt Symbol Loader - Load Exports - MSVBVM60.DLL und fahr fort). Nun
müssen wir unsere falschen Registrations Details eingeben. Nun ist es an der Zeit, die
richtigen Breakpoints zu setzen. Normalerweise benutze ich - wie immmer - __vbaStrCmp für
Visual Basic Programme. SoftICE wird erscheinen und der folgende Codeausschnitt wird
angezeigt werden:
:00433CAF PUSH EAX ; User Name
:00433CB0 PUSH 0040C514 ; Leerer String
:00433CB5 CALL [MSVBVM60!__vbaStrCmp] ; User Name eingegeben? |
Der obere Codeausschnitt ist
nicht wichtig für uns, also können wir SoftICE verlassen. SoftICE erscheint wieder und
zeigt nun den folgenden Codeausschnitt an:
:00433E77 PUSH EDX ; Registration Key
:00433E78 PUSH 0040C514 ; Leerer String
:00433E7D CALL [MSVBVM60!__vbaStrCmp] ; Registration Key eingegeben? |
Der obere Codeausschnitt ist
auch nicht wichtig für uns, also laßt uns weiter durch den Code in SoftICE tracen. Ihr
werdet an der Routine rtcIsNumeric vorbeikommen, wo überprüft wird, ob euerer
Registration Key eine Nummer ist. Ungefähr 40 F10's weiter, werden ihr auf etwas wie den
folgenden Codeausschnitt stoßen (vergewissert euch, daß das floating point stack
window angezeigt wird mit WF):
:004341A9 PUSH EDX ; Registration Key
:004341AA CALL [MSVBVM60!__vbaR8Str] ; Real von String?
:004341B0 FSTP REAL8 PTR [EBP-0108]
:004341B6 MOV EAX,[EBP-28]
:004341B9 PUSH EAX ; Product ID
:004341BA CALL [MSVBVM60!__vbaR8Str] ; Real von String?
:004341C0 FADD ST(0),ST ; ST + ST
:004341C2 FADD REAL8 PTR [00402AB8] ; ST + 49h
:004341C8 FMUL REAL8 PTR [00402AB0] ; ST * 03h
:004341CE FSUB REAL8 PTR [00402AA8] ; ST - 0Dh
:004341D4 FSUB REAL8 PTR [00402AA0] ; ST - 0Fh
:004341DA FSTSW AX ; ?
:004341DC TEST AL,0D
:004341DE JNZ 00434A09
:004341E4 CALL [MSVBVM60!__vbaFpR8] ; ?
:004341EA FCOMP REAL8 PTR [EBP-0108] ; Überprüfen
:004341F0 FSTSW AX
:004341F2 TEST AH,40
:004341F5 JZ 00434203 ; ungültig => JMP
:004341F7 MOV DWORD PTR [EBP-010C],00000001 ; Flag für
gültigen Schlüssel
:00434201 JMP 0043420D
:00434203 MOV DWORD PTR [EBP-010C],00000000 ; Flag für
ungültigen Schlüssel
:0043420D MOV ECX,[EBP-010C]
... ... |
Der obere Codeausschnitt
scheint die Haupt-Rechen-Routine - und auch die Registration Key Überprüfungs Routine zu
sein. Wenn ihr wissen wollt, was hier geschieht, schaut euch einfach ST0 (float
window) während ihr durch den Code tract an. Ihr werder herausfinden, was der
'Programmierer' dieses Programmes gemacht hat:
Registration Key = ((Product_ID * 2 + 0x49)
* 3) - 0x0D - 0x0F
Ich habe keine Ahnung, warum er zuerst 0Dh und dann 0Fh subt. - er könnte 1Ch subt. um
ein wenig Code zu sparen ... vielleicht ist dies ein weiteres Zeichen für seine Dummheit?
Ok. Nun müssen wir die obere Formel in einen KeyGEN verwandeln. Ich habe die gleiche
Kalkulation wie der Autor benutzt und ich habe außerdem den C++ Quelletxt kommentiert ...
so ich hoffe, ihr werdet ihn alle verstehen. Übrigens, eurere Registrations Details sind
unter HKEY_CURRENT_USER\Software\VB and VBA Program
Settings\Download Master\Settings gespeichert.
// This is the C++ Source Code of my KeyGEN. I hope you like it.
// I've compiled it using Symantec C/C++ 6.11
// DO NOT ASK ME WHY I HAVEN'T SUBSTRACTED 28 AT ONCE! I'VE TRIED TO
// USE THE ASM SOURCE OF THE CALCULATION ROUTINE SO THAT NEWBIES CAN
// UNDERSTAND IT. IF YOU DON'T THINK I SHOULD DO THAT, JUST DROP ME
// A MAIL!
#include <stdio.h>
#include <stdlib.h>
int main()
{
long double Reg_KEY = 0;
long double Product_ID = 0;
printf(" ____ __ __\n");
printf(" / _/_ _ __ _ ___ ____/ /____ _/ /\n");
printf(" _/ // ' \\/ ' \\/ _ \\/ __/ __/ _ `/ /\n");
printf("/___/_/_/_/_/_/_/\\___/_/ \\__/\\_,_/_/\n");
printf(" ____ __ __\n");
printf(" / __ \\___ ___ _______ ___ ___/ /__ ____ / /____\n");
printf(" / /_/ / -_|_-</ __/ -_) _ \\/ _ / _ `/ _ \\/ __(_-<\n");
printf("/_____/\\__/___/\\__/\\__/_//_/\\_,_/\\_,_/_//_/\\__/___/\n\n");
for (;;){
printf("\nDownload Master
2.0 KeyGEN - d0NE bY TORN@DO in '99\n");
printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n");
printf("Product ID: ");
// read in long double
scanf("%Lf", &Product_ID);
if (Product_ID < 0)
{printf("ERROR:
Invalid Product ID!"); return -1;}
else
break;
}
// calculate Registration Key
Reg_KEY = Product_ID + Product_ID; // FADD ST(0),ST
Reg_KEY = Reg_KEY + 73;
// FADD REAL8 PTR
[00402AB8]
Reg_KEY = Reg_KEY * 3;
// FMUL REAL8 PTR
[00402AB0]
Reg_KEY = Reg_KEY - 13;
// FSUB REAL8 PTR
[00402AA8]
Reg_KEY = Reg_KEY - 15;
// FSUB REAL8 PTR
[00402AA0]
// print out the registration details
printf("User Name: (any)\n");
printf("Registration Key: %.Lf\n",Reg_KEY);
return 0;
}
|
Ein weiteres Programm wurde Reverse Engineerd. Irgendwelche Fragen (keine Crack-Anfragen)?
|