아이다(IDA)로 윈도우 바이너리를 리버싱하게 되면 Functions window에서 함수의 이름이 보이지 않고 'Sub_주소' 으로 보이게 된다.(다음 화면은 winmine.exe를 open한 화면)


이러면 분석이 어려우므로 함수의 이름을 보기 위해 MS 심볼 서버와 연동을 시켜야 한다.

MS 심볼 서버 : MS에서 디버그 심볼을 자동으로 다운로드 받아 디버깅 시 디버그 심볼도 같이 포함되어 디버깅을 편하게 할 수 있게 해준다. 콜스택이 제대로 보여지게 된다.
(참고 : 심볼 서버의 기능을 요약하면 '덤프 파일이 생길 때의 환경을 재현하기 위해서 필요한 심볼들을 자동으로 다운로드하는 것'이다)

Determina PDB Plugin for IDA Pro 라는 IDA 플러그인을 이용하면 IDA에서도 디버그 심볼을 포함시켜서 디버깅이 가능하게 된다.(원래 WIndbg 기능)

압축을 풀고 Plugin 폴더안에 두 개의 폴더 안에 있는 pdb.plw, pdb.p64 라는 파일을 IDA가 설치 된 경로의 Plugins 폴더로 복사한다.
그리고 나서 압축을 푼 폴더를 보면 detpdb.cfg라는 파일이 있는데 IDA가 설치 된 경로의 Cfg폴더로 복사한다.

detpdb.cfg 파일을 메모장으로 열고 다음과 같이 수정한다.

//
// Determina PDB plugin
//

// Symbol search path in the format used by WinDbg debugger. If the option is
// not set, DbgHelp will search the local directory and the paths in the
// _NT_SYMBOL_PATH and _NT_ALTERNATE_SYMBOL_PATH environment variables.

// Download public symbols from the Microsoft symbol server and store them in
// the C:\Symbols directory.           (심볼 파일을 저장할 디렉터리)

// DETPDB_SYMBOL_PATH =
"SRV*C:\\Symbols*http://msdl.microsoft.com/download/symbols";
(심볼 파일을 해당 주소에서 다운받아 지정한 디렉터리에 저장)

// Enable DbgHelp debugging output. Use Sysinternals DebugView to see it.

// DETPDB_DEBUG = YES

내컴퓨터 우클릭->속성->고급->환경 변수 를 클릭한다.


사용자 변수에 새로 만들기를 클릭한 후

변수 이름 : _NT_SYMBOL_PATH
변수 값 : SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols


이제 IDA를 켜서 윈도우 바이너리(winmin.exe)를 open하면 함수이름이 보이는 것을 볼 수 있다.


만약 설정이 잘못됐을 시에는 로그에 ERROR: NO symbols found 메시지가 출력된다.

'Tool' 카테고리의 다른 글

메모리 패치(Memory Patch)  (1) 2009.11.07
디컴파일러(Decompliers)  (0) 2009.11.07
아이다(IDA)에 MS 심볼 서버 연동하기  (9) 2009.11.06
아이다(IDA)에 Hex-Ray 연동  (9) 2009.11.06
아이다(IDA) 사용법  (49) 2009.11.02
시스템 모니터링 툴  (0) 2009.11.01
Posted by Dakuo

댓글을 달아 주세요

  1. 2010.02.09 22:57  댓글주소  수정/삭제  댓글쓰기

    정말 좋은거 마니 배우고 많이 받아갑니다 감사합니다. 행복하세요 ^^*

  2. 쏭's 2010.03.05 13:53 신고  댓글주소  수정/삭제  댓글쓰기

    보고 배울 것 진짜 많은 홈피 쥔장님, 질문 좀....

    IDA demo 버전이면, symbols 연동이 안되나요? 급한데로 demo 받았는데.. 계속 안돼서 ㅠ

  3. 갯힝 2010.03.21 00:16  댓글주소  수정/삭제  댓글쓰기

    쥔장님
    // DETPDB_SYMBOL_PATH =
    "SRV*C:\\Symbols*http://msdl.microsoft.com/download/symbols";

    이부분에서
    // DETPDB_SYMBOL_PATH = "SRV*C:\\Symbols*http://msdl.microsoft.com/download/symbols";
    이렇게 해줘야지 인식되내요..

    • 갯힝 2010.03.21 00:29  댓글주소  수정/삭제

      그리고 적용다해서 winmin 오픈해도.. 심볼이 안되내요 ㅇㅅㅇ... 마지막엔 어떻게 하는지좀 갈켜주셔요~;
      에러도 없는데 말이죠 ㅇㅅㅇ..;ㄷㄷ

    • Dakuo 2010.03.21 01:49 신고  댓글주소  수정/삭제

      전 저기 위에 쓴

      변수이름 : _NT_SYMBOL_PATH
      변수 값 : SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols

      이설정으로 지금도 아이다 심볼서버 연동해서 잘쓰고 있습니다...

      그리고 Microsoft 심볼서버는

      윈도우즈 프로그램(사용자 작성 프로그램말고)을 디버깅할때만 적용되는걸로 알고 있습니다.

  4. 갯힝 2010.03.21 13:01  댓글주소  수정/삭제  댓글쓰기

    아.. 디버깅때만 가능한거였군요 ㅇㅅㅇ;;; 감사합니다 좋은자료 감사합니다

  5. tyche87 2011.10.19 21:00  댓글주소  수정/삭제  댓글쓰기

    dakuo, 검색해서 찾아오니 색다르군 ㅋㅋ 그래도 FreeBSD용 ELF 파일에서 전부다 sub~ 로 보이는건 무슨 탓인가 -ㅁ-; 유독 내 컴퓨터만 그렇는데.........