
IDA - Interactive Disassembler.

Spis rzeczy.

00	Wstepik.
01	IDA, a W32dasm.
02	Podstawowe opcje.
03	Inne opcje.

00h. Wstepik.
Kazdy chyba slyszal o takim cacku jak IDA, czyli Interactive Disassembler. 
Wszystko ponizej dotyczy IDY freeware dostepnej gdzies w archiwach SimTel'a. 
Obecnie na rynku dostepna jest IDA 4.01 ktora posiada jusz calkiem przyjemny i 
zwindowsowiony interfejs uzytkownika(ala wdasm). Jesli ktos jest zasobny w 
gotoweczke to polecam zakup jesli nie to.....pozostaje IDA 3.83 ktora 
mozna bez problemu sciagnac z wuwy jednej z crackerskich grupek (thx coxoc :)). 
Znawcy tematu, tajmniczy i dobrze znani goscie ktorzy przed nickami maja 
zaczcyt postawic sobie + twierdza, ze przy IDZ'ie Wdasm to tylko zabawka, 
a SofIce wcale nie jest potrzebny.

Uwazam ze freewarowa wersja jest bardzo dobra, i napewno lepsza od wdasma....

01h. IDA, a W32dasm.

* IDA zawsze zaczyna dissasemblacje od prawidlowego miejsca(od entrypoint), 
  W32dasm ma natomiast przykre sklonnosci do pomylek co powoduje ze 
  niczym nie spakowany progz po dissasemblacji nie przypomina codu pod 
  zadnym wzgledem;
* IDA stosuje techniki ktore pozwalaja unikac bledow, na ktorych lapie sie 
  wdasm.
  
  przyklad, zaczerpniety z jakiegos doc'a 
    	
      	jmp here2
   Here1:
  	jmp [do dobrego codu]
  	...
   Here3:
   	jmp Here4
   Here2:
   	jmp here3
   Here4:
   	jmp Here1
  
  Wdasm lamie sobie zeby na takich skokach.
 
 * IDA posiada wbudowany jezyk IDC, o skladni podobnej do C
 * IDA potrafi dissasemblowac programy dla roznych prockow miedzy innymi 
   Intel 8051, Motorola 680x0, Motorola 8bit, TMS DSP i wiele innnych 
 * fragmenty codu mozna zapisywac jako pliki asm, baaaardzo przydatne 
   przy pisaniu keygenow, szczegolnie jesli program do sprawdzania seriala 
   wykorzystuje tablice
 * mozliwe jest przygotowanie zdissamsemblowanego codu do ponownej kompilacji!,
   ale to duuuzo pracy
 * mozna zmieniac cod, bezposrednio w dissasemblerze 
 * mozna dopisywac komentarze, kilka rodzaji
 * instnieje mozliwosc automatycznego dodawania komentarzy
 * wiele innych bajerow 
 * IDA jest cholernie wolna - a to ze wzgledu na dzialanie mechanizmu FLIRT 
   (FLIRT - pozwala na zamiane poszczegolnych sekwencji kodu na wywolania 
   funkcji z bibliotek jezyka  wysokiego poziomu w ktorym zostal napisany 
   disassemblowany program - wlasciwie chodzi nie o sam jezyk a o kompilator 
   ktory zostal uzyty. Sekwencje kodu i odpowiadajace im wywolania(nazwy) 
   funkcji sa zapisane w specjalnych plikach sygnatur. Coz to oznacza? 
   To zdecydowanie ulatwia wszelkim reverserom prace... ogladajac 
   zdisasemblowany listing  oprocz mnemonikow asm'a widzimy wywolania funkcji..
   np. 
 
 ; Exported entry   4. ?OP_OpenWin@@YGPAUHWND__@@PAU1@HHHHH@Z
 ; [000000F6 BYTES: COLLAPSED FUNCTION OP_OpenWin(HWND__ *,int,int,int,int,int). PRESS KEYPAD "+" TO EXPAND]
 ; Exported entry   2. ?OP_CloseWin@@YGXPAUHWND__@@@Z
 (male szulerstwo... ten string jest z v 4.0 ;)) 

02h. Podstawowe opcje.
A. Navigate/Jump to.../Choose from list of names. (ctrl-l)

Wyswitla nam liste wszystkich importowanych funkcji(odp Imported Functions 
w wdasm), lista ta zawiera rownierz etykiety rozpoznanych ciagow(odp String 
Refs w wdasm). Wpisujac poczatkowe litery mozemy latwo znalesc interesujaca 
nas funkcje. Zarowno nazwy funkcji jak i etykiety stringow mozna zmieniac - 
gdy kursor znajduje sie na etykiecie naciskamy ctr-n i IDA pyta nas o nowa 
nazwe.

B. Navigate/Search for.../Text in core. (alt-b)

Sluzy do poszukiwania ciagu bajtow. 

