본문 바로가기

Tool

아이다(IDA) 사용법

디스어셈블러 : 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴

IDA가 거의 독보적인 자리를 차지하고 있고, 기능도 다양하다.
 

아이다(IDA)의 장점 :

1. 거의 모든 CPU를 지원

2. FLIRT(Fast Library Identification and Recognition Technology)는 기계어의 코드로부터 컴파일러 특유의 Library 함수를 산출해낼 수 있는 강력한 기능

3. 각종 플러그인 지원

4. Obfuscation(난독화) 코드도 해석이 잘됨

IDA 설정 :

IDA의 설정 파일은 ..\IDA\cfg 경로에 있으며 세부 설정을 할 수 있다. 단축키(idagui)를 재설정할 수 있고 disable된 설정을 enable시킬 수도 있다.

 


디스어셈블 상태와 디버깅 상태에서 특정 어셈블리어 코드를 고치고 싶을 때는 고칠 부분을 클릭하고 Alt+F2를 누르거나 메뉴에서 edit->Other->Manual Intruction을 누르고 바꾸고 싶은 어셈블리어 구문을 넣고 OK를 누른다.
(참고 : 프로그램 파일이 수정되는 것은 아니고 분석 화면에서만 바뀐다)




IDA 메뉴 :

IDA의 메뉴 구성에 대해서 알아보기 위해 C언어로 코드를 작성하고, 그 프로그램을 분석해보겠다. Stack에서 일어나는 흐름을 쉽게 알아보기 위해서 func()함수에 세 개의 파라미터를 전달하고, 그 값들을 합친 결과를 리턴해주는 간단한 코드를 작성했다.

#include <stdio.h>

 func(int a, int b, int c)
{
           return a+b+c;
}

int main(void)
{
           int sum;
           sum = func(1, 2, 3);
           return sum;
}

Stack_basic_CL.exe
다운로드


(저는 Visual 6.0으로 빌드를 하였습니다. 다른 버전으로 빌드하신분들은 컴파일러 차이에 의해 IDA로 오픈하셨을때 디어셈블된 코드가 다를수 있습니다)

컴파일한 후 파일을 drag해서 작업 창에 올려놓거나 File->Open을 이용해서 불러온다.

Stack_basic_CL.exe를 열어본 화면이다.


(참고 : IDA에서 파일을 Open하면 분석 과정을 통해 id0, id1, nam, til 파일이 생성되고, 종료하면 id0, id1, nam, til 파일이 지워지고 idb 파일이 새로 생성된다.
idb 파일은 실행 파일이 Database 파일이며, 분석 과정에서 주석을 달면 idb 파일에 저장이 된다.  idb 파일만 열면 실행했던 파일이 없어도 다시 디어셈블 과정없이 디어셈블된 코드들과 주석들을 볼 수가 있다)

IDA 5.0부터 Graph overview 기능이 있어서 처음 디어셈블하면 바로 각 함수들의 관계와 분기점들을 Graph 화면으로 보여준다. Spacebar로 Text view 화면과 Layout Graph 화면으로 전환할 수 있다.


IDA에서 스크롤을 맨 위로 올려보면 Open한 파일의 MD5정보, Open한 파일의 경로, 해당 파일의 Format 정보, ImageBase 정보, Sectjion의 size, OS 정보등이 나와 있다.


다음은 프로그램 시작점(Entry Point)으로써 프로그램이 시작되면 이 부분부터 시작이 된다.
각 변수들의 위치를 보려면 빨간박스 안에 변수를 더블클릭하여 stackframe를 확인한다.   


stackframe     
                                       

                                                  
IDA View나 Hex View 창에서 프로그램 실행의 어디에 있든 Ctrl+p를 누르면 가고 싶은 함수로 이동할 수 있다.(Functions창과 같음)


