Progr : MacroMagic v 3.3d (CD Enter 7(1)/98) Tools : SoftIce,Wdsm32 Cel : Znalezienie kodu unlock
Ostatnio szukalem programów do skryptów i makr pod Wina95. Trafilem na programik MacroMagic. Nie prezentuje on soba nic szczególnego jednak postanowilem opisac sposób jego zcrackowania. Dlaczego, ano dlatego aby zaprezentowac sposób dzialania gdy podstawowe schematy zawodza. Moze istnieje szybki sposób zcrackowania tego programu, ale opisze sposób mojego dzialania gdyz moze on pomóc przy innych programach.
Program zezwala 30-day trial dzialania i umozliwia wpisanie samego kodu unlock bez user itp. Wydawac by sie moglo, ze problemu nie bedzie. A jednak.
1. Zakladam pulapki typu getdlgitemtexta, getwindowtexta, hmemcpy ale program dziesiatki razy je wywoluje w niezrozumialych dla mnie petlach i procedurach.
2. Lapanie MessageBox lub wykorzystanie uchwytów okien (task, hwnd itp) nie daje nam niczego.
3. Sztubacka metoda sledzenia programu na chybil trafil po kilku minutach staje sie nudna i nie daje efektu.
Co zrobic ?
Ladujemy i dekompilujemy macros.exe w wdasm32. Wiemy, ze program po wpisaniu blednego kodu daje okienko "You have entered invalid...". Szukam w zdekompilowanym progu tego komunikatu. Znajdujemy :
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004511F2(C)
|
:004512B7 43 inc ebx
:004512B8 83FB1F cmp ebx, 0000001F
:004512BB 0F85F5FDFFFF jne 004510B6
* Possible StringData Ref from Code Obj ->"You have entered an invalid registration "
|
:004512C1 B8E0134500 mov eax, 004513E0
:004512C6 E8ADB1FEFF call 0043C478
Widzimy, ze do tej procedury nastepuje skok z 004511F2 a wiec szukamy tego skoku:
:004511DE FF75F4 push [ebp-0C] :004511E1 8D45E4 lea eax, dword ptr [ebp-1C] :004511E4 E87F020000 call 00451468 :004511E9 8B55E4 mov edx, dword ptr [ebp-1C] :004511EC 58 pop eax :004511ED E8AA2AFBFF call 00403C9C :004511F2 0F85BF000000 jne 004512B7 <-- nasz skok :004511F8 B890000000 mov eax, 00000090
Na pierwszy rzut modyfikujemy exe (robimy kopie) i usuwamy skok do procedury o blednym kodzie. Uruchamiamy program, wpisujemy dowolny kod i okazuje sie ze program sie rejestruje. Wychodzimy z programu i uruchamiamy ponownie. Ok jest zarejestrowany. Uruchamiamy teraz wersje niemodyfikowany i nadal jest zarejestrowany. Bingo !. Widac, ze w ini albo rejestrach zostala zapisana info o zarejestrowaniu. Mozemy na tym skonczyc. Zcrackowalismy program.
Ale glównym celem jest znalezienie poprawnego kodu. Ladujemy macros.exe do softice, F10 i jestesmy na starcie programu w segmencie kodu. Postanawiam zalozyc pulapke na 004511F2 czyli na skoku "jne" znalezionym w Wdasm32.
Uruchamiamy program, wpisujemy byle co i okazuje sie, ze SoftICE lapie interesujaca nas instrukcje "jne". Czyli jestesmy w tym samym fragmencie kodu co powyzej z Wdasm32.
Ciekawie wygladaja instrukcje przed skokiem good/bad. Zakladamy wiec pulapke wczesniej np. na push [ebp-0c] i ponownie uruchamiamy program i ciekawe rzeczy znajdujemy pod adresem zapisanym w rejestrze edx - poprawny kod - 16862508
push [ebp-0C] lea eax, dword ptr [ebp-1C] call 00451468 mov edx, dword ptr [ebp-1C] <--- poprawny kod pop eax call 00403C9C <--- porównanie kodów jne 004512B7 <--- skok good/bad mov eax, 00000090 call 004026D0
Tak wiec udalo sie nam znalezc poprawny kod unlock. Okazuje sie, ze program jest bardzo latwy do skrackowania. Opisalem go tylko dlatego aby przedstawic mozliwosc wspólpracy wdasm32 i SoftICE. Taki sposób dzialania daje duze mozliwosci i nalezy pamietac, ze jak sie nie uda tym lub tym programem to nalezy wykorzystac oba. Oczywiscie byl to najprostszy sposób wykorzystania informacji z wdasm32 do zalozenia pulapki w SoftICE.