IDA Pro에서 함수의 배열을 찾은 후에해야 할 일

개요



IDA Pro에서 함수 포인터가 연속하는 영역(함수 배열)을 찾은 후에는 구조체와 프로토타입 선언을 이용한다.
그러면 각 함수 호출시에 인수가 자동으로 식별되게 되어, 해석이 뒤따른다.

함수가 Win32 API인 경우에는 FireEye의 flare-ida 의 StructTyper 를 이용하는 것으로 프로토타입 선언의 자동화도 가능.


설정 흐름


  • 함수의 배열에서 배열 요소의 함수 호출을 찾습니다.
  • 구조체를 정의하여 배열 요소의 각 함수를 정의
  • 각 함수에 프로토 타입 선언을 정의 [코코를 StructTyper로 자동화]
  • 인수를 정수 표시

  • 함수 배열에서 배열 요소의 함수 호출 찾기



    이 예제에서는 스택에 쌓인 함수의 배열에 대한 포인터를 호출하는 부분을 찾은 부분부터 시작합니다.


    구조체를 정의하여 배열 요소의 각 함수를 정의합니다.



    1) Structure 탭에서 마우스 오른쪽 버튼을 클릭하고 Add struct type을 선택

    2) 구조체 이름을 입력하고 OK로 구조체 작성
    3) 구조체 이름을 마우스 오른쪽 버튼으로 클릭하고 데이터 선택
    4) 추가된 요소상에서 d누름에 의해 요소사이즈를 dd(4 bytes)로 한다
     ※ 본 설명중에서는 32bit의 프로그램을 해석하고 있기 때문에 포인터 사이즈는 4 bytes이지만,
    64bit의 프로그램을 해석하는 경우에는 요소 사이즈를 8 bytes로 하는 것

    5) 배열의 요소 수분만큼(3)~(4)를 반복한다
    6) 각 요소를 마우스 오른쪽 버튼으로 클릭하고 Rename을 선택하여 함수 이름을 부여

    7) 배열 요소의 함수 호출 부분에서 피연산자를 마우스 오른쪽 버튼으로 클릭 (※)하고 Structure offset-> 작성한 구조체를 선택
     ※ 본 설명중에서는 call dword ptr [eax+4]의 eax를 오른쪽 클릭


    각 함수에 프로토 타입 선언을 정의 【코코를 StructTyper로 자동화】



    수동 프로토 타입 선언 방법



    Structure 탭에서 (6)에서 부여한 함수명을 마우스 오른쪽 버튼으로 클릭하고 Set type 선택, Microsoft 문서 에서 확인한 함수 정의를 설정


    자동 프로토 타입 선언 방법 (StructTyper 사용)



    1) Github에서 fireeye/flare-ida 다운로드
    2) StrutTyper를 IDA pro에 설치

    플러그인
    To install, copy the contents of the plugins directory in this repository to your %PROGRAMFILES%\IDA\plugins folder.

    파이썬
    The python directory here can be copied to your %PROGRAMFILES%\IDA\python folder, or you can modify your PYTHONPATH environment variable to include the directory.

    3) IDA Pro 상단 메뉴의 Edit > Plugins > StructTyper에서 작성한 구조체를 선택


    "수동 프로토 타입 선언 방법"과 유사한 결과를 얻을 수 있습니다.

    프로토타입 선언 실시 후





    인수를 상수로 표시



    인수의 숫자를 마우스 오른쪽 버튼으로 클릭하고 기호 constant 선택, 적절한 상수 설정


    마지막으로



    앞으로도, 바이너리 해석용의 테크닉을 자신의 메모로서 남겨 갈 것입니다.
    실수나 개선점이 있으시면 알려 주시면 감사하겠습니다.

    좋은 웹페이지 즐겨찾기