13 Security Lab

IDA Pro Command-line Analysis 본문

Computer Security/Analysis

IDA Pro Command-line Analysis

Maj0r Tom 2021. 3. 3. 23:49

IDA Pro를 통해서 대량 분석을 위해 자동 분석 또는 커맨드라인으로 처리하는 방법을 정리한다.

 

▶ About IDA Pro Batch mode options

 

IDA Pro 설치 경로 내 실행파일과 종류

IDA Pro 에는 GUI 버전의 실행파일과 커맨드라인 버전의 실행파일이 있다.

x86 gui : ida.exe
x86 cli : idat.exe
x64 gui : ida64.exe
x64 gui : idat64.exe

각 프로그램은 분석 대상 바이너리의 아키텍처(x86, x64 등) 또는 gui, cli 를 의미하지만 내부적인 동작에는 차이가 없다.
다만 당연히 화면처리 여부에 따라서 속도차이가 발생하므로, 커맨드라인 처리를 위해서는 cli 모드를 쓰는게 나을듯하다. (GUI 모드도 인자 주면 동일하게 동작함)

 

 

IDA Pro 로 분석 idb 파일 만들기

ida pro 분석 데이터 포맷인 .idb 파일과 어셈블리 분석 결과인 .asm 파일이 만들어진다.
idb :  파일은 바이너리를 분석하고 나서 저장하면 생기는 ida pro의 고유 분석데이터 포맷으로 IDA pro가 분석한 파일의 분석결과에 대한 정보를 담고 있다. 바이너리 별로 분석한 결과가 각각 idb 파일에 저장된다.

asm : 바이너리 코드를 디어셈블리한 어셈블리 코드 텍스트파일, 텍스트 파일 형태로서 함수 별 코드 정보를 담고 있다

idat.exe –A –B {full path to  the file you want to analyze}

"-B": Batch mode. IDA generates "idb" and "asm" file automatically
"-A": Autonomous mode.

 

 

스크립트를 통해서 데이터 추출하기

IDA Pro 실행파일(ida.exe)에 인자로 스크립트경로를 주어서 실행한다.
위에서 생성한 idb 파일도 입력인자로 같이 전달한다.

idat.exe -A -S"C:\Path\test_script.py foo bar" "C:\Path\mydatabase.idb"

"-S": Executes a script file when the database is opened

 

테스트 idc 코드

import idc
import idascript
 
print "Hello world from IDAPython\n"
for i in xrange(1, len(idc.ARGV)):
    print "ARGV[%d]=%s" % (i, idc.ARGV[i])

idc.Exit(0)

 

 

IDA Pro FLIRT (Function Signature ) 생성하기

(FLIRT: Fast Library Identification and Recognition Technology)

*시그니처 적용 시 IDA 더미 이름으로 명명 된 함수만 자동으로 이름을 바꿀 수 있습니다. 즉, 사용자가 임의로 함수의 이름을 바꾸고 해당 함수가 나중에 sig를 적용하면 함수의 이름이 변경되지 않습니다. 따라서 분석 초기에 적용하는 것이 유리합니다.

방법1. idb2pat 활용

ida.exe -S"[idb2pat.py파일경로]" [idb파일경로]


"-A" 옵션 없이 실행해야 프로그램 로드 및 초기분석 과정 후에 스크립트가 실행된다.

정상적으로 진행되면 IDA Dialogue 출력창에서 스크립트 실행결과 확인할 수 있다.
아래와 같은 진행이 확인 되지 않으면 보통 뭔가 문제가 생겨서 정상적으로 진행되지 않은 것이다.

idb2pat.py

 

방법2. Lib 포맷 파일로 부터 추출

이 방법은 시그니처를 만들 정적 라이브러리 파일(*.lib) 이 필요하다.

pcf.exe [lib file path]

lib file 이 위치한 경로에 pat 파일이 생성된다.

여러개로 생성된 pat 파일을 하나의 시그니처로 유지하려면 내용을 복사 붙여넣기해서 이어붙여 저장하면된다.

 

.pat 파일

생성 된 .pat 파일은 텍스트 파일이어서 내부에 시그니처: 오프셋: 함수 이름정보 등이 들어가있다.

pattern .pat

 

 

Sinature 파일 생성하기 (.sig)

IDA 플러그인 프로그램 중에 sigmake 를 통해서 sig 파일을 생성한다.

sigmake [.pat파일경로] [.sig파일경로]
// .pat파일경로는 변환할 pat파일경로
// .sig파일경로는 생성 될 파일명 또는 경로

 

Signature COLLISIONS Error

같은 패턴을 가지는 함수가 2개 이상있을경우 아래와 같은 충돌 에러 메시지가 나온다.

잘못된 것은 아니고 어떤것을 패턴의 함수이름으로 할것인지를 선택해주면된다.

[file path] : modules/leaves: 1/123, COLLISIONS: 1

See the documentation to learn how to resolve collisions. 

 

시그니처 파일의 확장자 exc 내용을 보면 아래와 같이 적혀있다.

첫번쨰 라인을 지워주고, 저장한다. 그리고 다시실행하면 정상적으로 sig파일이 생성된다.

;--------- (delete these lines to allow sigmake to read this file)

; add '+' at the start of a line to select a module

; add '-' if you are not sure about the selection

; do nothing if you want to exclude all modules


 

sig파일을 Signatures window 또는 Shift+f5 눌러서 불러오는 것보다 자동으로 로드 될 수 있는 방법 찾아봤으나, 지정된 일부 시그니처만 자동으로 적용되는것으로 보인다.

ida pro 에서 제공하는 함수 LoadSigFile로 스크립트 또는 명령으로 불러올 수 있고 자동화 로드 리스트를 만들 수 있을 것 같다.

 

 

IDA Pro 바이너리 호출관계 그래프로 생성하기

GDL 문법 기반으로 그래프를 표현하여 텍스트파일로 생성한다.

GDL(Graph Description Language) : CFG를 표현하기 위한 Graph Description Language
GDL의 구성
CFG 전체를 대표하는 graph
각 basic block을 나타내는 node
basic block들 간의 관계를 나타내는 edge

 

그래프 생성 코드 Example

import idc

cur = idc.MinEA()
end = idc.MaxEA()

path = idc.GetIdbPath().rsplit('.')[0]+ '.gdl'

idc.GenCallGdl(path, 'Call Gdl', idc.CHART_GEN_GDL)
idc.Message('Gdl file has been saved to {}\n'.format(path))

 

 

바이너리 호출 그래프 출력 결과

 

 

Comments