상세 컨텐츠

본문 제목

IDA Pro 7.0 사용법

TOOLS/TIPS

by koharin 2019. 7. 28. 20:37

본문

728x90
반응형

IDA Pro 사용법 다시 공부하면서 업데이트 완료👌


 

# IDA 파일 로딩

  • File → Open 으로 신규 파일을 열면 위의 대화 상자가 나타난다.
  • IDA 로더가 선택한 파일 타입에 대해 가장 적합하다고 생각하는 파일 타입을 보여주며, 아래 MS-DOS executable(PE가 MS-DOS EXE 파일 확장 형태이기 때문에 보여준 것)이나 Binary file과 같은 제시 목록들도 보여준다.
    • 잘 모르겠으면 IDA 로더가 제시한 기본 값을 선택하자.
  • Binary file은 IDA가 인식하지 못하는 경우 대비해서 기본적으로 보여주는 파일 분석 방법이다.
    • 제시 목록이 Binary file만 있다면, 해당 파일을 인식한 로더가 없다는 것을 의미한다.
  • Processor type: 디스어셈블 수행할 프로세서 모듈 선택한다.
    • IDA가 선택한 파일의 프로세서 타입을 제대로 결정하지 못하면 프로세서 타입을 수동으로 선택해야 한다.

 

# IDA Database file

  • IDA는 선택한 실행 파일을 메모리에 올려서 분석한다.
  • IDA의 데이터베이스 파일이 생성되는데, .id0, .id1, .id2, .nam, .til 파일이 저장된다.
  • IDA 데이터베이스 파일들은 현재 프로젝트 닫으면 단일 IDB 파일로 묶인다.
  • IDA Database file은 IDB 파일을 말한다.
  • 데이터베이스가 문제없이 닫히면 .id0, .id1, .id2, .nam, .til 파일은 사라지며, 이 파일들이 남으면 데이터베이스 닫는데 문제가 생기거나, 데이터베이스가 손상된 것이다.

 

# IDA database 닫기

  • 저장하는 것이 신규로 생성한 데이터베이스의 최초 저장이면, 신규 데이터베이스 파일이름은 파일 확장자만 .idb로 바꿔서 저장한다.

Don't pack database

  • 수정 사항을 4개의 데이터베이스 파일에 반영하고 IDB 파일 생성하지 않고 IDA를 닫는다.

Pack database(Store)

  • 4개의 데이터베이스 파일이 압축되지 않고 단일 IDB 파일로 묶인다.

Pack database (Deflate)

  • 4개의 데이터베이스 파일이 IDB로 묶일 때 압축된다.

Collect garbage

  • 데이터베이스 닫기 전 쓰지 않는 메모리 페이지 삭제

DON'T SAVE the database

  • 데이터베이스 마지막으로 저장한 이후 변경 사항 반영하지 않을 때 사용 4개의 데이터베이스 컴포넌트 파일 삭제하고, 기존 IDB 파일 기존 상태 그대로
  • 신규 생성한 데이터베이스이면, 작업을 저장하지 않고 4개의 데이터베이스 컴포넌트 파일들도 삭제된다.

 

# IDA View 화면

(1) Tool bar 영역

(2) navigation band

  • IDA overview navigator
  • 로딩된 파일을 선형 주소에 따라 보여준다.
  • 기본적으로 바이너리 전체 주소 보여준다.
  • 오른쪽 클릭, 줌 옵션에 따라 확대, 축소 가능
  • 각 색깔은 데이터, 코드 등 파일 내용에 따라 다르다.

  • 노란색 화살표는 디스어셈블리 창에 표시된 주소가 내비게이션 밴드 상에서 주소 위치임을 알려준다.

(3) 현재 열려있는 데이터 (subview)

  • 데이터 디스플레이는 바이너리에서 추출한 정보, 데이터베이스의 데이터를 다양한 시각으로 보여준다.
  • View → Open Subviews 메뉴에서 다른 디스플레이 화면을 볼 수 있다.
    • 닫은 서브뷰도 이 메뉴에서 다시 열 수 있다.
  • 창은 열릴 때마다 누적된다.

