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.