본문 바로가기

취약점 분석/Pin Tool

명령어 주소를 이미지이름+나머지로 나타내기

반응형

[PinTool] 명령어 주소를 '이미지이름 + 나머지'로 출력하기.


Pintool에서 InsertCall로 함수를 삽입할 때 지금 보고 있는 위치가 어디인지 식별하기 위해 인자로 IARG_INS_PTR을 넘겨 현재 명령어의 주소를 받아 파일로 출력하곤 한다.


Imagebase는 자주 바뀌므로 IDA를 통해 본다던지 등에서 불편함이 있을 때가 많은데, IDA와 병행해서 보기 편하게 'dll+나머지주소'로 출력한다면 훨씬 수월하게 추적이 가능하다.


자주 사용하는 방식이므로 기록해두고자 한다.


넘겨받은 IARG_INS_PTR'현재 명령어 주소'는 가지고 있는 상태라고 가정한다.


현재 명령어가 속한 이미지를 찾기 위해서는 IMG_FindByAddress() 함수를 사용한다.

이로써 img object를 얻었다.

img object를 얻었으면 '이미지 이름'과 '로드된 offset'을 얻을 수 있다.


이미지 이름은 IMG_Name() 함수에 img object를 인자로 호출하면 얻을 수 있다.

kernel32.dll 이런식이 아닌, dll의 풀 경로가 반환된다. dll 이름만 필요한 경우 별도의 코드를 추가해서 문자열을 잘라 쓰자.

ex) IMGName.substr(IMGName.find_last_of("/\\") + 1);


IMG_LoadOffset() 함수에 img object를 인자로 호출하면 해당 dll의 ImageBase를 얻을 수 있다.


==> 얻게된 요소들을 정리하면 다음과 같다.

  1. 현재 명령어 주소.
  2. 이미지 이름 (풀 경로)
  3. ImageBase

출력을

OutFile << '이미지 이름' << "+" << '현재 명령어 주소' - ImageBase << endl;

이렇게 준다면 '이미지이름 + 나머지 주소'의 구현이 가능하다.

반응형

'취약점 분석 > Pin Tool' 카테고리의 다른 글

Win API) 메모리 값 읽기  (0) 2018.12.27
메모리 값을 Hex 문자열로 출력하기  (0) 2018.12.24