IDA 사용법

133210·2021년 7월 21일
0

2020 시스템

목록 보기
1/25
post-thumbnail

| IDA

  • 지뢰찾기 리버싱 IDA 문서 참고
    - 해당 문서는 6.1버전이라 다른 부분 있을 수 있음

1. IDA

Interactive Disassembler, 디스어셈블러.
작업시 원본 실행파일이 아닌 idb라는 데이터베이스 사용
되돌리기 기능 없음 (ctrl+z 아님)


2. 기능

새로운 파일을 열 때 각종 설정을 하는 창
일반적인 PE파일이나 ELF 파일을 분석하는 경우 잘 건드릴 일은 없음
맨 위 리스트는 파일의 종류. 실제 파일의 종류와 IDA가 찾은 파일의 종류가 다를 경우 직접 지정 가능.

실행파일이 있는 폴더에 id0 id1 id2 nam til 확장자인 파일이 생긴 것을 확인할 수 있음

① 메뉴바
② 동그란 아이콘이 노란색이면 분석중, 초록색이면 완료
③ subview (Ctrl+tab으로 이동 가능. 혹은 Ctrl +1 로 이동. 후자는 꺼져있는 창도 리스트에 나옴)
④ 자주 사용하는 subview 왼쪽에 배치 가능
⑤ IDA view (그래픽 뷰와 텍스트 뷰 전환은 Spacebar로 가능)
⑥ IDA의 마지막 명령이나 정보들을 Log 형태로 보여줌
⑦ 현재 하드디스크의 남은 용량

분기에서 인 경우 초록색 화살표, 거짓인 경우 빨간색 화살표가 가리키는 방향으로 프로그램 흐름이 이동함. 파란색 선은 무조건 점프하는 경우를 뜻함.
선을 더블 클릭하면 현재 화면의 위치에 따라 화살표가 시작하는 곳과 끝나는 곳으로 화면이 바뀜.
그래픽 뷰 내에서 이동할 때에는 화면의 빈 공간을 누르고 움직이거나 shift 키를 누르고 아무 곳이나 누른 상태로 이동하면 됨.

IDA 종료시 나오는 창.
종료할 때 id0~2 nam til 확장자 파일들이 idb 파일로 묶이게 되는데 이에 대해 설정하는 란

Don’t pack database: 파일을 묶지않음
Pack database(Store, Deflate): 파일을 묶음
Deflate: 파일을 묶을 때 압축함.
DON’T SAVE the database: IDA를 연 후에 작업했던 것들을 저장하지 않음

메뉴바의 View > Open subviews > strings 혹은 ctrl+1 후 string 선택하면 strings 창이 열림
좌측부터 문자열의 주소, 길이, 타입, 내용을 나타냄
하나를 더블클릭 시 IDA view 창의 해당 문자열 부분으로 이동함

IDA의 기본 설정으로는 파일 내 모든 문자열을 찾아낼 수 없기에 설정(Strings창 오른쪽 버튼 후 Setup)을 바꿔줌

Ignore instructions/data definitions: IDA가 코드나 데이터라고 생각되는 것을 무시하지 않음

가장 좌측의 text:01001340은 섹션명가상주소
맨 아래 있는 것이 실제값을 나타내고 나머지는 그 주소에 달린 주석
const WCHAR SubKey는 IDA가 자동분석에서 판별한 변수 타입과 이름.
4번째 줄의 unicode는 해당 문자열의 타입
오른쪽의 DATA XREF는 이 데이터(문자열)이 참조한 코드를 보여줌 (마우스를 올리면 참조된 코드를 확인 가능)

스트링창으로 다시 이동하여 YZZY 문자열을 살펴봄
word_1005034변수의 이름. ‘데이터의 타입__데이터의 시작주소’의 형태로 이름이 지어짐
db, dw, dd는 데이터의 크기를 나타냄. 각각 byte, word, double의 약자(1, 2, 4 바이트).
데이터 타입을 바꾸려면 단축키 d를 누르면 됨(db > dw > dd > db 순으로 바뀜. 필요한 바이트수가 부족하면 확인창이 뜸)
실제로는 유니코드지만 IDA가 dw 하나와 db들로 인식함.

Hex 창에서 유니코드임을 확인.

바꾸려면 부분 드래그 혹은 시작부분에 커서를 두고 Alt+A를 누르면 해당 창이 뜸
유니코드 선택 후 OK

