SoftSENTRY protect by GustawKit

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