Cel : BlackWidow 3.63 Skad : www.softbytelabs.com, ChipCD 1/99 Rozmiar: 2,14 MB Czym : SoftIce, Wdasm, HiewWstep:
"Program bedacy polaczeniem skanera serwerów WWW i internetowej przegladarki offline. Program wyswietla nazwy wszystkich plików znalezionych na wybranym serwerze oraz podaje rozmiar i date modyfikacji zbiorów. Mozliwe jest takze selektywne ich pobieranie. Aplikacja pozwala na zalogowanie sie i prace na serwerach wymagajacych autoryzacji."
(opis z Chip'a 1/99 :))
Opis:Jako, ze nie zajmowalem sie jeszcze (w zadnym tutorialu) programami napisanymi w Visual Basic, czas najwyzszy to uczynic. Cel zostal wybrany przypadkowo i szczerze mowiac nie za bardzo intersuje mnie sam program (VB stuff sucks ;-)). Podejscie do tego programu jest jednak inne, niz popularnie stosowane przy rozpracowywaniu zabezpieczen VB5. Jego duza zaleta jest... jego prostota :)
Wstepne rozpoznanie.Program mozna uruchomic w dwoch wersjach - z przegladarka i bez. W obu przypadkach sposob postepowania jest taki sam. Zacznijmy wiec od uruchomienia _BlackWidow.exe. Widzimy sliczne okienko, a w nim 'You have ... days to evaluate BlackWidow bla bla bla'. Jak wiec sie mozna szybko domyslec, jezeli czas na testowani programu minie, bedzie on bardzo uprzejmy i poinformuje nas o tym (czemu ci programisci sa tak mili?). Sprawdzmy to. Przesuwamy zegar o kwartal do przodu i uruchamiamy program jeszcze raz. 'Your evaluation period has now expired bla bla bla'. Kewl. Wracamy do terazniejszosci ;-) i zabieramy sie do roboty.
W okienku rejestracyjnym wpisujemy dowolne dane. W Softice zakladamy standardowa dla VB pulapke:
bpx MultiByteToWideChar
i naciskamy OK. Docieramy do fragmentu kodu BlackWidow (F11 i F10 kilkanascie razy <- podstawowe rzeczy juz poznales w poprzednich tutorialach, nie bede sie wiec powtarzal). Teraz probujemy znalezc w pamieci miejsca, w ktorych znajduje sie tekst z wyzej wymienionych okienek
Newbies Note!Visual Basic zamienia tekst na tzw. szeroki, czyli pomiedzy kolejne bajty umieszcza 00. VB przeksztalci wiec '49 77 61 6E' na '49 00 77 00 61 00 6E'. Fajnie, nie?
Nie musimy oczywiscie przeksztalcac calego tekstu ('You have ... days to evaluate BlackWidow bla bla bla'), wystarczy pierwsze kilka znakow.
Przeksztalcamy wiec:Y o u h a v e 59 6F 75 20 68 61 76 65 20na
59 00 6F 00 75 00 20 00 68 00 61 00 76 00 65 00 20i szukamy:
S 30:0 L FFFFFFFF 59 00 6F 00 75 00 20 00 68 00 61 00 76 00 65 00 20
Rezultatow wyszukiwania moze byc sporo. Pamietaj jednak, by wybrac tylko te, bedace w danych BlackWidow (poznasz to po nazwie programu na granicy okna danych i rejestrow - _BLACKWIDOW!.text). U mnie interesujy nas adres pojawia sie raz: 41CCBC (nie pomyl z 'You have entered an invalid registration number'). Zapamietajmy to. Ta sama procedure stosujemy do tekstu z drugiego okienka:
Y o u r e v alution period... 59 00 6F 00 75 00 72 00 20 00 65 00 76 00wiec
S 30:0 L FFFFFFFF 59 00 6F 00 75 00 72 00 20 00 65 00 76 00
Tym razem interesuje nas tylko jeden rezultat, u mnie pod adresem 41CC68. Zapisujemy i opuszczamy SI (nie zapomnij bc*). W Wdasm dysasemblujemy interesujacy nas plik (_BlackWidow.exe). Szukamy, gdzie w dead-listingu programu znalezc mozemy ciekawe operacje zwiazane z interesujacymi nas adresami pamieci. W przypadku pierwszego okienka warto zwrocic uwage na:
* Referenced by a (U)nconditional or (C)onditional Jump at Address: :0047AF7B(C) :0047B2E9 push 0041CCBC <- poznajesz? :0047B2EE push eaxSlad drugiego okienka znajdujemy troche wczesniej:
* Reference To: MSVBVM50.__vbaStrCopy, Ord:0000h
:0047AF81 mov edi, dword ptr [004AD570]
:0047AF87 mov edx, 0041CC68
Zacznijmy wiec analizowac program od drugiego wywolania (ktore jest wczesniej) sprawdzajac, 'co nas to przygnalo' (czyli na skutek jakich skokow dotarlismy do tego fragmentu kodu). Jedziemy wiec (DO GORY!), szukajac ciekawych rzeczy (wywolania, porownania). Uwage zwraca fragment:
:0047AE2E call 0047BD40 :0047AE33 xor edx, edx :0047AE35 cmp eax, 0202BFDA :0047AE3A setne dl :0047AE3D or edi, edx :0047AE3F jne 0047AE4E
Pierwsza linia wywoluje procedure, po ktorej zerowany jest rejestr EDX, Rejestr EAX porownywany jest z 'magiczna' liczba. Jezeli wynik tego porownania jest rozny od zera, dl=1, w rezultacie czego wykonywany jest skok do 0047AE4E. Co tam znajdziemy (fragmenty wycialem)?
:0047AE4E cmp dword ptr [004A30EC], 00000001<- czy czas minal? :0047AE55 jl 0047AF62 <- skok, jesli czas minal :0047AF62 mov esi, dword ptr [004AD5EC]<- i tu ladujemy :0047AF68 Call dword ptr [004AD52C] :0047AF6E mov eax, dword ptr [004A30EC]<- czas pozostaly do EAX :0047AF73 fstp dword ptr [004A30F4]<- ??? :0047AF79 cmp eax, ebx<- porownuje czas z 0 (z EBX) :0047AF7B jg 0047B2E9<- jezeli zostal czas, to skok do 'You :0047AF81 mov edi, dword ptr [004AD570] have ... days' :0047AF87 mov edx, 0041CC68 <- jezeli nie, 'Your evaluation...' (...) :0047B2E9 push 0041CCBC<- pamietasz ten adres? :0047B2EE push eax
Chyba nie za bardzo nam ta droga pasuje ;-) A od czego to wszystko sie zaczelo? Tak od:
:0047AE2E call 0047BD40Zajrzyjmy wiec, co sie pod tym kryje.
* Referenced by a CALL at Addresses: :0042F62B , :00440931 , :00440999 , :0044BD2B , :0044D241 :0044D46D , :0045AB44 , :0045ABD0 , :004601E2 , :0046026E :00471BD5 , :0047AE2E , :004981BC :0047BD40 55 push ebp :0047BD41 8BEC mov ebp, esp :0047BD43 83EC18 sub esp, 00000018 :0047BD46 68165F4000 push 00405F16 ...
Coz, jak widac nie jest to jedyne wywolanie tej procedury, jest to jedno z... trzynastu. Jezeli teraz ciepliwie sprawdzimy, co kryje sie pod poszczegolnymi adresami zauwazymy, ze po powrocie z tych wywolan zawsze znajdziemy podobny fragment kodu, np.:
:0042F62B call 0047BD40 :0042F630 xor edx, edx :0042F632 cmp eax, 0202BFDA :0042F637 setne dl :0042F63A or esi, edx :0042F63C test esi, esi :0042F63E je 0042F741
Chyba juz wczesniej cos takiego widzielismy (0202BFDA) i dobrze wiemy, do czego to prowadzi :-(. Co wiec najlepiej zrobic? Proste - zmienic 'setne dl' na 'sete dl'(czyli OF95 na OF94) po kolejnych wywolaniach. Analogicznie potraktowac mozemy drugi plik BlackWidow.exe. Proponuje nie spisywac poszczegolnych offsetow w Wdasm, bo jest to dosc pracochlonne. Lepiej jest odpalic Hiew i pozmieniac wszystkie 'setne' na 'sete' po 'cmp eax, 0202BFDA'. Odpalamy BlackWidow, rejestrujemy sie, zagladamy do About... Kewl, we're there, dude! Teraz juz mozemy wyinstalowac BlackWidow :-)
Jezeli szukasz tu jedynie seriali, to zle trafiles. Dzialania opisane powyzej maja na celu analize kodu programu i poznanie schematu jego zabezpieczenia. Jezeli masz zamiar uzywac tego programu dluzej, kup go (nie dotyczy M$). Pozwoli to producentom udoskonalac oferowane programy, jak rowniez ich zabezpieczenia.
18-03-99 by iwan (iwy@friko.onet.pl)