Easy Clean by Bart

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

Uruchamiamy EasyClean,widzimy,ze jest mozliwosc wprowadzenia danych rejestracyjnych(menu HELP--REGISTER).

Wpisujemy dowolne dane np.Bart oraz 987654321

Wchodzimy do SI (CTRL-D) i zakladamy pulapke >bpx hmemcpy (pulapka na pobieranie textu z okienka edycyjnego GetDlgItemTextA oraz GetWindowTextA nie dziala poniewaz EasyClean to program napisany w Delphi lub BC++ Builder a w tego typu programach w wiekszosci przypadków pobieranie textów z okienek edycyjnych jest realizowane w inny sposób niz GetDlgItemTextA|GetWindowTextA)

Wychodzimy z SI (F5) i klikamy na OK

OK SoftIce zatrzymal dzialanie programu na wywolaniu funkcji hmemcpy teraz naciskamy jeden raz F5 potem F11 (2 okna edycyjne)

Jestesmy w srodku.Nastepnie naciskamy 11 razy F12 (p ret) i widzimy cos 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 sprawdzajaca
:004B9D4E 85C0                    test eax, eax      <--czy w eax cos jest
:004B9D50 0F85CD000000            jne 004B9E23      <--jezeli jest skok do ZLA_REJESTRACJA

Zajrzyjmy do call 004954E8 (F8)

...
:0049553F E82CFFFFFF              call 00495470<--sprawdzenie
:00495544 84C0                    test al, al<--gdy al=0
:00495546 742B                    je 00495573<--to skok ZLA_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 ZLA_REJESTRACJA
:00495581 83C440                  add esp, 00000040
:00495584 5F                      pop edi
:00495585 5E                      pop esi
:00495586 5B                      pop ebx
:00495587 C3                      ret<--powrót z call 004954E8

Widzimy wiec,ze wynik zwracany w al po wyjsciu z funkcji call 00495470 ma decydujace znaczenie na przebieg rejestracji tak wiec nalezaloby zajrzec co kryje w sobie call 00495470.

...
:004954B4 8D442440                lea eax, dword ptr [esp+40]<--poprawny serial
:004954B8 8BD4 tu mozna patchowac>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 sie domyslec,ze pod adresem zawartym w edx siedzi ten poprawny serial.Spisujemy go na kartce.Pod 4954bf nastepuje ostateczne porównanie ciagów z eax i edx i jezeli sa one takie same to do al zostanie wrzucona wartosc 1 co spowoduje ,ze po wyjsciu z tej podfunkcji esi zostanie wyzerowane

:00495544 84C0                    test al, al<--gdy al=0
:00495546 742B                    je 00495573<--to skok ZLA_REJESTRACJA,inaczej zerowanie esi
:00495548 33F6                    xor esi, esi<--to co w esi potem idzie do eax

xor dziala tak(jakby ktos niepamietal)

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

Daje prawde(1) jezeli oba operandy sa rózne,daje falsz(0) jezeli oba sa takie same

Wychodzimy z SI (F5) ponownie wprowadzamy dane rejestracyjne(tym razem poprawny serial spisany wczesniej na kartce),klikamy OK wow pojawia sie MessageBox "Thanks a lot for registration ".Dane rejestracyjne(poprawne) sa zapamietywane w pliku Windows\Ezclean3.key pod postacia zaszyfrowana.

Pod 004954B8 mozna dokonac zmiany bajtów tak aby do edx równiez byl zapisywany adres poprawnego s/n

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

mov edx,esp nalezaloby zamienic na mov edx,eax

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

Mysle,ze bez problemu mozna dokonac tej zmiany a wiec dalsze tlumaczenia sa zbedne.

To by bylo na tyle (uff juz mam dosc ;)).Patch dla tego progsa powinien znajdowac sie w archiwum z tym textem.

Dla moich danych serial wyszedl taki:

IMIE  :Bart
SERIAL:$154DCFC4U

Czesc! Do nastepnego razu.