(4) Disassembly view

  • 기본적인 데이터 디스플레이 뷰
  • 바이너리 분석에 중요한 툴
  • 텍스트 기반의 리스트 뷰, 그래프 기반의 그래프 뷰의 2가지 방식이 있다.
  • 엔터를 누르면 어셈블리 코드 창(리스트 뷰)을 볼 수 있다.
    • Option → General 메뉴의 그래프 탭에서 Use graph view by default 옵션을 끄면 리스트 뷰를 기본 값으로 할 수 있다.

그래프 뷰

  • 플로우차트 형식으로 단일 함수 내용을 보여준다.

  • 조건 점프로 끝나는 블록은 조건에 따라 Yes이면 녹색으로, No이면 빨간색으로 플로우가 있다.

  • 끝나는 연속 블록은 파란색으로, 다음 실행할 블록을 가리킨다.

텍스트 뷰

  • [섹션 이름]:[가상 주소] 형태로 가상 주소 보여준다.
  • code reference: 화살표 창은 함수의 비선형적인 흐름을 보여준다.
    • 굵은 화살표: 무조건 점프
    • 대시 화살표: 조건 점프
    • 더블클릭 시 현재 location에서 분기점이 발생한 곳으로 이동하고, ESC 누르면 다시 전 화면으로 돌아온다.
  • ; 는 주석으로, 상호 참조(cross reference)를 의미한다.
    • 인스트럭션으로 제어권이 해당 위치로 이동했음을 의미한다.

  • 함수 스택 프레임 레이아웃을 고려한 최적의 예상에 기초한 선언 코드를 보여준다.

(5) Graph overview

  • 기본 그래프 구조를 보여준다.
  • 점선의 사각형은 현재 그래프 뷰 위치를 보여준다.

(6) Output window

  • IDA가 생성한 정보를 보여준다.
  • 상태 메시지, 사용자 요청에 따른 동작 결과 보여준다.
  • IDAPython을 사용할 수도 있다.

(7) Function window

  • IDA가 식별해 데이터베이스에 넣은 모든 함수를 보여준다.

  • sub_140001000이 .text 섹션에서 발견됐다.

(8) 마우스나 키보드로 선택된 디스어셈블된 코드의 위치 정보

  • 왼쪽: virtual address
  • 오른쪽: virtual address:location으로 분기 전 코드의 시작점에서부터의 오프셋

(9) 현재 하드디스크 남은 용량

(10) IDA 현재 상태

 

 

# 기본 IDA 디스플레이

  • 기본 IDA 뷰 창, Function window, Output window이 있다.
  • View → Open Subviews 메뉴에서 원하는 창을 열 수 있다.
  • ESC: 웹 브라우저의 뒤로 버튼과 유사하게 동작한다.

Hex View 창

  • 16진수와 대응되는 아스키 값을 보여주는 표준 헥사 덤프 창
  • Edit 메뉴 선택 시 헥사 에디터가 되어 수정 마치면 commit 또는 취소로 view 모드로 돌아올 수 있다.

Export 창

  • 파일의 entry point 목록을 보여준다.
  • export 창의 entry를 더블클릭 시 그곳의 디스어셈블리를 보여준다.

Import 창

  • 바이너리에서 분석된 import된 모든 함수 목록을 보여준다.
  • 바이너리가 공유 라이브러리를 사용할 때만 유효하다.
    • 정적 링크된 바이너리는 외부 의존도가 없기 때문에 import될 사항이 없다
  • import된 곳에서 더블클릭 시 해당 엔트리 주소의 디스어셈블리를 보여준다.

Structures 창

  • 바이너리에서 사용됐다고 판단된 C 구조체나 공용체 같은 복합 구조체 보여준다.

Enums 창

  • IDA가 표준 열거형 데이터 타입(C의 enum)을 찾았을 때 enums 창에 나타낸다.

Name 창

  • 전역 이름 목록 보여준다.
  • F: 정규 함수
  • L: 라이브러리 함수
  • I : 공유 라이브러리에서 임포트된 함수 이름
  • C: 이름 붙은 코드, 함수로 생각할 수 없는 instruction
  • D: 데이터. 보통 전역 변수
  • A: 아스키 문자열 데이터
