profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 2. 26. 00:45

 

IDA는 디스어셈블러의 일종으로, 바이너리 파일을 역으로 어셈블리어로 재구성해주는 툴이다.

바이너리 >> 어셈블리어 >> 프로그래밍 언어 까지 변환을 지원한다.

 

* Hello_World.exe를 이용해 IDA Pro 사용법을 익혀볼 것이다.

ida를 실행하고 분석할 파일(Hello_World.exe)을 선택한다.

 

Pseudo Code 보기

- F5 

- 특정 함수 이름 더블 클릭

 Pseudocode라는 창이 새로 생기면서 프로그래밍 변환됨.

그런데 이는 어셈블리어 코드를 다시 pseudocode로 자동적으로 바꾼 것이기 때문에 분석 시 한줄 한줄 붙잡는 것보다 큰 줄기를 이해한 뒤에 중요해보이는 부분만 세부적으로 분석하는게 좋다.

 

 

 

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

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

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

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

 

 

OPEN 한 파일의 정보 보기

- ida view 화면에서 스크롤을 최상단으로 올린다.

- open한 파일의 경로, 해당 파일의 format 정보, ImageBase정보, Section size, OS정보 등을 조회 가능

Text view 모드에서 스크롤을 올렸을 때의 모습

 

다른 함수로 점프하기

ida를 실행하면 기본적으로 main함수가 열린다. 다른 함수의 pseudocode나 정보가 보고싶으면 왼쪽의 functions 윈도우에서 해당 함수를 더블클릭하거나 Ctrl + p 를 통해 다른 함수를 볼 수 있다.

Ctrl+p 했을 때의 모습

 

Stack Frame 확인하기

- 프로그램이 시작되면 Main 함수 내 초록색 글씨부터 시작된다.

 

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

 

이름으로 검색

- Ctrl + l (엘)

 

Text 검색

- Alt + t

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

 

 

IDA View 화면 설정

1. 메뉴바

2. subview

3. 자주 사용하는 subview 왼쪽에 배치할 수 있다.

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

5. virtual address

6. stack poingter

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

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

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

10. IDA의 현재 상태

 

 

IDA의 디버깅 모드

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

빨간색으로 표시되면 bp가 설정된 것이며, 빨간 동그라미를 누르면 해당 지점에서 bp를 해제할 수 있다.

 

- Debugging 시작 : F9

- Step Into : F7

- Step over : F8

- Debugging 종료 : Ctrl + F2

 

 

호출 함수 보기

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

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

 

IDA code patch

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

- IDA로 바이너리를 패치해도 original 바이너리에 반영되지 않는다.

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

 

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

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

 

 

IDA 종료할 때

- pack database : id0, id1, nam, til 파일들을 묶어 idb 파일 생성

Deflate : 파일 묶을 시 압축하고 저장

Store : 압축하지 않고 저장

- Don' pack databse : 파일을 묶지 않는다.

- Don't save the database : Ida에서 한 작업을 저장하지 않는다.

 

 

주석 달기

- ;

 

뒤로 가기

- ESC

 

Execuate Script

- Shift + F2

 

 

참고
https://koharinn.tistory.com/69
IDA 처음 쓰는 사람들에게 :: 독학두비니 (tistory.com)
리버싱 기초 - IDA Pro을 이용한 실제 예제 분석 (tistory.com)

 

복사했습니다!