반응형

오랜만에 글을 올리는 것 같네요.

그 동안 잘 지내셨습니까?

이 글을 어느 분들이 보실지 모르겠지만 저에게 영감을 주신 달토끼님에게 감사 드립니다.

(달토끼님이 잘 정리하신 걸 제 나름대로 정리 해 보았습니다. 그래야지 내꺼가 되니까^^)

http://kuaaan.tistory.com/102

 

우선, 이 글은 개발에 필요한 디버깅 기술이 아닌 분석자의 입장에서 분석을 할 때 유용할 정보를 언급하는데 초점을 맞췄습니다. 따라서 "왜 Map, Cod 파일을 생성하면 되는데 이렇게 할까?" 라고 생각이 들겠지만 보안팀에서는 회사의 소스에 대한 접근 권한이 없는 경우가 많으므로 그럴 때 분석을 효과적으로 하기 위해서 필요한 내용을 정리하는 것이니 이점을 감안하여 보시길 바랍니다.

 

제 블로그를 보시면 아시겠지만 반어로 작성하니 이점 참고 하시길 바랍니다.

무례하다면 먼저 사과 드립니다.

////////////////////////////////////////////////////////////

 

1. Cod 파일이란? Map 파일이란?

 

분 류 

설명 

 Map

 Map 파일은 Visual Studio에서 제공하는 컴파일 시 Application에서 사용하는 전역변수, 함수의 위치를 기록한 파일이다. 해당은 Symbol파일이 없을 경우 함수의 주소와 특정 함수를 알고 싶을 때 사용한다.
(※ pdb 파일이 있다면 굳이 할 필요가...;;)

 Cod

 컴파일을 하면서 C 코드가 어떻게 Assemble로 변환되어 지는지를 확인할 수 있는 파일이다. 해당 파일은 디스어셈블러의 분석하는데 있어서 사전 공부하는 중요한 지표가 될 수 있다.

 

Cod 파일은 확실하게 분석하는 입장에서는 반드시 확인하고 봐야하는 내용중에 하나 이다.

Map의 경우는 pdb와 연결되면 유용하지만 없을 경우에는 Map 파일이 있다면 해석하기 좋을 것이다.

 

2. Cod 파일 / Map 파일 생성 방법

  1) Cod 파일 생성 방법

     Cod 파일은 어셈을 공부하는 학생 및 어셈에 대해서 더 알고 싶은 사람이라면 꼭 봐야하는 파일이므로 모든 코딩을 할 때

     해당 파일을 생성하여 분석하는 것을 추천한다.

 

 

  2) Map 파일 생성 방법

     Map 파일은 PDB 파일은 전달 해주지 못할 경우 요청할 수 있는 파일이다.

 

 

3. 생성된 Cod / Map 파일

 

  1) Cod 파일

 

 ; Listing generated by Microsoft (R) Optimizing Compiler Version 14.00.50727.762

 TITLE [CPP 경로 ; c:\temp\test.cpp]
 .686P
 .XMM
 include listing.inc
 .model flat

INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES

PUBLIC ?TestFunction@@YAPAU_IMAGE_IMPORT_DESCRIPTOR@@PAUHINSTANCE__@@@Z ; TestFunction
EXTRN __RTC_Shutdown:PROC
EXTRN __RTC_InitBase:PROC
; COMDAT rtc$TMZ
; File c:\temp\test.cpp
rtc$TMZ SEGMENT
__RTC_Shutdown.rtc$TMZ DD FLAT:__RTC_Shutdown
rtc$TMZ ENDS
; COMDAT rtc$IMZ
rtc$IMZ SEGMENT

__RTC_InitBase.rtc$IMZ DD FLAT:__RTC_InitBase
; Function compile flags: /Odtp /RTCsu /ZI
rtc$IMZ ENDS

; COMDAT ?GetImportTable@@YAPAU_IMAGE_IMPORT_DESCRIPTOR@@PAUHINSTANCE__@@@Z
_TEXT SEGMENT
_optionalHeader$ = -20     ; size = 4
_dosHeader$ = -8     ; size = 4
_module$ = 8      ; size = 4
?TestFunction@@YAPAU_IMAGE_IMPORT_DESCRIPTOR@@PAUHINSTANCE__@@@Z PROC ; TestFunction, COMDAT

; 8    : {      

  00000 55   push  ebp
  00001 8b ec   mov  ebp, esp
  00003 81 ec d8 00 00
 00   sub  esp, 216  ; 000000d8H
  00009 53   push  ebx
  0000a 56   push  esi
  0000b 57   push  edi
  0000c 8d bd 28 ff ff
 ff   lea  edi, DWORD PTR [ebp-216]
  00012 b9 36 00 00 00  mov  ecx, 54   ; 00000036H
  00017 b8 cc cc cc cc  mov  eax, -858993460  ; ccccccccH
  0001c f3 ab   rep stosd

.................

_TEXT ENDS
END

 

 

  2) Map 파일

 