sub_xxxxxx 서브루틴
loc_xxxxxx instruction
byte_xxxxxx 8bit data
word_xxxxxx 16bit data
dword_xxxxxx 32bit data
unk_xxxxxx 알 수 없는 크기의 data

 

Segment 창

  • 바이너리 내 존재하는 세그멘트 목록 보여준다.
  • 섹션(section)을 의미함

함수 호출 창

  • 호출 함수, 호출되는 함수 그래프 관계를 함수 호출 그래프(function call graph)나 함수 호출 트리(function call tree)라고 부른다.
  • function call 창은 이웃 관계(X가 Y를 호출하거나 Y가 X를 호출하는 관계에서 X와 Y를 이웃 관계라고 한다.)를 알려준다.
  • 함수가 Caller에 의해 호출되는지 알 수 있다.

 

 

# Pseudo Code 보기

-F5

- 특정 함수에서 F5 누르면 해당 함수의 스도코드를 볼 수 있다.

 

# ESC

  • jump to previous position (only in disassembly window)
  • 디스어셈블리에서 새로운 위치로 옮길 때마다 히스토리 목록에 현재 위치가 기록되는데, 디스어셈블리 창에서 ESC로 히스토리 목록의 최근 항목으로 갈 수 있다.

 

# ENTER

  • jump to operand
  • operand 위치에서 ENTER를 누르면 된다.

 

 

# 디스어셈블 상태, 디버깅 상태에서 특정 어셈블리 코드 고치고 싶을 때

- 고칠 부분 클릭하고 Alt + F2

- Menu : edit -> Other -> Manual Instruction

- 바꾸고 싶은 어셈블리어 구문 넣고 OK

- 프로그램 파일이 수정되는 것이 아니라 분석 화면에서만 바뀐다.

 

# Text View 화면과 Graph view 화면으로 전환

- 디폴트는 Graph view로, Option -> General 메뉴의 그래프 탭에서 Use graph view by default 옵션을 끄면 List view를 기본 값으로 할 수 있다.

- Graph view에서 List view로 바꾸려면 IDA View 화면에서 Spacebar

 

# Open 한 파일 정보 보기

-IDA View 화면에서 스크롤을 맨 위로 올린다.

-Open한 파일의 MD5 정보, Open한 파일의 경로, 해당 파일의 Format 정보, ImageBase 정보, Section의 size, OS 정보 등

 

 

반응형

# Jump to function

- Ctrl + p

 

 

# Stack frame 확인하기

- 초록색 변수를 더블클릭하면 stack frame을 확인할 수 있고, 각 변수들의 위치도 볼 수 있다.

 

 

# Next immediate value

- Ctrl + l

- 가장 가까운 다음 값으로 이동한다.

 

# Text Search

- Alt + t

-검색하려는 어셈블리어 구문을 넣는다.

 

 

# String Window

- Shift + F12

- 사용되는 API 정보들과 문자열 보여준다.

- String 더블클릭 시 해당 지점으로 이동

 

Xref operand : 원래 함수 본체로 이동

Xref reference : 해당 함수를 호출한 곳으로 이동

 

 

# IDA 그래프

- IDA View에서 F12

 

 

# IDA Debugging 모드

 

 

빨간색으로 표시되면 bp가 설정된 것인데, 해당 지점에서 bp 해제하고 싶으면 빨간 동그라미를 다시 누른다.

- breakpoint 설정  :  F2 또는 왼쪽 동그라미 누른다.

