[6주] 11장 IDAPython

Posted by dw0rdptr
2015. 2. 23. 14:54 Study/파이썬 해킹 프로그래밍

IDA Pro는 강력한 정적 분석 도구이다. 대부분의 아키텍쳐에 대한 바이너리를 분석할 수 있으며, 다양한 플랫폼에서 동작하고, 디버거를 내장하고 있다. 또한 IDC라는 자체 스크립트 언어를 갖고있으면 개발자가 IDA 플러그인 API를 사용할 수 있게 SDK를 제공한다.

2004년 IDAPython이 릴리즈되었는데, 이는 리버스 엔지니어가 IDA 플러그인 API와 IDC 스크립트, 파이썬이 제공하는 모듈에 접근할 수 있게 해주는 플러그인이다.


IDAPython은 IDC와 완벽히 호환되므로 IDC가 지원하는 모든 함수를 사용할 수 있다. 그중 스크립트를 작성할 때 주로 사용되는 함수를 살펴보자


유틸리티 함수

ScreenEA()

- IDA 화면에 있는 커서의 현재 위치를 구한다

GetInputFileMD5()

- IDA에 로드된 바이너리의 MD5 해시 값을 구한다.


세그먼트 - IDA에서 바이너리는 여러 세그먼트(CODE,DATA,BSS,STACK,CONST,XTRN)으로 나뉜다.  다음 함수들은 바이너리 내부의 세그먼트에 관한 정보를 구하는데 사용된다

FirstSeg()

- 바이너리의 첫 번째 세그먼트의 시작 주소를 반환한다.

NextSeg()

- 바이너리의 다음 세그먼트 시작주소를 반환한다. 더 이상 반환할 세그먼트 주소가 없다면 BADADDR을 반환

SegByName( string SegmentName)

- 특정 세그먼트 이름을 갖는 세그먼트의 시작 주소를 반환

SegEnd( long Address)

- 특정 주소가 포함되는 세그먼트의 마지막 주소 반환

SegStart( long Address)

- 특정 주소가 포함되는 세그먼트의 시작주소반환

SegName(long Address)

- 특정 주소가 포함되는 세그먼트의 이름반환

Segments()

- 바이너리에 있는 모든 세그먼트의 시작 주소 리스트를 반환


함수 - 바이너리 내의 함수에 관련된 작업을 수행할 때 유용하게 사용되는 함수

Functions( long StartAddress, long EndAddress )

- StartAddress와 EndAddress 사이에 존재하는 함수들의 시작 주소 리스트를 반환

Chunks( long FunctionAddress)

- 함수리스트를 반환

LocByName( string FunctionName )

- 특정 이름을 갖는 함수의 주소를 반환

GetFuncOffset( long Address )

- 함수 내의 주소를 함수 이름과 해당 함수 내에서의 오프셋 값을 나타내는 문자열로 변환

GetFunctionName( long Address )

- 특정 주소가 속하는 함수의 이름을 반환


교차 참조 - 대상 바이너리의 코드가 어떻게 실행되어 가는지, 그때의 데이터 흐름이 어떻게 변하는지 등을 교차함수 로 확인하는데, IDAPython은 다양한 교차 참조를 판단할 수 있게 많은 함수를 제공


CodeRefsTo( long Address, bool Flow )

- 특정 주소에 대한 코드 참조 리스트를 반환

CodeRefsFrom( long Address, bool Flow )

- 특정 주소로부터의 코드 참조 리스트를 반환

DataRefsTo( long Address )

- 특정 주소에 대한 데이터 참조 리스트를 반환

DataRefsFrom( long Address )

- 특정 주소로부터의 데이터 참조 리스트를 반환

'Study > 파이썬 해킹 프로그래밍' 카테고리의 다른 글

[6주] 10장 윈도우 드라이버 퍼징  (0) 2015.02.23
[5주] 09장 Sulley  (0) 2015.02.23
[5주] 08장 퍼징  (0) 2015.02.16
[4주] 07장 DLL과 코드 인젝션  (0) 2015.02.16
[3주] 05장~06장 후킹  (0) 2015.01.26