NetObject Fusion 3.0 + TimeLock 3.0 by GustawKit

Biblioteka tl31inj.dll - jak zcrackowac program blokowany ta biblioteka.

Bibliotek tl31inj.dll jest stosowana w programach shareware do ograniczen czasowych korzystania z programu. Po starcie pojawia sie nag-screen informujacy ile pozostalo czasu korzystania z programu. Z reguly nie umozliwia tez wprowadzenie kodu rejestrujacego chociaz zawiera takie procedury. Wiele programów wykorzystuje ta biblioteke. Rózne wersje biblioteki mozna znalezc w internecie, moze na firmowej stronie twórców tej biblioteki http://www.timelock.com .

Narzedzia: SoftICE 3.0+
           Hex Edytor
Cel:       NetObject Fusion 3.0

Nowa wersja TimeLock 3.0 sprawia troche wiecej klopotu niz jego poprzednia 2.0. Wgrywamy plik exe do SoftICE i startujemy. Poczatkowa analiza kodu przynosi smutne informacje:

014F:00DED000  FF74240C            PUSH    DWORD PTR [ESP+0C]
014F:00DED004  FF74240C            PUSH    DWORD PTR [ESP+0C]
014F:00DED008  FF74240C            PUSH    DWORD PTR [ESP+0C]
014F:00DED00C  68D94DF8E3          PUSH    E3F84DD9
014F:00DED011  682096690A          PUSH    0A699620
014F:00DED016  686123D6B0          PUSH    B0D62361
014F:00DED01B  FF15C4D3DE00        CALL    [tl31inj!?PleaseTraceIntoMe_MrCracker]
014F:00DED021  68FFFFFFFF          PUSH    FFFFFFFF
014F:00DED026  FFD0                CALL    EAX     --> wywolanie glównego programu
014F:00DED028  C20C00              RET     000C

Polecenie CALL [00DED3C4] [tl31inj!?PleaseTraceIntoMe_MrCracker]wywoluje funkcje biblioteki tl31inj.dll, które sprawdzaja zabezpieczenia i przy odpowiednich warunkach zwracaja adres procedury startowej (entry point) w rejestrze EAX i dopiero CALL EAX wywoluje glówny program. Samo usuniecie wywolania tl32inj.dll nic nie da bo biblioteka musi zwrócic nam poprawny adres entry point. W przypadku niespelnionych warunków np. trial expired w EAX jest zwracany adres procedury zamkniecia [Kernel32!ExitProcess]. Analizujemy w takim razie co robi biblioteka tl31inj.dll. Pojawia sie okienko dialogowe podajace pozostaly czas uzywania wersji trial. Jezeli naciskamy 'try' program sie uruchamia. Jezeli czas sie nam skonczy lub przestawimy date a pózniej ja cofniemy uniemozliwione wystartowanie wersji trial. Mozemy jednak oszukac program. Fragment kodu odpowiadajacy za to przedstawiam ponizej. Najszybciej znajdziemy go zastawiajac pulapke na wywolaniu funkcji DialogBoxParamA.

014F:00FA8201  A164A3FD00          MOV     EAX,[00FDA364]
014F:00FA8206  684083FA00          PUSH    00FA8340
014F:00FA820B  6A00                PUSH    00
014F:00FA820D  687CF6FD00          PUSH    00FDF67C
014F:00FA8212  50                  PUSH    EAX
014F:00FA8213  FF153096FE00        CALL    [USER32!DialogBoxParamA] --> zwraca w EAX wynik
014F:00FA8219  8BF8                MOV     EDI,EAX
014F:00FA821B  8B3574A3FD00        MOV     ESI,[00FDA374]
014F:00FA8221  85F6                TEST    ESI,ESI
014F:00FA8223  7410                JZ      00FA8235
014F:00FA8225  8BCE                MOV     ECX,ESI
014F:00FA8227  E834280100          CALL    00FBAA60

Funkcja DialogBoxParamA zwraca w rejestrze EAX wartosc odpowiadajaca nacisnietemu przyciskowi. Jezeli nacisniemy 'try' to w EAX mamy 1 i wtedy program odpowiednio startuje. Jezeli nacisniemy Cancel to w EAX mamy 2 itd. W razie klopotów lub expired trial mozemy zastawic pulapke i odpowiednio modyfikowac zawartosc rejestru EAX na 1 ( r EAX=1). Jakiekolwiek patchowanie biblioteki jest nie wskazane bo program sprawdza poprawnosc i CRC32.

