[6주] 11장 IDAPython
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 |