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 :-)