- Debugging 시작 : 메뉴의 Debugger -> Start Process (F9

- Step Into : F7

- Step Over : F8

- Debugging 종료 : Ctrl + F2

- Stack trace : Ctrl + Alt + S

- Breakpoint list - Ctrl + Alt + B

 

# Evaluate expression

- Shift + /

 

 # 주석 달기

: (콜론) : Enter comment

;(세미콜론): Enter repeatable comment

 

 

# (xref) call 따라가기

함수명에서 x

 

# 함수 또는 변수명 이름 바꾸기

n

 

 

# byte 검색

- Alt + B

- 메뉴의 search -> sequence of bytes

 

 

# 북마크 기능

- 메뉴의 Jump -> Mark position / Jump to marked position

-주소 체크하기(Mark position) : 메뉴의 Jump -> Markposition : Alt + m

 

- 체크한 주소로 이동(Jump to marked position) : Ctrl + m

 

 

# IDA View 창에서 OPcode 보이게 설정하기

- 메뉴에서 Options -> General 의 Number of opcode bytes6으로 설정 (default : 0)

 

 

# Execuate Script

- Shift + F2

 

 

# 상호 참조 그래프

- 해당 함수가 호출되는 과정 및 해당 함수가 호출하는 함수를 그래프로 보여준다.

Xrefs graph from

- 해당 함수 위치에서 우클릭 -> Xrefs graph from : 해당 함수가 호출하는 함수 그래프로 보여준다.

Xrefs graph to

- 해당 함수 위치에서 우클릭 -> Xrefs graph to : 해당 함수가 호출되는 과정을 그래프로 보여준다.

 

 

# 호출 함수 보기

- main 함수 위치에서 메뉴의 View -> Open subviews -> Function calls

main 함수가 호출하는 함수를 주소와 함께 보여준다.

 

 

 

# Xrep

- x : 변수 등을 선택하고 x를 누르면 xrefs to name 창이 뜬다.

 

 

 

 

# IDA code patch

- code patch : 바이너리의 코드를 수정하는 것

- IDA로 바이너리를 패치해도 (코드를 수정해도) original 바이너리에 반영되지 않는다.

-Edit -> Patch program -> Change Bytes : 커서 위치부터 16 바이트의 값을 읽어와 출력해주고 그 값들을 수정할 수 있도록 한다.

                                         -> Change Word : Word 값을 변경할 수 있다.

                                         -> Assemble : 어셈블리 명령을 입력하여 코드 패치를 한다.

- 수정이 끝난 후 apply patch to input file 을 수행하면 patch가 반영된다.

 

 

# 동적 디버깅

Vmware 가상머신의 .vmx 파일을 텍스트 편집기로 연 후, 하단에

debugStub.listen.guest32 = “TRUE”

debugStub.hideBreakpoints = “TRUE”

monitor.debugOnStartGuest32 = “TRUE”

 

세 문장을 넣는다.

 

부팅하고 IDA에서 Attach -> Remote GDB Debugger -> localhost:<#port>

0번에 attach to the process started on target을 선택한 후 0x7c00에서 breakpoint를 걸면 MBR 영역부터 디버깅이 가능하다.

 

# Remote Debugging

- 가상머신에서 실행되는 바이너리를 원격의 호스트 머신에서 안전하게 분석할 수 있다.

IDA가 설치된 폴더에 dbgsrv 폴더가 있다.

이 안에는 원격 디버깅을 리스닝할 프로그램이 들어있다.

 

 

Linux remote debugging을 하고 싶을 때, linux_server는 32bit, linux_server64는 64bit를 나타낸다.

자신의 리눅스에 맞는 파일을 리눅스에 복사한다.

그 후 터미널에서 ifconfig 명령어로 자신의 리눅스 IP를 알아내고, 복사한 파일을 실행한다.

 

호스트 컴퓨터에서 IDA를 실행시킨 뒤 Debugger -> Run -> Remote Linux debugger 선택 후

Application – 디버깅할 파일

Directory – 디버깅할 파일이 있는 폴더

Parameter – 전달할 파라미터

Hostname – 구한 리눅스 IP

Password –패스워드 지정했을 시 입력 (패스워드를 지정하려면 linux_server을 실행할 때 뒤에 인자로 “-P 패스워드” 로 넣으면 된다.)

Port – 리눅스에서 복사한 파일 실행했을 때 listening하고 있는 포트 번호

 

위를 설정한 후 OK를 누르면 remote debugging을 할 수 있다.

728x90
반응형

관련글 더보기