Wracajac do poczatkowego kodu, po spelnionych warunkach w EAX mamy entry point. W moim przypadku bylo to EAX=80EC90. Zmodyfikowanie tego fragmentu kodu i wpisanie stalego adresu z pominieciem tl31innj.dll powoduje zawieszenie programu. Okazuje sie, ze bibliotek tl31inj.dll odpowiednio modyfikuje ten startowy fragment kodu. Mozna sie o tym przekonac, zakladajac pulapki na pamieci o adresie zawartym w EAX. Okazuje sie, ze biblioteka przepisuje fragment kodu w to miejsce (na dodatek je deszyfrujac) za pomoca ReadProcessMemory i WriteProcessMemory.

Oto kod realizujacy te procedury:

014F:00FB5C1A  FFFF                INVALID
014F:00FB5C1C  FF508B              CALL    [EAX-75]
014F:00FB5C1F  4D                  DEC     EBP
014F:00FB5C20  D451                AAM
014F:00FB5C22  56                  PUSH    ESI
014F:00FB5C23  FF158C94FE00        CALL    [KERNEL32!ReadProcessMemory]
014F:00FB5C29  85C0                TEST    EAX,EAX
014F:00FB5C2B  740B                JZ      00FB5C38
014F:00FB5C2D  8B45D8              MOV     EAX,[EBP-28]
014F:00FB5C30  398538FFFFFF        CMP     [EBP-00C8],EAX
014F:00FB5C36  7420                JZ      00FB5C58
014F:00FB5C38  6A00                PUSH    00
014F:00FB5C3A  6A01                PUSH    01
014F:00FB5C3C  8D8DA4FDFFFF        LEA     ECX,[EBP-025C]
014F:00FB5C42  E889100000          CALL    00FB6CD0
014F:00FB5C47  68888EFD00          PUSH    00FD8E88
014F:00FB5C4C  8D85A4FDFFFF        LEA     EAX,[EBP-025C]
014F:00FB5C52  50                  PUSH    EAX
014F:00FB5C53  E8C8530100          CALL    00FCB020
014F:00FB5C58  F645CC08            TEST    BYTE PTR [EBP-34],08
014F:00FB5C5C  7518                JNZ     00FB5C76
014F:00FB5C5E  8B8548FFFFFF        MOV     EAX,[EBP-00B8]
014F:00FB5C64  99                  CDQ
014F:00FB5C65  2BC2                SUB     EAX,EDX
014F:00FB5C67  C1F801              SAR     EAX,01
014F:00FB5C6A  50                  PUSH    EAX
014F:00FB5C6B  8D8D48FFFFFF        LEA     ECX,[EBP-00B8]
014F:00FB5C71  E84A140000          CALL    00FB70C0
014F:00FB5C76  8D45D8              LEA     EAX,[EBP-28]
014F:00FB5C79  50                  PUSH    EAX
014F:00FB5C7A  8B8548FFFFFF        MOV     EAX,[EBP-00B8]     --> dlugosc danych
014F:00FB5C80  50                  PUSH    EAX
014F:00FB5C81  8B854CFFFFFF        MOV     EAX,[EBP-00B4]     --> miejsce pobrania
014F:00FB5C87  50                  PUSH    EAX
014F:00FB5C88  8B4DD4              MOV     ECX,[EBP-2C]       -->miejsce zapisu w pamieci
014F:00FB5C8B  51                  PUSH    ECX
014F:00FB5C8C  56                  PUSH    ESI
014F:00FB5C8D  FF158894FE00        CALL    [KERNEL32!WriteProcessMemory]
014F:00FB5C93  85C0                TEST    EAX,EAX
014F:00FB5C95  740B                JZ      00FB5CA2

Funkcja ReadProcessMemory odczytuje dane do pózniejszego zapisania.

Najistotniejszym fragmentem tego kodu jest funkcja WriteProcessMemory, która zapisuje dane o dlugosci w [EBP-B8] pobranych z [EBP-B4] i zapisanych pod adresem zawartym w [EBP-2C]. Dla naszego przykladu dane maja dlugosc 70C a zapisane sa pod wiadomym wczesniej adresem 80EC90. Wyswietlajac nasz fragment d 80EC90 l 70C mamy interesujacy nas fragment kodu :

