Cel      :Easy Clean 3
Gdzie    :Chip 4/99
Opis     :Program Easy Clean suy do kontrolowanego przeprowadzania             instalacji soft-u
Autor    :Bart
Narzedzia:SoftIce 3.xx

1.Uruchamiamy EasyClean,widzimy,e jest moliwo wprowadzenia danych rejestracyjnych(menu HELP-->REGISTER).
2.Wpisujemy dowolne dane np.Bart oraz 987654321
3.Wchodzimy do SI (CTRL-D) i zakadamy puapk >bpx hmemcpy (puapka na pobieranie textu z okienka edycyjnego GetDlgItemTextA oraz GetWindowTextA nie dziaa poniewa EasyClean to program napisany w Delphi lub BC++ Builder a w tego typu programach w wikszoci przypadkw pobieranie textw z okienek edycyjnych jest realizowane w inny sposb ni GetDlgItemTextA|GetWindowTextA)
4.Wychodzimy z SI (F5) i klikamy na OK
5.OK SoftIce zatrzyma dziaanie programu na wywoaniu funkcji hmemcpy teraz naciskamy jeden raz F5 potem F11 (2 okna edycyjne)
6.Jestemy w rodku.Nastpnie naciskamy 11 razy F12 (p ret) i widzimy co takiego (deadlisting z W32dsm):

:004B9D3C 8D95F8FDFFFF            lea edx, dword ptr ebp+FFFFFDF8]<--nasz s/n
:004B9D42 8B8354040000            mov eax, dword ptr [ebx+00000454]
:004B9D48 59                      pop ecx<--wprowadzony kod
:004B9D49 E89AB7FDFF              call 004954E8<--funkcja sprawdzajca
:004B9D4E 85C0                    test eax, eax<--czy w eax co jest
:004B9D50 0F85CD000000            jne 004B9E23<--jeeli jest skok do ZA_REJESTRACJA

7.Zajrzyjmy do call 004954E8 (F8)

...
:0049553F E82CFFFFFF              call 00495470<--sprawdzenie
:00495544 84C0                    test al, al<--gdy al=0
:00495546 742B                    je 00495573<--to skok ZA_REJESTRACJA
...

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00495546(C)
|
:00495573 BE01000000              mov esi, 00000001<--esi=1
:00495578 C6837C03000000          mov byte ptr [ebx+0000037C], 00

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00495571(U)
|
:0049557F 8BC6                    mov eax, esi<--eax=esi=1 ZA_REJESTRACJA
:00495581 83C440                  add esp, 00000040
:00495584 5F                      pop edi
:00495585 5E                      pop esi
:00495586 5B                      pop ebx
:00495587 C3                      ret<--powrt z call 004954E8

Widzimy wic,e wynik zwracany w al po wyjciu z funkcji call 00495470 ma decydujce znaczenie na przebieg rejestracji tak wic naleaoby zajrze co kryje w sobie call 00495470.

...
:004954B4 8D442440                lea eax, dword ptr [esp+40]<--poprawny serial
:004954B8 8BD4 tu mona patchowa>mov edx, esp<--nasz wprowadzony
:004954BA 33C9                    xor ecx, ecx
:004954BC 8A08                    mov cl, byte ptr [eax]
:004954BE 41                      inc ecx
:004954BF E8B0D7F6FF              call 00402C74<--sprawdzenie 'ostateczne'
:004954C4 0F94C0                  sete al
...

Gdy bedziemy pod 4954b8 sprawdzamy co siedzi pod adresami zawartymi w rejestrach eax i edx.Piszemy >d edx i widzimy nasz wprowadzony serial potem >d eax i nietrudno si domyle,e pod adresem zawartym w edx siedzi ten poprawny serial.Spisujemy go na kartce.Pod 4954bf nastepuje ostateczne porwnanie cigw z eax i edx i jeeli s one takie same to do al zostanie wrzucona warto 1 co spowoduje ,e po wyjciu z tej podfunkcji esi zostanie wyzerowane

:00495544 84C0                    test al, al<--gdy al=0
:00495546 742B                    je 00495573<--to skok ZA_REJESTRACJA,inaczej zerowanie esi
:00495548 33F6                    xor esi, esi<--to co w esi potem idzie do eax
----------------------------------------------------------
xor dziaa tak(jakby kto niepamita)

 1,1 = 0
 1,0 = 1
 0,1 = 1
 0,0 = 0

Daje prawd(1) jeeli oba operandy s rne,daje fasz(0) jeeli oba s takie same
----------------------------------------------------------
8.Wychodzimy z SI (F5) ponownie wprowadzamy dane rejestracyjne(tym razem poprawny serial spisany wczeniej na kartce),klikamy OK wow pojawia si MessageBox "Thanks a lot for registration ".Dane rejestracyjne(poprawne) s zapamitywane w pliku Windows\Ezclean3.key pod postaci zaszyfrowan.
Pod 004954B8 mona dokona zmiany bajtw tak aby do edx rwnie by zapisywany adres poprawnego s/n

:004954B4 8D442440 lea eax, dword ptr esp+40]<--poprawny serial
:004954B8 8BD4 mov edx, esp<--nasz

mov edx,esp naleaoby zamieni na mov edx,eax

8B D4 orygina
8B D0 patch(1 bajt)

Myl,e bez problemu mona dokona tej zmiany a wic dalsze tumaczenia s zbdne.
To by byo na tyle (uff ju mam do ;)).Patch dla tego progsa powinien znajdowa si w archiwum z tym textem.
Dla moich danych serial wyszed taki:

IMIE  :Bart
SERIAL:$154DCFC4U

Cze!Do nastpnego razu.