Timestamp is 52ddfe3f (Tue Jan 21 13:57:35 2014)

 Preferred load address is 00400000

 Start         Length     Name                   Class
 0001:00000000 00010000H .textbss                DATA
 0002:00000000 0000366cH .text                   CODE
 0003:00000000 00000104H .CRT$XCA                DATA
 0003:00000104 00000104H .CRT$XCAA               DATA
 0003:00000208 00000104H .CRT$XCZ                DATA

 ..................................................................

  Address         Publics by Value              Rva+Base       Lib:Object
 ..................................................................

 0002:000005e6       _GetModuleHandleW@4        004115e6 f   kernel32:KERNEL32.dll
 0002:000005f0       __RTC_InitBase             004115f0 f   MSVCRTD:init.obj
 0002:00000630       __RTC_Shutdown             00411630 f   MSVCRTD:init.obj
 0002:00000648       _printf                    00411648 f   MSVCRTD:MSVCR80D.dll
 0002:00000650       __RTC_CheckEsp             00411650 f   MSVCRTD:stack.obj
 0002:00000680       @_RTC_CheckStackVars@8     00411680 f   MSVCRTD:stack.obj
 0002:00000700       @_RTC_AllocaHelper@12      00411700 f   MSVCRTD:stack.obj
 0002:00000740       @_RTC_CheckStackVars2@12   00411740 f   MSVCRTD:stack.obj
 0002:0000084a       _getchar                   0041184a f   MSVCRTD:MSVCR80D.dll
 0002:00000980       _mainCRTStartup            00411980 f   MSVCRTD:crtexe.obj
 0002:00000c80       _NtCurrentTeb              00411c80 f i MSVCRTD:crtexe.obj
 0002:00000d70       __RTC_NumErrors            00411d70 f   MSVCRTD:userapi.obj
 0002:00000d80       __RTC_GetErrDesc           00411d80 f   MSVCRTD:userapi.obj
 0002:00000da0       __RTC_SetErrorType         00411da0 f   MSVCRTD:userapi.obj
 0002:00000dd0       __RTC_SetErrorFunc         00411dd0 f   MSVCRTD:userapi.obj
 0002:00000e00       __RTC_SetErrorFuncW        00411e00 f   MSVCRTD:userapi.obj
 0002:00000e30       ?_RTC_GetErrorFunc@@YAP6AHHPBDH00ZZPBX@Z 00411e30 f   MSVCRTD:userapi.obj
 0002:00000e40       ?_RTC_GetErrorFuncW@@YAP6AHHPB_WH00ZZPBX@Z 00411e40 f   MSVCRTD:userapi.obj

 ..................................................................

 0005:000002ac       __imp____p__fmode          004182ac     MSVCRTD:MSVCR80D.dll
 0005:000002b0       __imp____p__commode        004182b0     MSVCRTD:MSVCR80D.dll
 0005:000002b4       __imp___adjust_fdiv        004182b4     MSVCRTD:MSVCR80D.dll
 0005:000002b8       __imp____setusermatherr    004182b8     MSVCRTD:MSVCR80D.dll
 0005:000002bc       __imp___configthreadlocale 004182bc     MSVCRTD:MSVCR80D.dll
 0005:000002c0       __imp___CRT_RTC_INITW      004182c0     MSVCRTD:MSVCR80D.dll
 0005:000002c4       __imp__getchar             004182c4     MSVCRTD:MSVCR80D.dll
 0005:000002c8       __imp__printf              004182c8     MSVCRTD:MSVCR80D.dll
 0005:000002cc       __imp___onexit             004182cc     MSVCRTD:MSVCR80D.dll
 0005:000002d0       \177MSVCR80D_NULL_THUNK_DATA 004182d0     MSVCRTD:MSVCR80D.dll

 entry point at        0002:00000118

 

4. Map 파일 활용

 

 

 

5. Cod 파일 활용

  Cod 파일을 열어 보면 이게 몬지 잘 모를 것이다. 그럴땐 우선 Notepad++ 나 소스 코드의 하일라이트를 제공하는 프로그램을 이용하여 분석하면 수월하게 진행 할 수 있을 것이다. (언어 -> A -> Assembly)

 

 

 

그리고 또 하나의 팁은 SEGMENT/ENDS, PROC/ENDP 단위로 보면 된다.

즉,

 

???? SEGMENT

@@@ PROC

~~~~~

@@@ ENDP

???? ENDS

 

////////////////////////////////////////////////////////

 

Map 파일은 알고 있었는데 Cod 파일에 대해서는 VS 에서 디버깅할 때 어셈도 같이 보는 방식 이였는데

이렇게 파일로 생성 할 수 있다니 즐거운 경험을 하였습니다.

다시 한번 이 글을 빌어 달토끼님(http://kuaaan.tistory.com) 에게 감사 드립니다.

 

반응형
반응형

 

안녕하세요.

crattack 입니다.

 

홈페이지를 활용하는 방법에 대해서 미흡하여,

댓글을 남겨주시는 것을 잘 확인을 못하고 있었습니다.

그래서 댓글에 대한 충실한 답을 못드린 점 사과 드립니다.

 

향후엔 더 꼼꼼이 체크하여 답변을 남기도록 노력하겠습니다.

저의 부족한 홈페이지를 방문해 주신 여러분께 감사드리며, 좋은 정보를 공유할 수 있도록

노력 하겠습니다.

 

 

 

 

행복한 하루...

즐거운 인생을 위하여....

 

반응형

'Etc' 카테고리의 다른 글

이곳 Etc는.....  (0) 2012.05.03
반응형

 

도대체 왜 안되는 걸까에서 보름을 잡아 먹은 것 같다.

이런 저런 고민 끝에 문제가 해결 됐다.

 

문제는 취약한 파일의 이슈

그리고 전체적인 구조 파악을 하지 못 한 것들....

 

코드를 보고 계속 탐구 한 끝에 File Fuzzer v.0.1을 만들었다.

 

 

 

아직, 수정해야 하는 부분이 남아 있다.

crash가 발생하고 먼저 죽어버리는 상황이 발생 한다.

모니터링 함수 내부에서 종료 하는 함수로 인해서 비정상적으로 종료 되어 해당 내용을 수정 해야 한다.

 

 

그래도 성공 하였으니, 일단 v.0.1 버전으로 올리도록 하겠다.

환경은 Windows 7/Python v.2.7을 사용하였다.

반응형

+ Recent posts