:d 80EC90 l 70C
0157:0080EC90 64 A1 00 00 00 00 55 8B-EC 6A FF 68 E8 F5 84 00  d.....U..j.h....
0157:0080ECA0 68 62 EE 80 00 50 64 89-25 00 00 00 00 83 EC 78  hb...Pd.%......x
0157:0080ECB0 53 56 57 89 65 E8 C7 45-FC 00 00 00 00 6A 02 FF  SVW.e..E.....j..
0157:0080ECC0 15 58 BE B9 00 83 C4 04-C7 05 58 65 B9 00 FF FF  .X........Xe....
0157:0080ECD0 FF FF A1 58 65 B9 00 A3-68 65 B9 00 FF 15 54 BE  ...Xe...he....T.
0157:0080ECE0 B9 00 8B 0D 60 E0 96 00-89 08 FF 15 50 BE B9 00  ....`.......P...
0157:0080ECF0 8B 0D 5C E0 96 00 89 08-A1 9C BE B9 00 8B 00 A3  ..\.............
0157:0080ED00 4C 65 B9 00 E8 B7 01 00-00 83 3D 58 E0 96 00 00  Le........=X....
0157:0080ED10 75 0E 68 B0 EE 80 00 FF-15 60 BE B9 00 83 C4 04  u.h......`......
0157:0080ED20 E8 6B 01 00 00 68 68 D2-94 00 68 64 D1 94 00 E8  .k...hh...hd....

...................itd

Nalezy ten fragment kodu zapamietac w pliku bo bedzie nam on potrzebny do pózniejszego zmodyfikowania programu. Jak to najlatwiej zrobic opisze na koncu.

Teraz pozostaje nam jedynie zmodyfikowac fusion.exe np. przy pomocy HexWorkshop musimy skopiowac nasz fragment kodu o dlugosci 70C w miejsce o offsecie 40EC90. Nalezy zwrócic uwage przy modyfikacji w HexWorkshop lub HackersView jaki sposób adres jest podawany. Przy modyfikacji bedzie to adres 40E090 jezeli jest podawany globalnie a 40EC90 gdy lokalnie. Dla HackerView mozemy to zmienic w pliku hiew.ini. Nie nalezy tez zapomniec o zmianie w naglówku pliku - entry point z 9ED000 na 40EC90.

Po takich modyfikacjach program dziala bez sprawdzania trial za pomoca TimeLock 3.0.

Do zapisania fragmentu kodu do pliku, mozemy uzyc wiele sposobów. Pozostawiam to juz wam do zrobienia osobiscie. Mozna uzyc progami ku icedump4.exe, który zrzuca okreslony fragment pamieci spod SoftICE do pliku i jest dostepny na stronach http://fravia.org w sekcji tools. Mozna tez wyswietlic powyzszy zakres pamieci :d 80EC90 l 70C tak jak to zrobilem powyzej a nastepnie przy pomocy edytora zmodyfikowac go i uzyc jakiegos programu do konwersji z postaci tekstowej na binarna wzglednie taki programik sobie zapisac w paskalu.

Dla leniwych podaje plik z danymi :

