| [
Usunięcie zabezpieczenia softSENTRY Release 2.008 ]
Myślę, że wszyscy którzy zaglądnęli
na strony CrackPl potrafią już obsługiwać ProcDump i są wstanie
rozpakować większość plików uruchomieniowych spakowany lub
szyfrowanych. Okazuje się, ze na podobnej zasadzie działa większość
komercyjnych pakietów autoryzacyjnych do ograniczeń czasowych i
wersji trial oprogramowania. Znamy już takie pakiety jak TimeLock
lub Vbox, które mimo zastosowania skomplikowanych algorytmów
szyfracji i rozbudowanych procedur ochrony dają się w kilka sekund
usunąć z programów.
Z reguły są dwa rodzaje takich pakietów zabezpieczeń, jedne które
wprowadzają procedury i funkcje już na poziomie pisania kodu
programu i po kompilacji na trwale wbudowane w program i drugie dołączające
i szyfrujące już gotowe pliki uruchomieniowe. Te pierwsze mogą być
lepsze lub gorsze ale czasami mogą spełniać swoją role,
natomiast te drugie są po prostu do niczego. Przykładem było już
TimeLock lub Vbox, teraz przedstawie inne softSENTRY oferowane min.
w zestawie www.componentsource.com
i można je znaleˇć min. na płytkach1/99 tego zestawu.
Ogólne założenia programu są dobre, program
umożliwia przygotowanie skryptów tworzących procedury trial takie
jak time limit, limit uruchomień, okienka rejestracyjne, okienka
informacyjne i generowanie kodu dołączanego do wykonywalnych plików
exe lub bibliotek dll. Właściwie wszystko pięknie tyle, że usunięcie
tego kodu z pliku uruchomieniowych nie nastręczy żadnych problemów
nawet początkującym crackerom a nawet wręcz ułatwi im
zcrackowanie programu.
Zobaczmy co ten program wyrabia z kodem np. w
pliku sentry32.exe (sam pakiet jest zabezpieczony swoim kodem):
Po wstępnej analizie kodu startowego, znajdujemy
sprawdzanie ograniczeń i wywoływanie odpowiednich okienek
dialogowych lub informacyjnych. Można się bawić w modyfikacje
tego kodu ale nie ma to sensu. W każdym 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
Wywołanie CALL 4A3B50 wywołuje następną
procedurę, która nas będzie interesować. Szukamy bowiem kodu głównego
programu z pominięciem kodu pakietu SoftSENTRY. Zobaczmy więc na
to wywołanie :
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 prześledzenie tego kodu pozwoli nam
znaleˇć wywołanie CALL ESI, które jak się okazuje wywołuje
nasz główny program. Widzimy tu fragment kodu przygotowujący
EntryPoint do kodu głównego i zachowujący go w rejestrze ESI.
Wywołanie 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 już nasz główny program, zaczynający
się w moim wypadku od cs:414CA0 i taka wartość była zapisana w
ESI. Ponieważ jak pisałem, kody zabezpieczeń przyłączane są do
gotowego pliku uruchomieniowego ich usunięcie nie powinno sprawić
problemów. Należy dojść do początku głównego programu i
zapisać obraz pliku na dysku z pamięci i odtworzyć nową strukturę
pliku exe. Sposobów jest wiele ale najłatwiejszy to ProcDump.
Tworzymy sobie nową sekcje w pliku script.ini
[softSentry]
L1=LOOK E8,19,00,00,00
; szukamy pierwszego call 43a3b50
L2=BP
; pułapka na znalezionym adresie
L3=LOOK FF,D6
; szuka drugiego call ESI
L6=BP
; zastawia na nim pułapke
L7=STEP
; i dalej juz śledzi zapisując rozpakowany program
No i program pięknie nam usunie zabezpieczenia
SoftSENTRY. Jeżeli jeszcze zaglądniemy do nagłówka pliku
znajdziemy niepotrzebną sekcje 20/20teaćj, którą możemy usunąć
za pomocą edytora PE zawartego w ProcDump.
Proste prawda, szkoda tylko, że praca nad niezłym
pakietem zabezpieczeń owocuje tak kiepskim zabezpieczeniem. Po
prostu przerost formy nad treścią. |