Ulead COOL 3D 2.0 - crack with ProcDump by GustawKit

W poprzedniej czesci przedstawilem sposób rozpakowywania plików exe za pomoca ProcDump. Okazuje sie, ze program ten moze posluzyc nam do zcrackowania programów zabezpieczonych komercyjnymi pakietamia w stylu TimeLock lub Vbox4 by PreviewSoftware. Zasada dzialania tych zabezpieczen jest stosunkowo prosta. Za przyklad wezmiemy program Ulead Cool3D v2.0 (PCWKomputer 12A/98).

Jezeli zaladujemy program U3dedit2.exe do debuggera (np. SoftIce) pojawi sie nam nastepujacy kod :

 014F:004F1000  PUSH    DWORD PTR [ESP+0C]
 014F:004F1004  PUSH    DWORD PTR [ESP+0C]
 014F:004F1008  PUSH    DWORD PTR [ESP+0C]
 014F:004F100C  PUSH    55E239F5  -----> przygotowanie adresu
 014F:004F1011  PUSH    55AD2D76  -----> spakowanych danych
 014F:004F1016  PUSH    55E23DA9
 014F:004F101B  PUSH    55E23D53
 014F:004F1020  CALL    [004F11F0] ----> wywolanie 1 funkcji vbox4
 014F:004F1026  PUSH    FFFFFFFF
 014F:004F102B  CALL    EAX       -----> wywolanie programu
 014F:004F102D  RET     000C     

Funkcja CALL [004F11F0] wywoluje procedury (PreviewExecGate..) z bibliotek vbox4, ktore dekoduja pierwsza czesc danych programu a w EAX jest zwracany nowy EntryPoint (w moim przypadku F0000) do rozkodowanych danych. Sledzac dalej program w CALL EAX (F8) przechodzimy do nowego fragmentu kodu :

 014F:004F0000  PUSH    DWORD PTR [ESP+0C]
 014F:004F0004  PUSH    DWORD PTR [ESP+0C]
 014F:004F0008  PUSH    DWORD PTR [ESP+0C]
 014F:004F000C  PUSH    B6A4DD7F
 014F:004F0011  PUSH    BBC60E1F
 014F:004F0016  PUSH    6D171A8C
 014F:004F001B  PUSH    415F4B5A
 014F:004F0020  CALL    [004F01D4] ---> nastepna finkcja vbox4
 014F:004F0026  PUSH    FFFFFFFF
 014F:004F002B  CALL    EAX
 014F:004F002D  RET     000C     

Jak widzimy kod jest analogiczny do poprzedniego. CALL [4F01D4] wywoluje funkcje vbox4, ktora uruchamia procedury sprawdzajace warunki trial i przypadku pomyslnego spelnienia dekoduje reszte programu i danych a w EAX jest zwracany adres rzeczywistego programu (w naszym wypadku Cool3D). W przypadku niepomyslnego sprawdzenia warunkow trial w EAX zwracany jest adres funkcjie ExitProcess, czyli zakonczennia programu. Jezeli przesledzimy dalej nasz kod ( w Call Eax - F8) to wejdziemy na nasz glowny program pod adresem 6CF20. Adres ten jest wart zapamietania, gdyz jest on po prostu EntryPoint glównego programu, który jest juz pelna wersja bez vbox4.

Oki.., wiemy juz wszystko. Rozwiazanie problemu vbox4 polegac bedzie na przeniesieniu z pamieci rozpakowanego programu i zapisaniu go do pliku uruchomieniowgo. Mozna sie pokusic o wykorzystanie SoftIce i np. SoftDump (patrz fravia.org) do zapisania pamieci w plik. Wymaga to jednak dobrej znajomoaci struktury PE-exe i jest uciazliwe a opisywanie tego nie jest naszym celem. Jest proste rozwiazanie poniewaz znamy wspanialy program ProcDump, ktory umozliwia nam zapisanie procesów z pamieci do pliku przy utrzymaniu struktury plików uruchomieniowych.

Jak juz opisywalem w poprzedniej czesci ProcDump posiada plik script.ini w którym zapisywane sa instrukcje debugowania dekodowanych programów. W najnowszej wersji ProcDump32 1.1.6 powinna byc juz gotowa sekcja dla Vbox :

 [VBOX Dialog]
 L1=LOOK FF,D0 ; szukamy pierwszego call eax
 L2=BP         ; pulapka na znalezionym adresie
 L3=BPREG EAX  ; ustawia pulapke na adresie zawartym w rej EAX
               ; a jak wiemy tam jest adres nastepnej czesci kodu
 L4=OBJR       ; ustala adres podstawowy szukania na aktualne EIP
 L5=LOOK FF,D0 ; szuka drugiego call eax
 L6=BP         ; zastawia na nim pulapke
 L7=STEP       ; i dalej juz sledzi zapisujac rozpakowany program

Wazne jest odpowiednie ustawienie opcji procesu ladowania i rekonstrukcji pliku. Poniewaz program spakowany za pomoca vbox4 ma takze spakowane segmenty i tabele danych musimy zaznaczyc opcje rekonstrukcji tzn. Create New Import. W razie problemów wlaczamy takze opcje Ignore Faults w sekcji Trace.

Po pozytywnym rozpakowaniu pliku mozemy takze usunac sekcje WeiJunLi ze struktury naszego nowego pliku (opcje PE Editor). Z ciekawosci zagladnijmy jaki jest EntryPoint naszego pliku - 6CF20. Okii.., lasnie taki mial byc.

Mysle, ze ProcDump wart jest zainteresowania i przecwiczenia. Zawsze mozemy trafic na program skompresowany nieznanego typu kompresorem i wtedy damy sobie rade. Ci co nie znaja ProcDump powini go jak najszybciej sciagnac z http://www.suddendischarge.com/ w sekcji NonDOs wzglednie najnowsze wersje powinny byc na http://pub.vse.cz/pub/msdos/SAC/pc/pack/

CrackPl - (c) hyperreal.art.pl 1998