IDA use manual 1.0 Ad2m 1. IDA 기본구성 Menu Bar IDA 기본메뉴 Tool Bar 분석 Tool TAB 기능 (Hex, 그래프등 ) View Navigation Band 파일의코드부분을순차및섹션별색상으로보여줌. Disassembly 함수 block 단위의 Disassembly 흐름 Funtions windows 분석 Tool Graph overview 기능 (Hex, 그래프등 ) View Output window IDA가수행하는작업에대한정보를보여줌.
2. IDA Window 1) IDA Graph View Graph View Open: Menu-view-graph over view 함수의제어흐름을각함수별로 block을구성해서보여준다 - call 명령어를제외한프로그램의흐름이바뀌는명령어 (jxx) 를기준으로코드가나누어짐 각라인별 Virtual Address를표현방법 - Options -> General -> Disassembly Tab-> Display disassembly line parts Line Prefi xes check
해당그래프기능살표보기위해 [F12] 를사용하여확인한다. 2) IDA Text View 분석할파일의정보출력해준다. Disassembly Window 의최상단부분 : Open 한파일의 MD5, 파일경로, Format, ImageBase, Section size, OS 정보를확인할수있다.
같은주소가여러번표기될경우마지막에있는주소가실제값 Virtual address는 [SECTION NAME]:[VIRTUAL ADDRESS] 형태로표기된다 cross-references는함수참조부분으로호출한곳의연결되는함수의코드를확인할수있으며더블클릭시해당위치코드로이동할수있다. loc_401337: 코드의흐름중분기가발생부분이다. Arrow 조건화살표 내용 조건 빨간 소스위치와목적지위치를가리킴 검정 선택된부분을나타냄 회색 다른모든종류의화살표들을통합적으로나 타냄 녹색 조건점프일경우 푸른색 무조건점플일경우 파선 Conditional jump 점선 조건점프 굵은선 이전주소로점프
3) The Strings Window Strings View Open: Menu-view-Open subviews-strings (Shift + F12) Binary 에포함된 string 에대하여주소, 길이, 타입, String 을표현한다 Strings Window 의각리스트를더블클릭하면디스어셈블리윈도우에해당주소가나타난다 Strings Window 에서마우스우측클릭으로 setup 을선택하면 List 와 Type 을설정할수있다
4) The Names Window Names View Open: Menu-view-Open subviews-names (Shift + F4) F (regular function) L (Library function) I (Imported name) C (Named Code) D (Data) A (ASCII string data) 일반함수라이브러리함수 Imported name 명령데이터 Ascii 문자열 IDA Type sub_ 서브루틴 byte_ 8-bit data dword_ 32-bit data loc_ 명령 word_ 16-bit data unk_ 사이즈를알지못하는 data
5) The Hex View Window Hex Window 또는 Disassembly Window 위치를이동하면다른하나의윈도우역시같은위치로이동한다 특정 Hex Window 또는 Disassembly Window 간동기화가필요한경우해당 window에서우측마우스클릭메뉴중 Synchronize with 메뉴에서해당 window를지정하면된다 Hex Window에? 표시가나타나면 IDA가해당주소범위에어떤값이채워지는지알지못할경우이다 Deburgging Mode에서는동기화되지않는다.
6) The Exports Window Exports View Open: Menu-view-Open subviews-exports Exports window는 entry point와 export된 function 들을나타낸다 Start로표시된부분은해당프로그램의 Entry point 이다 해당항목을더블클릭하면해당주소로 Disassembly window가이동한다 7) The Imports Window Imports View Open: Menu-view-Open subviews-imports Imports window 는분석과정에서 import 된 function 들을나타낸다 해당항목을더블클릭하면해당주소로 Disassembly window 가이동한다
8) The Functions Window Functions Window 는 DB 안의모든 Functions 을나타낸다 Names Window 에는 sub_ 형태의 function 을나타내지않지만 Functions Window 는모든 Function 을나타낸다 Function Flags R function returns to the caller F far function L library function S static function B BP based frame. IDA will automatically convert all frame pointer [BP+xxx] operands to stack T function has type information = Frame pointer is equal to the initial stack pointer
9) The Segments Window Segments Registers View Open: Menu-view-Open subviews-segments (Shift + F7) IDA 에서는 Binary file 구조에서표현하는 Section 들을 segment 로표현한다 분석할파일의 Section 을표시한다 Name Start End R W X L D Align Base Type Class AD Segment name 가상시작주소가상종료주소 R readable,. not readable,? unknown W writable,. not writable,? unknown X executable,. not executable,? unknown L created by loader,. no D debugger only,. regular Segment alignment Segment base selector or address Segment type Segment class Segment addressing width
10) The Structures Window Structure Window 는 C 구조체또는 Union 같은복잡한데이터구조체를나타낸다 해당구조체를더블클릭하면상세내역에대해서확인할수있다 11) The Enum Window Structures Window 와비슷하나 C 의 enum 과같은데이터타입을표시한다 *Enum : enum( 열거형 ) 은여러개의상수를기호로선언 12) The Type Libraries Window Type libraries 는가장많이사용되는컴파일러에포함된헤더파일로부터수집한 데이터타입과함수프로토타입에대한 IDA 의축적된기술을보여준다 13) The Function Call Window Function Call Window 는커서가위치한함수의이웃함수들을결정한다.
3. IDA Shift 1) 단축키 ctrl + p Import된함수출력.(Functions창과같음 ) ctrl + E Entry Point 출력 ctrl + L 이름으로검색 shift + F12 String window 출력 esc 이전코드로넘어가기 Alt +T Text 검색 Shift + F12 API 정보및문자열출력 F12 그래프출력 G 특정가상주소위치로점프 F9 디버깅모드 F2 BreakPoint Spacebar Text view Layout Graph 화면전환 X 함수명클릭후상호참조명출력 ctrl + X Xref 함수명클릭후상호참조명출력 Shift + / Calculator
2) Entry Point Graph window 에서 Ctrl + E 를눌러실행 3) Double-Click Navigation Graph window 에서 Subkey 를클릭한뒤단축키 X 를누르면 xref to 창이나타난다. xref to 는함수나데이터 ( 문자열, 상수등등 ) 가참조되는부분을출력해준다.
4) Choose function to jump to Graph window 에서단축키 Ctrl + P 를누르게되면 Choose function to jump to 창을출력하여 해당프로그램의사용되는함수들및 subkey 를출력해준다. Function window 와같은기능을하게된다. 5) Jump to Address Jump to Address dialog 는 Jump -> Jump to Address 또는 G 단축키를이용해서해당주소로 이동한다
6) Navigation History 하늘색 FLIRT로인식한라이브러리코드 빨강색 컴파일러가생성한코드 파란색 사용자가작성한코드 ( 악성코드분석부분 ) 7) Searching
String Searches - Ctril + l 을눌러프로그램내의 String 으로검색을시도한다. Text Searches - 텍스트검색은 Search -> Text 메뉴또는 ALT+T 단축키로가능하다 - 검색을계속하기를원하면 CTRL+T 또는 Search -> Next Text 메뉴를이용한다 Binary Searches - 바이너리검색은 Search -> Sequence of Bytes 메뉴또는 ALT+B 단축키로가능하다 - 검색을계속하기를원하면 CTRL+B 또는 Search -> Next Sequence of Bytes 메뉴를이 용한다
4. IDA 옵션 1) IDA Save IDA 실행시 id0 id1 nam til 파일로생성되며 IDA 종료시 idb 파일로압축하여저장하게된다. - Don't pack database 는파일을압축하지않고저장 - Pack database(store, Deflate) 압축저장 - DON'T SAVE the database 는분석했던것들을저장하지않음 2) IDA Options Code Display Options - Line prefixes : 각 disassembly line 앞에오프셋을표시한다 - Stack pointer : 각함수의진행에따른관련된스택포인터의변화를표시한다.
5. IDA Debugging Mode 1) Select a Debugger IDA 의 Debugging 을활성화하기위해위와같은옵션을선택해야 Debugging 을진행할수있 다. 기본적으로 Local Win32 debugger 을선택한다.
2) Debugger Mode Debugging 시 BreakPoint (F2) 설정 Debugger-> Start process (F9) Debugging 상태로전환 IDA View-EIP(Disassembly) 프로그램의실제 Code 부분 Registers & Flags Registers, Flags 상태출력 Threads : Threads 목록출력 Stack View Stack의흐름출력 (ESP와 EBP가가리키는곳주의 ) Hex View 해당코드의 Hex 출력 디버깅단축키 F2 F9 Ctrl + F2 F7 F8 Breakpoint Debugging 시작 Debugging 종료 Step Into Step Over
3) Code Xref & Subkey 코드로케이션영역 loc_409f48 -> code Xref: sub_403043 + 54 - 코드에서 jump 문에의해분기할때해당로케이션으로이동 코드레퍼런스영역 code Xref: sub_403043 + 54 - 프로그램의흐름중분기문에의해서해당부분 (loc_409f48) 을참조한위치값을표시 - 더블클릭으로이동하거나마우스휠버튼의스크롤을통해서해당부분을확인할수있음 xref operand 는원래의함수본체로이동 xref reference 는해당함수를호출한곳으로이동 예제 1.text:00401331 jg short loc_40134e - loc_40134e 와같이특정이름으로명명된심볼을더블클릭하면 IDA 는선택한지점을표 시한다. 예제 2. text:0040134e loc_40134e ; CODE XREF : sub_4012e4+4d - loc_40134e 우측의 cross-reference 는 sub_4012e4 16 진수 4D 바이트뒤에서참조함을 나타낸다 00401331 로이동한다
4) user xrefs chart user xrefs chart Open: Menu - View - Graphs - user xrefs chart 프로그램의 Subkey, 라이브러리함수등연결그래프를한눈에보이도록한다. user xrefs chart 설정 IDA 에서 start address 와 end address 를자동으로표시해준다.
depth는호출된함수의개수를나타낸다. Ignore는필요하지않는항목을제외하고출력해준다. Externals는함수호출이많을경우에라이브러리함수를제외하여간소화된그래프를보여준다.