G를 누르면 'Jump to address'라고 해서 창이 뜨는데 이동하고 싶은 주소를 넣고 OK를 누르면 해당 주소로 이동한다. 디버깅을 하거나 분석을 할 때, 특정 부분을 바로 찾아갈 때 유용하다.


Ctrl+l을 누르면 이름으로 검색을 할 수 있다.


Alt+t를 누르면 Text 검색을 할 수 있다. 검색하려는 어셈블리어 구문을 넣으면 된다.


Shift+F12를 누르면 Strings window(사용되는 API 정보들과 문자열을 보여줌)를 볼 수 있다. String을 더블클릭하면 해당 지점으로 이동한다.


MessageBoxA를 더블클릭하여 따라가보자.


(참고 : xref operand는 원래의 함수 본체로 이동하는 것이고 xref reference는 해당 함수를 호출한 곳으로 이동하는 것이다)
ESC를 누르면 전단계로 돌아간다.(뒤로가기)

디어셈블 화면에서 F12를 누르면 IDA의 그래프 기능이 나온다.




IDA 화면 :


1. 메뉴바

2. 툴바 :
취향에 맞게 추가 · 삭제를 할수 있다. 빈 공간에 마우스 우클릭으로 아이콘을 추가할 수 있다.

3. Subview :
View->OpenSubviews->보고싶은 Subviews

4. 분석할 때 가독성을 위해 자주 사용하는 Subview를 오른쪽에 배치할 수 있다.

5. 함수의 분기점이나 코드에서 Jump가 있으면 그곳으로 방향을 표시해주고 코드가 어디로 분기되는지, Jump되는지 보여준다.

6. Virtual Address

7. Stack Pointer

8. 해당 어셈블리어 명령의 OPCode

9. Code Location :
코드의 흐름 중에 분기점이 발생했을 때 그 해당되는 location으로 분기할 수 있다.

10. Code Reference :
더블클릭을 하면 현재 location 부분에서 분기점이 발생된 부분으로 이동하고 ESC를 누르면 다시 전화면(뒤로가기)으로 이동한다.

11. Open한 프로그램의 디어셈블코드

12. 마우스나 키보드로 선택된 위치의 디어셈블된 코드의 위치 정보 :


왼쪽은 Virtual Address, 오른쪽은 Virtual Address와 현재 location의 시작된 곳(location으로 분기하기전 코드의 시작점)에서의 offset
ex. VA = 00001423, offset = 93    _CrtDbgReport = 00401423-93 = 00401390 (hex)

13. 현재 하드디스크의 남은 용량을 표시

14. IDA의 마지막 명령이나 정보들을 Log형태로 보여준다.

15. IDA의 현재 상태



IDA 디버깅모드 :

IDA로 Debugging을 하려면 먼저 BreakPoint(F2)를 설정해야 한다.


그 후 메뉴 Debugger->Start process (F9)를 하면 Debugging 상태로 바뀌게 된다.


1. Breakpoints :
현재 설정된 Breakpoints 목록을 보여준다.

2. IDA View-EIP :
프로그램의 실제 Code 부분이다.

3. Registers :
Registers 상태를 보여준다.

4. Flags :
Flags 상태를 보여준다.

5. Threads :
Threads 목록을 나타낸다.

6. IDA View-ESP :
Stack의 흐름을 보여준다. ESP와 EBP가 가리키는 곳을 자세히 살펴봐야 한다.

7. 메뉴바


Debugging할 때 쓰는 단축키 :

 Breakpoint  F2
 Debugging 시작  F9
 Debugging 종료  Ctrl + F2
 Step Into  F7
 Step Over  F8
 계산기  Shift + /

'Tool' 카테고리의 다른 글

디컴파일러(Decompliers)  (0) 2009.11.07
아이다(IDA)에 MS 심볼 서버 연동하기  (9) 2009.11.06
아이다(IDA)에 Hex-Ray 연동  (9) 2009.11.06
시스템 모니터링 툴  (0) 2009.11.01
올리디버거(OllyDBG) 사용법  (13) 2009.10.24