Mysle, ze wszyscy którzy zagladneli na strony CRackPl potrafia juz obslugiwac ProcDump i sa wstanie rozpakowac wiekszoc plików uruchomieniowcyh spakowany lub szyfrowanych. Okazuje sie, ze na podobnej zasadzie dziala wiekszosc komercyjnycch pakietów autoryzacyjnych do ograniczen czasowych i wersji trial oprogramowania. Zanamy juz takie pakiety jak TimeLock lub Vbox, które mimo zastosowania skomplikowanych algorytmów szyfracji i rozbudowanych procedur ochrony daja sie w kilka sekund usunac z programów.
Z reguly sa dwa rodzaje takich pakietów zabezpieczen, jedne które wprowadzaja procedury i funkcje juz na poziomie pisania kodu programu i po kompilacji na trwale wbudowane w program i drugie dolaczajace i szyfrujace juz gotowe pliki uruchomieniowe. Te pierwsze moga byc lepsze lub gorsze ale czasami moga spelniac swoja role, natomiast te drugie sa po prostu do niczego. Przykladem bylo juz TimeLock lub Vbox, teraz przedstawie inne softSENTRY oferowane min. w zestawie www.componentsource.com i mozna je znalesc min. na plytkach1/99 tego zestawu.
Ogólne zalozenia programu sa dobre, program umozliwia przygotowanie skryptów tworzacych procedury trial takie jak time limit, limit uruchomien, okienka rejestracyjne, okienka informacyjne i generowanie kodu dolaczanego do wykonywalnych plików exe lub bibliotek dll. Wlasciwie wszystko pieknie tyle, ze usuniecie tego kodu z pliku uruchomieniowych nie nastreczy rzadnych problemów nawet poczatkujacym crackerom a nawet wrecz ulatwi im zcrackowanie programu.
Zobaczmy co ten program wyrabia z kodem np. w pliku sentry32.exe (sam pakiet jest zabezpieczony swoim kodem):
Po wstepnej analizie kodu startowego, znajdujemy sprawdzanie ograniczen i wywolywanie odpowiednich okienek dialogowych lub informacyjnych. Mozna sie bawic w modyfikacje tego kodu ale nie ma to sensu. W kazdym razie dochodzimy do takiego fragmentu kodu :
014F:004A3B27 FF1558A44A00 CALL [USER32!UnregisterClassA] 014F:004A3B2D E87E000000 CALL 004A3BB0 014F:004A3B32 E819000000 CALL 004A3B50 014F:004A3B37 8B45B8 MOV EAX,[EBP-48] 014F:004A3B3A 50 PUSH EAX 014F:004A3B3B FF15D0A34A00 CALL [KERNEL32!ExitProcess] 014F:004A3B41 8B45B8 MOV EAX,[EBP-48] 014F:004A3B44 E900000000 JMP 004A3B49
Wywolanie CALL 4A3B50 wywoluje nastepna procedure, która nsa bedzie interesowac.
Szukamy bowiem kodu glownego programu z pominieciem kodu pakietu SoftSENTRY. Zobaczmy wiec na to wywolanie :
014F:004A3B50 56 PUSH ESI 014F:004A3B51 A1C0894A00 MOV EAX,[004A89C0] 014F:004A3B56 33C9 XOR ECX,ECX 014F:004A3B58 8B7002 MOV ESI,[EAX+02] 014F:004A3B5B 337006 XOR ESI,[EAX+06] 014F:004A3B5E 33700A XOR ESI,[EAX+0A] 014F:004A3B61 033548884A00 ADD ESI,[004A8848] 014F:004A3B67 A1C0894A00 MOV EAX,[004A89C0] 014F:004A3B6C 41 INC ECX 014F:004A3B6D 41 INC ECX 014F:004A3B6E 8B5006 MOV EDX,[EAX+06] 014F:004A3B71 31548EF8 XOR [ECX*4+ESI-08],EDX 014F:004A3B75 A1C0894A00 MOV EAX,[004A89C0] 014F:004A3B7A 8B500A MOV EDX,[EAX+0A] 014F:004A3B7D 31548EFC XOR [ECX*4+ESI-04],EDX 014F:004A3B81 83F914 CMP ECX,14 014F:004A3B84 7CE1 JL 004A3B67 014F:004A3B86 8B0DF4884A00 MOV ECX,[004A88F4] 014F:004A3B8C E88FF5FFFF CALL 004A3120 014F:004A3B91 FFD6 CALL ESI <---- !!!! 014F:004A3B93 6A00 PUSH 00 014F:004A3B95 6820634A00 PUSH 004A6320 014F:004A3B9A 6810634A00 PUSH 004A6310
Krótkie przesledzenie tego kodu pozwoli nam znalesc wywolanie CALL ESI, które jak sie okazuje wywoluje nasz glówny program. Widzimy tu fragment kodu przygotowujacy EntryPoint do kodu glównego i zachowujacy go w rejestrze ESI. Wywolanie Call ESI prowadzi do :
014F:00414CA0 64A100000000 MOV EAX,FS:[00000000] 014F:00414CA6 55 PUSH EBP 014F:00414CA7 8BEC MOV EBP,ESP 014F:00414CA9 6AFF PUSH FF 014F:00414CAB 68B8424400 PUSH 004442B8 014F:00414CB0 68C4AA4100 PUSH 0041AAC4 014F:00414CB5 50 PUSH EAX 014F:00414CB6 64892500000000 MOV FS:[00000000],ESP 014F:00414CBD 83EC60 SUB ESP,60 014F:00414CC0 53 PUSH EBX 014F:00414CC1 56 PUSH ESI 014F:00414CC2 57 PUSH EDI 014F:00414CC3 8965E8 MOV [EBP-18],ESP 014F:00414CC6 FF15B0374500 CALL [KERNEL32!GetVersion] 014F:00414CCC A3A4D74400 MOV [0044D7A4],EAX
To jest juz nasz glówny program, zaczynajacy sie w moim wypadku od cs:414CA0 i taka wartosc byla zapisana w ESI. Poniewaz jak pisalem, kody zabezpieczen przylaczane sa do gotowego pliku uruchomieniowego ich usuniecie nie powinno sprawic problemów. Nalezy dojc do poczatku glównego programu i zapisac obraz pliku na dysku z pamieci i odtworzyc nowa strukture pliku exe. Sposobów jest wiele ale najlatwiejszy to ProcDump.
Tworzymy sobie nowa sekcje w pliku script.ini
[softSentry] L1=LOOK E8,19,00,00,00 ;szukamy pierwszego call 43a3b50 L2=BP ; pulapka na znalezionym adresie L3=LOOK FF,D6 ; szuka drugiego call ESI L6=BP ; zastawia na nim pulapke L7=STEP ; i dalej juz sledzi zapisujac rozpakowany program
No i program pieknie nam usunie zabezpieczenia SoftSENTRY. Jezeli jeszcze zagladniemy do naglówka pliku znajdziemy niepotrzebna sekcje 20/20teacj, która mozemy usunac za pomoca edytora PE zawartego w ProcDump.
Proste prawda, szkoda tylko, ze praca nad niezlym pakietem zabezpieczen owocuje tak kiepskim zabezpieczeniem. Po prostu przerost formy nad trescia.
CrackPl - (c) hyperreal.art.pl 1998