MacroMagic 3.3d by GustawKit

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.