Screen area 1024x768 pixels
Reverse Engineering Lab |
+=widY@cL 2011=+ |
from newbie to another |
Tools : W32dasm 8.93 - Softice 3.24 |
MP3 Explorer 2.3.0 Key Generator |
Project Info : Release 10th - 03 April 1999 |
Author | : Pierre LEVY |
Homepage | : http://ourworld.compuserve.com/homepages/pierre_levy/ |
The Essay |
Goto the
registration dialog and we're asked to enter : E-mail address : Enter Pirate Copy as ' E-mail address ' and 0101010 as Registration key ... #bOOm# ... bad message pops up : " Registration info are not correct ! Please try again. " as you wish ! ... disassemble mp3 explorer.exe and double click on bad message text in SDR window and we land here : * Referenced by a (U)nconditional
or (C)onditional Jump at Address:
Notes: Now leave Win32dasm at once ... enter the reg dialog again .. put our entry .. enter sice .. set BPX GetWindowTextA (our trap) .. hit [OK] .. bOOm .. kick F11 once to get the caller .. aah we're in mp3explorer code now .. set BPX 00406B40 ... X [ENTER] .. bOOm ... keep tracing ... snip ... snip .. snip .. AHA ! :
|
But as you can see
if we entered the correct code then we'll return from the call with eax=1. Heii .. are you thinkin somethin ?! ... yep we can
have more fun here ! .. in this case (weak protection schemes), we can also modifies
(patching) the codes so we'll return from the call with eax=1 ... here is some variations
: OR - 00406C22 8BC6 mov eax, esi CHANGE TO B001 mov al, 1 And on succcesfull registration the program stores the license data in mp3 explorer.ini located in windows directory. [User settings] Well .. hope there's something you can learn from this tut ... wait for my next project ! .. |
Source code |
// written in BC++ 5.2 // compile with bcc name.cpp or bcc32 name.cpp #include <iostream.h> #include <stdio.h> #include <conio.h> #include <ctype.h> #include <stdlib.h> void main() { char name[255],ecx=0,eax; int esi=0,ebp=0,edi; clrscr(); cout << " Keygenerator for MP3 Explorer 230 bY widY@cL 2011\n"; cout << " Copyright (C) wOrLd cRaCkinG linK '99\n\n"; cout << " Enter name (minimal 4 char) : ";gets(name); edi=strlen(name); if (edi < 4) exit(0); while (esi < edi) { eax=toupper(name[ecx]); ebp=ebp+eax; esi++;ecx++; } cout << " Registration key : " << (0x1D4C0 - ebp) << endl; getch(); } |
Final Notes |
let me know if you have any comments/suggestions/critics (dot) |