TweakDUN 2.22 by GustawKit

Program   : [TweakDUN 2.22]
Gdzie     : [EnterCD 1/99]
Narzedzia : SofTIce + Wdasm32

Program jest napisany w VB5 i nie ma mozliwosci wprowadzenia danych rejestracyjnych. Program przy starcie pokazuje nagscreen i czesc opcji w programie jest wylaczona. Program sluzy do optymalizacji ustawien modemu (MaxMTU i inne). Pojawia sie duze okienko dialogowe z menu i kilkoma przyciskami wylaczonymi. Na poczatek uruchomilem bardzo sprytny programik - The Customiser (powinien byc na stronach iczeljon.cjb.net), który umozliwia wysylanie komunikatów do obiektów programu, umozliwia takze wlaczenie wylaczonych pozycji takich jak np. przyciski. A wiec wlaczylem niektóre opcje wlasnie tym programem, zeby sprawdzic czy program zawiera procedury do tych wylaczonych opcji. Okazalo sie, ze tak. No to swietnie, pasowalo by go zcrackowac.

Na poczatek potrzeba go zdekompilowac (np. wdasm). Przegladajac listing kodu wiadomo, ze jest pokrecony bo to VB5 i nic ciekawego nie mozna znalezc.

No to ladujemy program pod SoftIce. Szukamy czegos charakterystycznego, najlepszym okazuje sie tekst 'Unregistered'. Pasuje znalezc go w pamieci, a wiec musimy sie dostac do kodu pliku tweakdun.exe. Jak mysle kazdy ma juz swoje sposoby jak to szybko zrobic. Ja zrobilem to tak, zalozylem moja ulubiona pulapke na funkcji hmemcpy i troche ponaciskalem na ustawieniach w programie, SoftIce przejal kontrole, kilka razy F12 i juz jestem w msvbvm50.dll, znów kilka razy i na sekunde trafil w kod tweakdun.exe.

P.s. krótkie wyjasnienie, kazdy program ma swoja przestrzen danych, a wiec aby znalezc jakas dana w tweakdun.exe musimy pod softIcem wejsc w kod tego programu bo inaczej to SI szukalby gdzie indziej. :-)

Ok. jestesmy w tweakdun.exe. Bedziemy szukac 'Unregistered'. Nalezy pamietac, ze programy w VB operuja na formacie danych (wide) czyli pomiedzy kazdym bajtem litery jest 00, A wiec przerabiamy sobie 'Unreg' na format wide i szukamy czyli s 0 l ffffffff 55,00,6e,00,72,00,65,00

Znajdujemy w kilku miejscach ten tekst (chyba w trzech ?:). Zapisujemy sobie adresy tych znalezionych Np. 4170B8 i szukamy w listingu push + adres. Znajdujemy cos takiego :

:00458D08 C745FC1C000000          mov [ebp-04], 0000001C
:00458D0F E8FC090000              call 00459710
:00458D14 0FBFC8                  movsx ecx, ax
:00458D17 85C9                    test ecx, ecx
:00458D19 0F8488000000            je 00458DA7
:00458D1F C745FC1D000000          mov [ebp-04], 0000001D
:00458D26 8B5508                  mov edx, dword ptr [ebp+08]
:00458D29 8B02                    mov eax, dword ptr [edx]
:00458D2B 8B4D08                  mov ecx, dword ptr [ebp+08]
:00458D2E 51                      push ecx
:00458D2F FF9028030000            call dword ptr [eax+00000328]
:00458D35 50                      push eax
:00458D36 8D55BC                  lea edx, dword ptr [ebp-44]
:00458D39 52                      push edx

* Reference To: MSVBVM50.__vbaObjSet, Ord:0000h
                                  |
:00458D3A FF1574934800            Call dword ptr [00489374]
:00458D40 898520FFFFFF            mov dword ptr [ebp+FFFFFF20], eax
:00458D46 68B8704100              push 004170B8    !!!!!!!!!!!!!!!! Unreg.. Jest :)
:00458D4B 8B8520FFFFFF            mov eax, dword ptr [ebp+FFFFFF20]

Ok. W tym miejscu jest pobierany tekst 'Unregistered'. No to szukamy kiedy nie jest pobierany. Pare linijek wyzej jest skok warunkowy JE, który pominie to unreg. Dobra to zakladamy po SI pulapke na linijce ze skokiem o adresie 45d19 i uruchamiamy program od nowa. Oki..SI przejal kontrole, zmieniamy flage zerowa na skoku i co ? Program pominal nagscreen i sie od razu uruchomil. Ale co to, opcje dalej sa wylaczone a na górze dalej unregistered czyli program pózniej jeszcze raz sprawdza to (a nawet nieraz).

Nalezy teraz przeanalizowac kiedy i w jakich warunkach nastepuje ten skok JE. Okazuje sie, ze ciekawe jest wywolanie przed skokiem CALL 00459710 o to one:

:00459710 660DFFFF                or ax, FFFF
:00459714 C3                      ret

Wynika z tego, ze program uruchomi sie jako pelny gdy w ax bedzie 0, bo pózniej ax przenosic do ecx i robi na nim TEST ecx,ecx i skok jezeli 0. Ale jak wiecie z operacji AX OR FFFF nigdy nie bedzie 0 a zawsze FFFF. Bomba znalezlismy dodatkowo procedurke wprowadzona w program aby byl jako demo.

No wiec co ?, proponuje aby z tej operacji zawsze bylo 0 bo wtedy beda odpowiednie skoki. No to zmieniamy na OR AX,0000 w exe'cu. Uruchamiamy program. Yessss.. dziala w pelni.

P.s. Nie ma to jak dobra wspólpraca SoftIce z wdasm. Przy programach napisanych w VB, szczególnie takich gdzie niema mozliwosci zarejestrowania jest to jedyna sluszna metoda :-)