Ciag znakow mozemy podac na kilka sposobow:
1) jako text - wtedy nalezy uzyc cudzyslowow - !case sensitive!
2) jako ciag liczb hex np. 0x90 0xC3 
3) jak ciag liczb dzisietnych np.50 60 70 
4) mix np. 0x90 "hey" 55 

Zalozmy ze rozpracowujemu jakies crackme (w ponizszym przykladzie uzylem 
CracMe 1.0 by massh - skill hard - do zassania z www.cookiecrk.z.pl) gdzie 
pojawia sie text "Nope, wrong password.". A wiec naciskamy alt-b i 
wpisujemy "Nope" (UWAGA! nalezy wpisac cudzyslowy) i po chwili przenosimy 
sie w miejsc gdzie znajduje sie ten ciag.
 
I widzimy....
		db  4Eh	; N
		db  6Fh	; o
		db  70h	; p
		db  65h	; e
		db  2Ch	; ,
		db  20h	;  
		db  77h	; w
		db  72h	; r
		db  6Fh	; o
		db  6Eh	; n
		db  67h	; g
		db  20h	;  
		db  70h	; p
		db  61h	; a
		db  73h	; s
		db  73h	; s
		db  77h	; w
		db  6Fh	; o
		db  72h	; r
		db  64h	; d
		db  2Eh	; .
		db    0	; 

Ale, to nam przecierz nie odpowiada. A wiec...bedac w pierwszej lini wybieramy 
opcje Edit/ASCII albo poprostu naciskamy a i ciag zamienia sie w....

	aNopeWrongPassw	db 'Nope, wrong password.',0

Ktory tez nie jest zbyt przyjemny dla oka, tak wiedz szybcitko naciskamy ctrl-n
 i wpisujemy etykiete ktora nam odpowiada...

	WrongPassText	db 'Nope, wrong password.',0

i teraz wyglada to prawie jak zrodelko naszego crackme :)).

Ale coz z tego jesli nie mamy zadnych oodwolan do tego ciagu, jesli bylyby tak 
owe to ich adres widnialby po prawej stronie. 

Poszukajmy ich.

Tak wyglada u mnie cala linia:

0040201B	WrongPassText	db 'Nope, wrong password.',0

