About IDA.
다운로드 링크 ===> https://www.hex-rays.com/products/ida/support/download.shtml
링크에 들어가서 최신 버전 및 자신의 PC 환경에 맞는 버전을 설치하면 되고, 설치하는데 특별한 어려움은 X.
IDA는 Interactive DisAssembler의 약자로 바이너리 정적 분석 기능을 가진 툴.
같이 설치되는 Hexray Decompiler는 ASM 코드를 가상 C언어 Pseudocode로 변환.
이를 기반으로 디버깅 할 수 있는 것이 장점이고 C++,Python을 기반으로 하는 다양한 플러그인을 제작해 사용 O.
Version 64bit를 기반으로 Pwnable.dragon의 예제로 해보겠다.
처음 Load a new file 할 때 창.
이 창은 파일을 열 때 설정들을 하는 창인데 대개 PE 파일 아니면 ELF 파일을 분석하는 경우기에
대부분의 경우 그대로 둔다. 맨 위 ELF or Binary 라고 써 있는 부분이 있는데 이건 파일의 종류를 설정하는
창인데, 실제 파일의 종류와 IDA가 찾은 파일의 종류가 다를 경우 사용자가 직접 정할 수 있는데, 대부분
IDA가 정확하기에 그냥 OK를 누르면 된다.
PDB file을 로드할지 묻는 창. PDB 파일이 없으면 no.
PDB => Program Database의 약자.
즉 IDA는 작업할 때 원본 실행파일이 아닌 idb라는 DB에 작업을 한다.
IDA로 무슨 변경을 하든 원본 파일에는 변화 X.
즉 원본 파일이 없어도 idb 파일만 있다면 분석할 수 O.
IDA에서는 작업을 되돌릴수 없기에 잘못했으면 저장하지 말고 종료.
Text View => Graph View를 보는 것이 불가능 or 데이터 부분을 볼 때 사용.
Cf) Space Bar를 통해 전환 가능 Ex) Text <=>Graph.
Graph View => 그래프 형태로 흐름이 나타나 O.
분기가 참 => Green.
거짓 => Red.
무조건 jump => Blue.
Cf) 선을 더블 클릭하면 현재 화면의 위치에 따라 화살표가 시작하는 곳과 끝나는 곳으로 화면이 전환.
Cf2) 그래프 뷰에서 메모리의 주소를 볼 때는 Menu => Option => General => Disassembly => LinePrefixes.
Cf3) 창들을 임의로 배치할 수 있는데 세팅한 후에 Windows => Save desktop으로 저장하는데
이 때 Default에 체크하면 껐다 켜도 창의 배치가 유지.
함수 내부로 들어갈 때는 Enter, 나올 때는 Esc.
상단의 Tab들은 Ctrl + Tab을 이용해서 이동할 수 있고, Ctrl+1을 이용해 열려있지 않는 Tab으로도 이동 O.
IDA를 종료하려면 위와 같은 창이 뜨는데 id0,id1,nam,til 파일들이 idb 파일로
합치게 되는데 설정하는 칸.
Don't pack database는 파일을 묶지 X.
Pack database(Store,Deflate)는 파일을 묶게 된다.
Deflate 설정은 묶을 때 압축 O.
대부분 database(Store)로 설정.
Collect garbage = Garbage collector.
Don't save the database는 IDA를 연 후에 작업했던 것들을 저장하지 않는 옵션.
#String.
View => Open subviews => Strings or Ctrl+1[Quick View].
들어가면 프로그램내의 모든 문자열을 찾아내어 하나의 화면에 보여준다.
Strings 창에서 오른쪽 클릭 => Setup, ignore instruction/data definitions
=> 명령어 or 데이터라고 생각되는 문자열 부분도 리스트에 확인 O.
=> IDA가 코드나 데이터라고 생각되는 것을 무시하는 것이 아니라 그 반대의 의미.
=> 옵션이 체크 되어 있으면 명령어나 데이터라 생각되는 문자열 부분도 리스트에서 보여준다.
Strings에서 더블 클릭하면 IDA View 창의 해당 문자열 부분으로 이동.
가장 왼쪽에 있는 주소는 섹션명과 가상 주소.
같은 주소가 4번씩이나 나오는 경우가 있는데 맨 아래 있는 것이 실제 값.
첫번째 줄에는 변수의 타입과 변수명을 알려주는데 IDA는 문자열이 참조되는 코드를
찾아내고 어떤 라이브러리 함수의 인자로 들어갔는지 확인 후에 적당한 이름을 지어준다.
Unicode는 해당 문자열의 타입.
Unicode는 hex view를 이용해 확인 O.
Hex view 창으로 가면 해당 주소가 나오는데 IDA View-A 창과 Hex View-A 창은 싱크로되어있기 때문.
싱크로되어 있다는 건 동기화 시킨다는 의미.
Ex) IDA view 창에서 111111 부분을 Hex view 창에도 111111 부분이 보이고 반대도 동일.
오른쪽 마우스 => Synchronize with로 설정 O.
데이터 타입이 unicode인 것을 IDA가 알아야 한다.
문자열의 시작인 부분부터 마지막까지 Drag. or 시작 부분에 커서를 두고 ALT + A 된다.
#ESC는 이전 위치로 가는 단축 키.
#Data xref(문자열)이 참조된 코드를 보여주는 기능.
문자열 창에는 unicode, 디스어셈블 창에는 제대로 인식하지 못해서
data 섹션에서 1자로 되어 있는 것.
dd - byte [1 byte], dw - word [2 byte],dd - double [4byte]
단축키 d를 누르면 db -> dw -> dd 순으로 변경.
#xref to[단축키 x].
함수 or 데이터가 사용된 곳을 모두 찾아주는 기능.
xref to 함수 or 데이터가 어떤 용도로 쓰이는지 알아보거나 프로그램 흐름을 파악하는데 큰 도움.
=> Direction [코드의 상대적 위치].
=> Type [Open,Read,Write] => O,R,W 코드의 간단한 쓰임새를 알 수 O.
=> Address [메모리 주소]
=> Text [명령어 내용]
Cf) 함수의 인자가 제대로 나와있지 않으면 함수를 클릭하고 Y를 누르면 함수의 이름 수정 O.
변수명을 클릭하고 N을 누르면 변수명을 바꿀 수 있는 창이 등장.
Local name => 특정 함수 내부에서만 쓰이는 이름으로 저장.
Include in names list => Name 창 리스트에 추가.
Public name => 외부 라이브러리에서 export된 이름으로 설정.
Auto generrated name => IDA가 설정한 이름일 경우 체크.
Weak name => 변수명을 weak 변수로 설정.
Create name anyway => 설정한 이름이 다른 변수명과 동일하더라도 그대로 설정.
다시 이름을 되돌리고 싶으면 SpaceBar(공백)를 넣어서 저장.
Hex 값을 클릭하고, H 누르면 10진수로 바뀌고, 문자로 바꾸려면 R.
Enum Tab에서 ins를 누르면 enum을 생성 O. 생성한 enum를 클릭하고 N을 누르면 list 생성 O.
1번째 화면은 xrefs to.
Menu => View => Graphs => xrefs to
이 함수에 도달하기까지 모든 경우의 함수 흐름을 Graph.
2번째 화면은 xref from.
Menu => View => Graphs => xref from
이 함수에서 호출하는 함수들을 나열. 보라색 상자는 라이브러리 함수.
3번째 화면은 user xrefs chart.
두 기능을 동시에 사용 O.
Depth를 -1로 하면 이동 횟수에 제한엇이 전부 보여준다는 것.
Externals를 체크하면 라이브러리함수를 보이지 않게 할 수 O.
단축키 G => 주소 or 함수 이름을 가지고 이동 O.
=> 레지스터 값을 따라가면서 레지스터에 어떤 값이 들어가있는지 파악 O.
단축키 N => 레지스터의 이름을 함수 단위로 지정 O.
CTRL + P를 누르면 function 창이 뜨는데 바로 검색을 할 수 O.
Cf) strings, inport,export 창에도 가능.
Cf) ?는 IDA에서 모르는 데이터를 나타날 때 사용.
모르는 데이터라는 건 리버싱하는 파일에 존재하지 않는 데이터.
이 데이터는 IDA가 프로그램을 분석하면서 파일에 존재하지 않는다고 생각하는 부분에
접근하는 명령어를 가지고 공간을 만들어 Naming을 해주고 ??로 채워놓는다.
2편에서 계속.
참조 => 지뢰찾기 리버싱을 통한 IDA pro 사용법 (1).pdf
'#Tool' 카테고리의 다른 글
About DotPeek. (0) | 2018.05.17 |
---|---|
About Reflector. (0) | 2018.05.17 |
About HxD. (0) | 2018.05.16 |
About PEID. (0) | 2018.05.16 |
About IDA Part 2. (0) | 2018.05.15 |