esc: 이전 위치로 가는 단축키

이전으로 돌아가 subkey를 누르고 X를 누르면 xref to 창이 뜸
함수나 데이터가 사용된 곳을 모두 찾아주는 기능

Direction: 코드의 상대적 위치
Type: o, r, w
- Type의 o, r, w: Open, Read, Write의 약자
Address: 주소
text: 코드

OK 버튼을 누르거나 더블 클릭하면 해당 위치로 이동함

자동으로 함수의 인자명들을 주석으로 넣어주지만 80000001h와 같이 상수가 무엇을 의미하는지는 자동으로 알려주지 않음. 사용자가 설정 가능.

우클릭 후 Use Standard symbolic constant를 선택하면 창이 뜸
HKEY_CURRENT_USER로 변경

sub_1002D55 함수 내부
위 주석에는 C언어 형태 함수의 리턴 타입, 인자들, 그 타입과 함수의 이름이 나옴
함수의 이름은 임의로 바꿀 수 있음.
그 아래 부분은 함수 내에서 쓰이는 변수 목록 (IDA가 찾은 것)
int 뒤에 인자명이 없는 이유는 IDA가 적절한 인자명을 정하지 못했기 때문
직접 지을 수 있음. (단축키 Y)

IpKeyName 위에 대고 N키를 누르면 위의 창이 나옴
Local name: 특정 함수 내부에서만 쓰이는 이름으로 지정
Include in names list: Name 창 리스트에 추가
Public name: 외부 라이브러리에서 익스포트된 이름으로 설정
Autogenerated name: IDA가 설정한 이름일 경우 체크됨
Weak name: 이 변수명을 weak 변수로 설정함
Create name anyway: 설정한 이름이 다른 변수명과 동일하더라도 그대로 설정 (비추천)

단축키 H: hex값을 10진수로 바꾸기
단축키 R: hex값을 문자로 바꾸기

enum window에서 insert or delete or ctrl+E키를 누르면 enum type 창이 뜸

Width: 심볼값의 크기. 2의 승수로만 넣을 수 있음
Hexadecimal/Decimal: 기본으로 보이는 심볼 값의 표현 방식. 10진수/16진수
Binary: or 연산자를 통해 비트를 설정하는 식의 심볼을 설정할 때
signed: 양수, 음수 구분이 있을 때 체크

enum 창에서 N을 누르면 심볼 추가창이 뜸
상수를 넣을 때 16진수는 0x 형태로, 문자는 ‘문자’ 형태로 넣음

menu – view- graphs – xref from을 누르면 함수에서 호출하는 함수들을 나열해 줌
보라색라이브러리 함수.

menu – view – user xrefs chart
start
end address는 IDA가 지정해 줌

depth: 깊이 설정. -1은 깊이에 제한이 없음
ignore: 안 봐도 되는 항목을 없애줌.

단축키 G
이동. 주소나 IDA에서 쓰이는 대부분의 이름(함수명, 변수명 등)으로 사용

레지스터 누르고 단축키 N: 레지스터 이름 변경
start와 end주소는 보통 함수의 처음과 끝.
여기선 edi가 0이 되는 부분부터 pop하는 부분까지만 설정하므로 그 주소를 써줘야함
사용시 문제점은 1) 주소가 그래프뷰에선 기본으로 보이지 않음
2) 어떤 흐름 내의 특정 레지스터만 이름을 재설정할 때 분기가 많으면 일일이 프로그램 구간을 나누어서 start와 end 주소를 입력해야 함.
함수 영역이 아닌 부분에서는 레지스터 이름 변경이 불가능

Ctrl+P: Functions창과 동일하지만 단축키를 통해 열 수 있음.
함수 이름을 알 경우 타이핑해서 찾을수도 있음

디버거 설정: 툴바나 메뉴바 > Debugger – switch debugger or select debugger에서 선택
local: 현재 컴퓨터에서 디버깅
remote: 외부(가성 컴퓨터 포함)에서 디버깅
Bochs는 Vmware와 같은 가상화 프로그램.

F2: 브레이크 포인트
F7: step into
F8: step over
F5: IDA view창에서는 디컴파일, IDA view EIP 창에서만 Run 기능

F2로 걸리는 브레이크 포인트는 소프트 브레이크 포인트
그 외 다른 브레이크 포인트를 걸려면 F2로 브레이크 포인트를 걸고 우클릭 – Edit breakpoint

0개의 댓글