-------> Wytnij tutaj <--------------
64A100000000558BEC6AFF68E8F58400
6862EE8000506489250000000083EC78
5356578965E8C745FC000000006A02FF
1558BEB90083C404C7055865B900FFFF
FFFFA15865B900A36865B900FF1554BE
B9008B0D60E096008908FF1550BEB900
8B0D5CE096008908A19CBEB9008B00A3
4C65B900E8B7010000833D58E0960000
750E68B0EE8000FF1560BEB90083C404
E86B0100006868D294006864D19400E8
4C01000083C408A154E096008945D88D
45D850A150E09600508D45CC508D45C8
508D45C450FF1564BEB90083C4146860
D094006800409400E81301000083C408
FF156CBEB9008B308A063C2275168A45
C0468A0684C074043C2275F5803E2275
0D46EB0A3C20760646803E2077FA803E
00740B803E20770646803E0075F5C745
A4000000008D8578FFFFFF50FF1560A1
B900F645A401B80A00000074088B45A8
25FFFF000050566A006A00FF1568A1B9
0050E8850A000050FF15F4BDB900EB28
8B45EC8B008B008945E08B45EC508B45
E050E86D00000083C408C38B65E88B45
E050FF1574BEB90083C404C745FCFFFF
FFFF8B45F05F64A3000000005E5B8BE5
5DC3FF252CBEB900FF2530BEB900FF25
34BEB900FF2538BEB900FF253CBEB900
FF2548BEB900FF2594BEB900FF2580BE
B900FF257CBEB900FF2578BEB900FF25
74BEB900FF2570BEB900FF256CBEB900
FF2568BEB900FF2564BEB900CCCCCCCC
68000003006800000100E83500000083
C408C3CCFF2560BEB900CCCCCCCCCCCC
33C0C3CCCCCCCCCCCCCCCCCCCCCCCCCC
C3CCFF2550BEB900FF2554BEB900FF25
58BEB900FF255CBEB900FF250CA2B900
FF2544A1B900FF2554A1B900FF2548A1
B900FF254CA1B900FF256CA1B900FF25
70A1B900FF2574A1B900FF2578A1B900
FF257CA1B900FF2580A1B900FF2584A1
B900FF2588A1B900FF258CA1B900FF25
90A1B900FF2594A1B900FF2598A1B900
FF259CA1B900FF25A0A1B900FF25A4A1
B900FF25A8A1B900FF25ACA1B900FF25
B0A1B900FF25B4A1B900FF25B8A1B900
FF25BCA1B900FF25C0A1B900FF25C4A1
B900FF25C8A1B900FF25CCA1B900FF25
D0A1B900FF25D4A1B900FF25D8A1B900
FF25DCA1B900FF25E0A1B900FF25E4A1
B900FF25E8A1B900FF25ECA1B900FF25
F0A1B900FF255CA1B900FF25F8A1B900
FF25FCA1B900FF2500A2B900FF2504A2
B900FF2550A1B900FF2558A1B900FF25
10A2B900FF2514A2B900FF2518A2B900
FF251CA2B900FF2520A2B900FF2524A2
B900FF2528A2B900FF252CA2B900FF25
30A2B900FF2534A2B900FF2538A2B900
FF253CA2B900FF2540A2B900FF2544A2
B900FF2548A2B900FF2508A2B900FF25
50A2B900FF2554A2B900FF2558A2B900
FF255CA2B900FF2560A2B900FF2564A2
B900FF2568A2B900FF256CA2B900FF25
4CA2B900FF2574A2B900FF2578A2B900
FF257CA2B900FF2570A2B900FF2580A2
B900FF2584A2B900FF2588A2B900FF25
8CA2B900FF25F4A1B900FF2568A1B900
FF2564A1B900FF2560A1B900FF257CC4
B900FF2578C4B900FF2574C4B900FF25
70C4B900FF256CC4B900FF2568C4B900
FF2564C4B900FF2560C4B900FF255CC4
B900FF2558C4B900FF2554C4B900FF25
50C4B900FF254CC4B900FF2548C4B900
FF2544C4B900FF2540C4B900FF253CC4
B900FF2538C4B900FF2534C4B900FF25
F0C2B900FF2510C3B900FF2554C3B900
FF2524C4B900FF2520C4B900FF251CC4
B900FF2518C4B900FF2514C4B900FF25
10C4B900FF250CC4B900FF25C0C3B900
FF25BCC3B900FF25B8C3B900FF25B4C3
B900FF2594C2B900FF259CC2B900FF25
88C2B900FF2584C2B900FF2590C2B900
FF257CC2B900FF2578C2B900FF2580C2
B900FF2558C3B900FF2550C3B900FF25
E4C2B900FF25E0C2B900FF2564C3B900
FF2574C3B900FF2578C3B900FF257CC3
B900FF2580C3B900FF2584C3B900FF25
88C3B900FF258CC3B900FF2590C3B900
FF2594C3B900FF2598C3B900FF259CC3
B900FF25A0C3B900FF25A4C3B900FF25
20C3B900FF2598C2B900FF25B0C2B900
FF25A0C2B900FF25A4C2B900FF255CC3
B900FF25B8C2B900FF2508C4B900FF25
04C4B900FF2500C4B900FF25FCC3B900
FF25F8C3B900FF25F4C3B900FF25F0C3
B900FF25ECC3B900FF25E8C3B900FF25
E4C3B900FF25E0C3B900FF25DCC3B900
FF25D8C3B900FF25D4C3B900FF25D0C3
B900FF25CCC3B900FF25C8C3B900FF25
C4C3B900FF2570C3B900FF256CC3B900
FF2568C3B900FF254CC3B900FF2548C3
B900FF2544C3B900FF2540C3B900FF25
3CC3B900FF2538C3B900FF2534C3B900
FF2530C3B900FF252CC3B900FF2528C3
B900FF2524C3B900FF2528C4B900FF25
30C4B900FF2518C3B900FF2514C3B900
FF2584C4B900FF250CC3B900FF2508C3
B900FF2504C3B900FF2500C3B900FF25
FCC2B900FF25F8C2B900FF252CC4B900
FF2580C4B900FF25ECC2B900FF258CC2
B900FF25DCC2B900FF251CC3B900FF25
D8C2B900FF25B0C3B900FF25E8C2B900
FF25A8C3B900FF25ACC3B900FF2560C3
-------> Wytnij tutaj <------------

wiecej informacji - http://fravia.org - w projekcie TimeLock