Jeszcze raz wciskamy alt-b i wpisujemy 0x1B 0x20 0x40. Jesli widzisz search 
failed w drugim okienku to musimy zmienic kierunek przeszukiwania naciskamy 
TAB(kierunek przeszukiwania wskazuje strzalka w prawym gornym rogu obok 
zegara i statusu. Teraz naciskamy ctrl-b - jest to poszukiwanie nastepnego 
textu(wyszkuiwanie ostatnio podanego ciagu bez koniecznosci wpisywania go 
ponownie).

Znajdujemy podany ciag...

loc_403020:				; CODE XREF: FAR_DATA:0040425Ej
		push	0
		push	40200Eh		 
		push	40201Bh		;<<<tutaj odwolanie
		push	dword ptr [ebp+8]
		call	j_MessageBoxA
		call	loc_403105
		jmp	short loc_40303C

Adres obok CODE XREF, to adres skad wywolywana jest dana procedura, lub skad 
nastapil skok. Jesli na nacisniemy na nim enter lub kilkniemy mysza 
wyladujemu pod 0040425e(jezeli teraz nacisniemy ESC to wrocimy do adresu 
403020), ale zanim to zrobimy bedac w lini z loc_403020 i CODE_XREF naciskamy 
; ....i wpisujemu komentarz np "WrongPass Messagebox :((". Po czym obok 
push 0 powinien sie pojawic wlasnie ten napis. I teraz clickamy na adresik 
004025E i naszym oczom ukazuje sie...
		
		cmp	edi, 40315Ah
		jnz	loc_403020	; WrongPass Messagebox :((
		jmp	edi

Obok skoku jnz pojawil sie komentarz informujacy nas o tym co kryje sie pod 
adresem 403020. W tym przypadku do 40425e jest tylko jedno odwolanie ale gdyby 
bylo ich wiecej to przy przystkich skokach i call'ach pojawil by sie wlasnie 
ten komentarz. Jest to nieoceniona zaleta IDY gdyz wstawianie tzw repetable
comments znacznie zwieksza przejrzystosc codu i ulatwia nasza prace.

Wiele osob moze powiedzic, ze powyzszy przyklad nie ma sensu po znajdowanie 
tego ciagu i odwolania do niego zajeloby w wdasmie 10 sekund i sprowadzalo sie 
do trzech clikniec mysza. Zgadza sie. Przykald ten ma jedynie pokazac sposob 
porusznia sie w obrebie codu  w IDZ'ie i  jej mozliwosci. Wdasm przy kazdym 
push 40201Bh wyswietliby "Possible reference to string ...." nawet gdyby w 
prawdziwym codzie bylo "db 6ah, 01bh, 20h, 40h , 00h"  co czesto prowadzi do 
bledow. IDA wspolpracuje z nami. 

C. Options/Calcualte (?)

Kalkulator umozliwiajacy dokonywanie wielu obliczen. Argumenty nalezy podawac 
jako liczby hex np. 0xff, ocatan 020(rozpoczynajac o zera w typ rzypadku to 16)
 i liczby dziesietne (UWAGA! nie nalezy liczb dziesietnych rozpoczynac od zera 
gdyz zostana potraktowane jako liczby w systemie osemkowym). 
Mozna wykonywac wszelkie dzialania przy uzyciu operatorow z C poczynajac od 
arytmetycznych 0x10+0x6b poprzez przesuniecia i konczac na operacjach bitowych
 i logicznych.

A oto lista dziaa:
	a&b - AND
	a^b - EXOR
	a|b - OR
	~a  - negacja
	a<<b - shl a,b
	a>>b - shr a,b
 	a%b - rezta z dzielenia a/b

Poza tymi istnieja jescze operatort logiczne &&, ||, ! ktore wykonjua dzialania
 logiczne odp and, or i negacje na calaych liczba a nie na poszczeglnych jej 
bitach i zwracaja 0 lub 1 z punktu widzenia reversera jest to funkcja 
nieprzydatna podczas analizy codu.

03h. Inne opcje.

A. Pilki MAP, etykiety etc.
	(napisane w oparciu o tutorial Gij'a)
	
Czy w przypadku duzych programow zapisujecie czasami na kartce adresy 
poszczegolnych procedur z krotkim opisem ??? 

Przyklad:
	42001 - czwarta czesc generacji klucza
	
Takie wpisy w waszych notatkach mozna pominac. A mianowicie za pomoca IDY mozna 
wygenrowac plik .map ktory po kilku konwersacjach mozna zaladowac do SoftIce'a 
i wtedy w SI zamiast adresu 42001 pojawi sie nam ustalona przez nas etykieta 
np. KeyGeneration4: ...

Zalozmy ze mamy jakis programik(ja uzylem w tym przykladzie dll z jedna funkja 
exportowana):

1. dissasemblujemy go
2. zmieniamy etykiety przy poszczegolnych funkcjach, stringach, etc.
3. wybieramy File/Produce/Create MAP file..., wybieramy nazwe pliku i
   zaznaczamy wszystkie opcje
4. jezeli masz IDE 4.0 lub wyzej idz do punku 5 :)) - btw IDA 4.0 pojawila sie
   ostatnio w sieci...(thx coxoc za adresik :)) - ale nie pytajcie go to 
   straszny zwolennik poszukiwan wiec odesle was do Mr.Hotbota lub 
   Miss. Altavisty ;)) - ale jak dobrze pojdzie bedzie ja mozna sciagnac z 
   strony CookieCrK.

Jesli posiadasz starsza IDE musisz utworzony plik .MAP przekonwertowac za 
pomoca programiku w Perlu autorstwa Gij'a(BTW poszukajcie jego tutorkow o 
IDZie w sieci warto przeczytac) skrypt powinnien znajdowac sie w tym archiwum 
co ten dokument. 

5. plik .MAP nalezy teraz skonwertowac do formatu .SYM za pomoca programiku 
   dolaczonego do SI o nazwie msym.exe(plik znajduje sie w katalogu util16)
 	np:
 		msym.exe cpulab.map
 		
   W wyniku konwersji powstaje plik .SYM, w moim przypadku cpulab.sym
 
6. nastepnie plik .SYM konwertujemy za pomoca programu nmsym.exe
	
	nmsym.exe cpulab.sym

W wyniku konwersji powstaje plik .NMS, w tym przypadku cpulab.nms

7. teraz ladujmy pilk ktory powstal - uzywamy do tego programu nmsym.exe

	nmsym.exe /SYM:cpulab.nms

8. uruchamiamy proga, ctrl-d, zkladamy nasze ukochane bpx czy bmsg i zamiast
   call 42001 widzimy ten sam lablel co w IDZie

 	
 	 
ciag dalszy nastapi :))

----
pozdrowionka dla CookieCrK & CrackPL i innych polskich groopek crackerskich  
mesg for AAOCG webmasters: hmm, jesli mozecie to zmiencie na Waszej stronce 
komentarz dotyczacy w32dasm - to naprawde nie jest najlepszy dissasembler, 
nie ma nawet 1/3 tych opcji co IDA :), mozecie na przyklad napisac 
"w32dasm - najprostszy w uzyciu dissasembler" :)   
---- 

oxcart^CookieCrK				

-http://www.cookiecrk.z.pl--			
oxcart@bartex.geol.agh.edu.pl

ostatnia modyfikacja: 14 maja 2ooo
