일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- open office xml
- Rat
- Ransomware
- h5py.File
- 포인터 매핑
- why error
- Analysis
- malware
- idapython
- error
- ida
- MySQL
- x64
- debugging
- idb2pat
- hex-rays
- TensorFlow
- data distribution
- NumPy Unicode Error
- pytest
- mock.patch
- Python
- idapro
- error fix
- ecma
- svn update
- ida pro
- commandline
- javascript
- Injection
- Today
- Total
13 Security Lab
IDA Pro Command-line Analysis 본문
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 출력창에서 스크립트 실행결과 확인할 수 있다.
아래와 같은 진행이 확인 되지 않으면 보통 뭔가 문제가 생겨서 정상적으로 진행되지 않은 것이다.
방법2. Lib 포맷 파일로 부터 추출
이 방법은 시그니처를 만들 정적 라이브러리 파일(*.lib) 이 필요하다.
pcf.exe [lib file path]
lib file 이 위치한 경로에 pat 파일이 생성된다.
여러개로 생성된 pat 파일을 하나의 시그니처로 유지하려면 내용을 복사 붙여넣기해서 이어붙여 저장하면된다.
.pat 파일
생성 된 .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))
바이너리 호출 그래프 출력 결과