Lekcja 9 - "IDA - potezne narzedzie w doswiadczonych rekach" ----------- ------------============== 1.0 Wstep ==============------------ ----------- Heh, kiedys gdy bylem jeszcze poczatkujacym crackerem, istnial tylko WDasm, tzn. zle sie wyrazilem... IDA napewno juz istniala, jednak nie byla ona nawet w 10% tak popularna w polskim swiatku crackerskim jak on. Ja sam dlugie miesiace uzywalem WDasm'a, az w koncu nie wytrzymalem. Ciagle tylko slyszalem: 'IDA jest super', 'WDasm jest slaby' itp... i powiem trudno tutaj nie bylo przyznac racji... program nie aktualizowany od dawien, dawna nie radzil sobie z nawet prostymi sztuczkami 'anty', wysypywal sie kiedy tylko mogl. Nie pozostalo mi wiec nic innego jak wziasc zaniesc swoj tylek (razem z dyskiem) do iNetCafe i sciagac to ogromne cudo.... 16 mega, to mnie wowczas rozwalalo... zastanawialem sie, co to za paskudztwo tyle wazy, co oni tam upchali? Uruchomilem i...? wielkie rozczarowanie ;-) Program jakis taki skomplikowany, zakrecony z mnostwem ikonek, opcji i podopcji. Przyznam szczerze, ze troche mnie do przestraszylo i odrzucilo... Impas ten w mojej glowce trwal jakis czas, az na nowo pelen sil i gotowy na pare nieprzespanych nocy postanowilem nauczyc sie za wszelka cene jego obslugi. I co najdziwniejsze, chyba sie przelamalem ;-) Zaczelem sie go uczyc (wcale nie za pilnie) powolutku, ale skutecznie. Poznawalem po woli jego funkcje i zaczalem rozumiec, co tysiacy crackerow w niej widza... wiecie co? Najlepszy disassembler jaki kiedykolwiek po bajtach stapal! Wiec pamietaj smiertelniku, jesli jeszcze nie nauczylesz sie jego obslugi zrob to dzis! ------------------------ ------------============== 1.1 O czym to bedzie ==============------------ ------------------------ Naucze cie jak odtworzyc kod zrodlowy programu (dotyczyc to bedzie wersji pod win, np. 4.04) Heh... wiem, ze tutor na ten temat powstal i wisi na www.crackmes.prv.pl, wiec poki zostane posadzony o plagiat to podaje powody: - tamten przeznaczony jest dla wersji DOS ktora sie znacznie rozni od windowsowskiej ;-) - autor zapomnial o wielu zarabistych funkcjach IDA ;-) - jest on ogolnie taki jakis wybrakowany i nie porusza wielu aspektow... Tak w ogole to nie skupie sie tylko na rekompilacji, mam ochote zachaczyc o pare dodatkowych tematow ;-) Mam nadzieje, ze uda mi sie znalesc pretekst... ------------------------------------------ ----------============ 2.0 Ladujemy pierwszy program do IDY ;-) ============---------- ------------------------------------------ Ok... to wypadalo by teraz zdisassemblowac sobie nasz pierwszy programik ;-) Jako przyklad wybrane zostalo... crackme by Jube #4 (chyba nie ma nic przeciwko ;-)) Ok.. uruchom IDE i wybierz do uruchomienia plik jube4.exe, dolaczony do lekcji. IDA teraz chwilke pomysli (to znaczy sprawdzi format pliku exe - tak na marginesie to IDA oblsuguje ich naprawde sporo, ale wiekszosc wam sie nigdy nie przyda) i twoim oczom powinno ukazac sie piekne okienko. Teraz masz tak: - u gory mozesz wybrac format pod jakim prog ma byc przemielony (jak sie domyslasz w tym przypadku PE) - ponizej mozesz wybrac typ procesorka - potem masz pare przyciskow, pod kazdym z nich kryje sie dosc sporo opcji jednak ba nasze potrzeby zachowajmy ustawienia 'fabryczne', oczywiscie nic nie stoi na przeszkodzie azeby poekseprymentowac z nimi (ja sie troche bawilem, ale nie dawalo to ciekawych rezultatow ;-)) - i ponizej jeszcze pare opcji. W tych ostatnich opcjach mozesz wybrac np. : 'Load manualy' - IDA bedzie pytala sie po koleji ktore sekcje ma disassemblowac, a ktore nie. 'Load resources' - jesli to zaznaczysz IDA zdisassembluje sekcje .rsrc, nie daje to zadnych ciekawych rezultatow... 'Make imports segment' - jesli to odznaczysz to IDA nie przejrzy sekcji importow, w zwiazku z czym nie beda widoczne nazwy uzywanych przez niej funkcji API. Ok... ja nic nie zmienialem w ostawieniach jakie proponuje IDA, ty tez tak na razie zrob, inaczej mozesz miec zupelnie cos innego na ekranie niz ja, a potem beda kwiatki ;-) Teraz tylko klinij ok i poczekaj az IDA przemieli kod ;-) A wlasnie... IDA ma taka ciekawa wlasciwosc, ze przeprowadza dissasemblace w dwoch krokach: - w pierwszym IDA pobiera caly kod i wyswietla go na ekranie w opcodach, prawie tak jak hexedytor... w tym momencie uzytkownik moze juz przegladac kod. - w drugim IDA analizuje caly kod, wpisy w importach itp... na biezaco na ekranie wyswietlany jest poprawiony kod. O wszystkim informuja swiatla w prawym gornym rogu ekranu: czerowne - IDA przeprowadza punkt pierwszy zielone - skonczyla pierwszy i zaczyna drugi zolte - IDA zakonczyla obydwa punkty pomyslnie (z lepszym lub gorszym rezultatem) ;-) ------------------------ ------------============== 2.1 Zapoznanie z IDA ==============------------ ------------------------ Okno glowne IDY podzielony jest na 2 czesci, w gornej wyswietlany jest kod programu, natomiast na dolnej, sa rozne raporty generowane przez IDE (np. czy wykonanie komendy sie powiodlo czy nie). Ok... teraz co nieco o ogolnych zasadach pracy z IDA. Pierw jak IDA przetwarza kod... IDA dzieli kod na sekcje, o kazdej z nich przedstawia krotka informacje (flagi, wyrownania itp.). Kod jest nastepnie dzielony na procedury... IDA pakuje w nie kazdego call'a ;-) Poszczegolne procedury oddzielone sa od siebie komentarzami, o ile ich nie wylaczymi. Sekcje ulozone sa tak jak w pliku, przewaznie pierw jest sekcja .code, potem .data i .rsrc... Mysle, ze bez problemu polapiesz sie w tym co IDA ci prezentuje ;-) IDA ma taka ciekawa wlasciwosc, ze jesli importowana jest jakas funkcja, to IDA tworzy call'a o nazwie 'j_nazwa_funkcji' (ktory zawiera skok do wlasciwej funkcji), na ta nazwe podmieniane sa wszystkie wywolania funkcji w programie. Przyznam, ze jako fan MASM'a zawsze mnie to wkurzalo, ale nigdzie nie znalazlem opcji zeby to wylaczyc ;-) widocznie tak juz musi byc ;-) ------------------------ ------------============== 2.2 Opcje i konfiguracja IDY ==============------------ ------------------------ Ok... wiekszosc operacji w IDA wykonuje sie z poziomu menu, ikon albo skrotow klawiaturowych (bardzo pomocne i szybkie). Ok to tak skrotowo: - Wyswietlanie: w menu 'View' mozemy dokonac przelaczania widokow (mozna wybierac pomiedzy kodem i danymi, wyswietlaniem w hexach, czy normalnie). Nastepnie z tego menu mamy dostep do wyswietlania takich informacji jak: funkcje, dane, problemy, struktury, selektory i inne zabawki ;-) kazdy znajdzie tu cos dla siebie. - Edycja: z menu 'Edit' mozemy dokonac praktycznie kazdej potrzebnej zmiany. Zmieniac mozemy np. nazwy funkcji czy danych, typy danych, dodawac komentarze, edytowac struktury. IDA pod tym wzgledem wyglada naprawde pozadnie. Dokonac mozemy jakichkolwiek zmian czy przeksztalcen. - Skoki: z menu 'Jump' mozemy przeniesc sie do praktycznie kazdego szukanego elementu. Z duzej liczby opcji mozemy wybrac kategorie, ktora nam odpowiada i przeniesc sie do wybranego miejsca w kodzie. - Szukanie: z menu 'Search' mamy dostep do opcji przeszukiwania, mozemy szukac okreslonego tekstu w calym wyswietlonym tekscie, albo tylko w kokretnych typach. - Opcje: z menu 'Options' mamy mozliwosc dokonania opowiednich zmian w konfiguracji IDY, ale o tym pozniej. - Pliki: z menu 'File' mozemy dokonac paru rzeczy: odczytac nowy plik, zapisac rezultaty pracy, wywolac skrypt czy wygenrowac kod w odpowiednim formacie kodu. Ok... teraz zajmiemy sie konfiguracja IDY, z menu 'options -> general' mamy podstawowe opcje konfiguracyjne. I teraz mamy zakladki: #1 - z niej mozemy dokonac wyboru co bedzie wyswietlane na ekranie (chodzi o takie rzeczy jak komentarze, ramki, puste linie), czy tez ustawic prawy margines. #2 - w tej opcji mamy mozliwosc zmiany decyzji, jaka musielismy podjac przed zaladowaniem pliku przez IDE (jak procesor itp.) #3 - ustawienia wyswietlnaia xref #4 - tutaj wybieramy typ napisow, w naszym przypadku sa to tzw. 'null terminated strings' (chodzi o to, ze kazdy z nich zakonczony jest zerem). Ustawienia te sa wazne jesli bedziesz wyciagal kod zrodlowy! Mozemy takze ustawic komende ktora bedzie sluzala do zabawy danymi. #5 - tutaj mamy taka zarabista opcje jak kolorki ;-) mimo iz te standardowe nie sa zbyt najgorsze, to warto poeksperymentowac z roznymi wartosciami... w koncu wzrok i czytelnosc kodu jest najwazniejsza. Ostatnie dwie opcje, sa malo interesujace i bardzo proste ;-) ------------------------ ------------============== 2.3 Zabawa z kodem ==============------------ ------------------------ Ok... zaladowalismy kod do IDY, program go ladnie przemielil i teraz mamy wyswietlany ladny tekst... i w sumie w tym miejscu mozna by juz wygenerowac kod zrodlowy. Jednak tylko na tym stracimy! IDA oferuje tyle funkcji i zabawek do modyfikacji typow danych, ze az zal nie skorzystac z jej mozliwosci! No, ale po koleji. Przewin informacje o sekcji .code, powienienes zauwazyc tam procedure 'start'. Jak sie pewnie domyslasz wywolywana jest ona zaraz na poczatku pracy progamy, wiec mylse, ze jak zaczniemy w tym momencie to bedzie dobrze. Widzimy cos takiego: 00401000 public start 00401000 start proc near 00401000 push 0 00401002 call j_GetModuleHandleA 00401007 mov ds:dword_402000, eax 0040100C call j_GetCommandLineA 00401011 ...
gootia