LEKCJA12(4).TXT

(40 KB) Pobierz
        Lekcja XII - "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            ...
Zgłoś jeśli naruszono regulamin