반응형

 

Name Mangling 이라고 하면 저에게 생소한 부분이였습니다.

Cod, Map 파일을 분석하면서 연계가 되어 Name Mangling 까지 가게 되었네요.

 

이후 부터는 반어를 사용합니다. 이점 양해해 주시길 바랍니다.

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

 

1. Name Mangling 이란?

   프로그램에서 함수를 선언하거나 전역 변수 등의 선언 했을때, 실제 생성된 함수는 컴파일러의 특징에 따라서 일정한 규칙을 통하여 함수, 변수명이 변경 된다. 이것을 Name Mangling 또는 Name Decoration 이라고 한다. 

   즉, 임의로 Test() 함수가 !Test@@YAXHAPAK 와 같이 변경되는 것을 의미한다.

 

 

 

 

2. 바뀌는 이유가 무엇인가?

   Function Overloading과 관련이 있다. Function Overloading이란 동일한 이름으로 다른 기능을 수행하는 함수를 여러개 만들었다고 치자. 그럴 경우 어떤 함수를 불렀는지 확인 할 수 없으므로 동일한 이름이라고 하더라도 따른 이름을 부여하여 프로그램이 동작하는데 있어서 문제가 발생하지 않도록 하기 위한 하나의 방지 책이다. 그림으로 쉽게 설명하도록 하겠다.

 

 

< 출처 : http://spikez.tistory.com/19 >

 

3. Name Mangling을 적용 / 미 적용 방법

 

Name Mangling 미적용 

  extern "C" __declspec(dllexport) void h(void)

  void h()

Name Mangling 적용

  __declspec(dllexport)

  ?h@@YAXXZ

 

  위와 같이 extern "C"를 붙이게 되면 C Type으로 함수명을 Naming을 하겠다는 선언이다. C Type의 Naming은 코드 상에서 사용하는 함수명 그대로 사용하는 것을 의미 한다.

 

4. Name Mangling 적용된 파일 분석 하는 방법

 

   undname 이라는 유틸리티가 있습니다. undname 프로그램은 Visual Studio를 설치하게 되면

 

[VS 설치 폴더]\VC\bin\undname.exe 

  

   존재 할 것이다. 해당 파일을 그냥 때려 막으면 Name Mangling가 복원되어 화면에 출력해 준다. 그때 아래의 명령으로

   파일로 생성하여 분석에 활용하면 Name Mangling으로 된 함수로 인해서 눈 아픈 일은 없어질 것이다.

 

 

undname.exe TestProg.map > und_function_Map.txt 

 

  이와 같이 할 경우 아래와 같은 결과 물을 얻을 수 있어서 분석하는데 도움이 될 것이다.

 

 

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

이번 기회에 undname을 통하여 Name Mangling이 적용된 함수를 C Type의 함수로 변경하는 방법을 알 수 있었습니다.

굳이, 파일이 아니더라도 문자열을 넣어도 변환 되므로 편의에 맞게 사용하면 좋을 것 같습니다.

사용 방법은 동일 합니다.

 

    

반응형
반응형

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

그 동안 잘 지내셨습니까?

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

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

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) 에게 감사 드립니다.

 

반응형
반응형

 

LoadLibrary는 사용하는 Application이 직접 DLL, EXE를 메모리에 올려 핸들을 얻어오는 함수이고,

GetModuleHandle현재 메모리에 올라와 있는 DLL, EXE의 Handle을 얻어오는 함수 이다.

 

그럼 이런걸 어디에 사용하면 좋은가???

 

LoadLibrary의 경우는 그냥 내가 필요한 DLL을 직접 호출 할때 사용하는 것이 좋고

 

GetMoudleHandle의 경우는 현재 올라가져 있는 DLL, EXE의 핸들을 얻어오는 과정

즉, 디버거 또는 현재 타겟이 되는 메모리 주소 번지를 확인 할 때 사용하는 것이 좋다.

 

단, GetModuleHandle로 얻어온 handle은 FreeLibrary를 하면 안된다.

현재 사용하고 있는 다른 곳(프로그램)에서 문제가 발생할 수 있다.

따라서 사용이 끝나면  CloseHandle로 마무리하는 것이 좋다.

 

또한, LoadLibrary의 경우는 reference count가 올라가게 된다.

Reference count의 경우는 메모리의 효율적인 관리에서 사용되는 데 count 수가 증가 될 경우 handle leak, memory leak이 발생할 가능성이 있다. (찾아봤는데 그거 말고는...ㅡㅡ;;)

 

 

 

 

반응형
반응형

분석을 하다보니,

실행시킬 프로그램에서 CreateProcess를 통해 프로세스가 실행 되는 구간이 발생한다.

그럴땐, 어떻게 분석해야 할지 난감해진다.

 

전체적으로 어떤 과정을 통해 실행되는지 확인을 하고 싶은데,

해당 Process는 접근 하기엔 이미 메모리에 다 올라간 상태이며 분석이 어렵게 된다.

따라서, 그런 과정일 경우 분석하는 방법을 소개 하겠다.

 

프로그램이 실행 되는 그림은 다음과 같다.

 

 

이럴 경우 CreateProcess 함수의 6번째 인자에 집중할 필요가 있다.

CreateProcess 함수의 6번째 인자는 CreationFlags 로써, 아래의 Flags를 갖는다.

 

(참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms684863(v=vs.85).aspx)

 Constant/value  Description
 
CREATE_DEFAULT_ERROR_MODE
0x04000000
 

The new process does not inherit the error mode of the calling process. Instead, the new process gets the default error mode.

This feature is particularly useful for multithreaded shell applications that run with hard errors disabled.

The default behavior is for the new process to inherit the error mode of the caller. Setting this flag changes that default behavior.

 
CREATE_NEW_CONSOLE
0x00000010
 

The new process has a new console, instead of inheriting its parent's console (the default). For more information, see Creation of a Console.

This flag cannot be used with DETACHED_PROCESS.

 
CREATE_NO_WINDOW
0x08000000
 

The process is a console application that is being run without a console window. Therefore, the console handle for the application is not set.

This flag is ignored if the application is not a console application, or if it is used with either CREATE_NEW_CONSOLE or DETACHED_PROCESS.

 
CREATE_PROTECTED_PROCESS
0x00040000
 

The process is to be run as a protected process. The system restricts access to protected processes and the threads of protected processes. For more information on how processes can interact with protected processes, see Process Security and Access Rights.

To activate a protected process, the binary must have a special signature. This signature is provided by Microsoft but not currently available for non-Microsoft binaries. There are currently four protected processes: media foundation, audio engine, Windows error reporting, and system. Components that load into these binaries must also be signed. Multimedia companies can leverage the first two protected processes. For more information, see Overview of the Protected Media Path.

Windows Server 2003 and Windows XP:  This value is not supported.
 
CREATE_SUSPENDED
0x00000004
 

The primary thread of the new process is created in a suspended state, and does not run until the ResumeThread function is called.

 

제일 마지막에 보이는가?

CREATE_SUSPENDED

감을 잡은 사람이 있을 것이다. 해당 옵션으로 CreateProcess를 할 경우 이 녀석은 PID를 가진 얼음과 같이 얼어버린 상태가 된다.

 

따라서, CreatePrcess 함수를 호출하는 인자에서 6번째 인자를 "4"로 변경하고 분석을 하게 되면 프로그램이 시작하는 단계에서 부터 분석이 가능하게 되므로 아주 유용하게 사용할 수 있는 내용이다.

 

특히나, 대회, 악성코드 분석할때 많이 사용 될 것으로 보인다.

더 좋은 방법이 있다면 같이 공유하길 바라며, 이 글을 마친다.

 

반응형
반응형

요즘 악성 파일들이 자주 날라오네요.

분석한 김에 정리한 내용을 올립니다.

 

 

 

doc 파일이라고 보이지만, 파일을 선택해 보면 exe 파일 임을 확인 할 수 있다.

 

해당 파일을 분석 해보면, 랜덤한 문자열을 생성한다.

srand() 이용

 

00401A3F  |.  50            PUSH EAX                                 ; /seed
00401A40  |.  FF15 00714000 CALL DWORD PTR DS:[<&MSVCRT.srand>]      ; \srand

 

랜덤한 문자열을 기반으로 2차 연산 과정을 걸쳐 실행파일 생성

 

 

 

해당 파일을 CreateProcessW를 이용하여 실행 이후 프로그램 종료.

 

gz2gh.exe 파일의 경우는 레지스트리의 "Software\Microsoft\Windows\CurrentVersion\Run\Google_Update"

추가하여 실행시 구동하게 한다.

 

 

외부 C&C 서버로 접속

 

war.geekgalaxy.com

revjj.syshell.org

 

해당 URL은 방화벽으로 차단하는 것이 좋을 것 같다.

(접속 로그를 확인하여, 감염 유무를 모니터링 하는 것도 하나의 방법이다.)

서버에서 kernel.dll 파일을 전송 받음.

 

 

ps ;

서버를 끊어버려서 kernel.dll 파일은 못 구했네요.

해당 파일을 분석 하고 싶은데 ㅎㅎㅎ 실망에선 좀 힘들고..어디 안전하게 받으신 분 있다면 연락주세요.^^/

 

 

 

 

 

 

반응형
반응형

지인에게서 받은 320에 사용한 샘플 파일을 구하였다.

해당 파일을 분석하는 과정에서 스크린샷도 없고 단순 메모장에 정리한 내용을 공유한다.

 

특별히 다른 분석서보다 잘한 것은 없지만,

나도 해봤다는 흔적을 남기는 목적으로 글을 공유한다.

 

 

 004023FA   .  53            PUSH EBX                                 ;  kernel32.7C7D353C
004023FB   .  55            PUSH EBP                                 ;  kernel32.7C7D0000
004023FC   .  56            PUSH ESI                                 ;  kernel32.7C7D7376
004023FD   .  57            PUSH EDI
004023FE   .  8B6C24 18     MOV EBP, DWORD PTR SS:[ESP+0X18]         ;  ApcRunCm.0040116C
00402402   .  8B45 3C       MOV EAX, DWORD PTR SS:[EBP+0X3C]
00402405   .  FF7405 78     PUSH DWORD PTR SS:[EBP+EAX+0X78]
00402409   .  FF7405 7C     PUSH DWORD PTR SS:[EBP+EAX+0X7C]
0040240D   .  8B5405 78     MOV EDX, DWORD PTR SS:[EBP+EAX+0X78]
00402411   .  03D5          ADD EDX, EBP                             ;  kernel32.7C7D0000
00402413   .  8B4A 18       MOV ECX, DWORD PTR DS:[EDX+0X18]
00402416   .  8B5A 20       MOV EBX, DWORD PTR DS:[EDX+0X20]
00402419   .  03DD          ADD EBX, EBP                             ;  kernel32.7C7D0000
0040241B   .  E3 70         JECXZ 0X0040248D
0040241D   .  49            DEC ECX
0040241E   .  8B348B        MOV ESI, DWORD PTR DS:[EBX+ECX*4]
00402421   .  03F5          ADD ESI, EBP                             ;  kernel32.7C7D0000
00402423   .  33FF          XOR EDI, EDI
00402425   .  FC            CLD
00402426   >  33C0          XOR EAX, EAX
00402428   .  AC            LODSB
00402429   .  3AC4          CMP AL, AH
0040242B   .  74 07         JE 0X00402434
0040242D   .  C1CF 0D       ROR EDI, 0X0D                                  ; 사용하는 함수의 리스트를 암호화 하여, 원래의 문구로 돌리는 중........
00402430      03F8          ADD EDI, EAX
00402432    ^ EB F2         JMP 0X00402426
00402434      3B7C24 1C     CMP EDI, DWORD PTR SS:[ESP+0X1C]
00402438    ^ 75 E1         JNE 0X0040241B
0040243A      8B5A 24       MOV EBX, DWORD PTR DS:[EDX+0X24]    ; 사용할 함수 GetProcAddress 호출 / bp 걸고 분석하면 사용하는 함수들 다 건질 수 있음.
0040243D      03DD          ADD EBX, EBP                             ;  kernel32.7C7D0000
0040243F      66:8B0C4B     MOV CX, WORD PTR DS:[EBX+ECX*2]
00402443      8B5A 1C       MOV EBX, DWORD PTR DS:[EDX+0X1C]
00402446      03DD          ADD EBX, EBP                             ;  kernel32.7C7D0000
00402448      8B048B        MOV EAX, DWORD PTR DS:[EBX+ECX*4]
0040244B      8BD8          MOV EBX, EAX
0040244D      03C5          ADD EAX, EBP                             ;  kernel32.7C7D0000
0040244F      3B5C24 04     CMP EBX, DWORD PTR SS:[ESP+0X04]
00402453      7C 3C         JL 0X00402491
00402455      2B5C24 04     SUB EBX, DWORD PTR SS:[ESP+0X04]
00402459   .  3B1C24        CMP EBX, DWORD PTR SS:[ESP]
0040245C   .  7F 33         JNLE 0X00402491
0040245E   .  807C24 24 00  CMP BYTE PTR SS:[ESP+0X24], 0X00000000
00402463   .  74 28         JE 0X0040248D
00402465   .  807C24 28 00  CMP BYTE PTR SS:[ESP+0X28], 0X00000000
0040246A   .  74 21         JE 0X0040248D
0040246C   .  83EC 10       SUB ESP, 0X10                                        ; 또 다른 DLL 호출
0040246F   .  8BF0          MOV ESI, EAX
00402471   .  8BFC          MOV EDI, ESP
00402473   >  AC            LODSB
00402474   .  AA            STOSB
00402475   .  3C 2E         CMP AL, 0X2E
00402477   .^ 75 FA         JNE 0X00402473
00402479   .  C647 FF 00    MOV BYTE PTR DS:[EDI-0X01], 0X00000000
0040247D   .  54            PUSH ESP
0040247E   .  FF5424 38     CALL DWORD PTR SS:[ESP+0X38]             ;  kernel32.GetProcAddress
00402482   .  56            PUSH ESI                                 ;  kernel32.7C7D7376
00402483   .  50            PUSH EAX
00402484   .  FF5424 40     CALL DWORD PTR SS:[ESP+0X40]
00402488   .  83C4 10       ADD ESP, 0X10
0040248B   .  EB 04         JMP 0X00402491
0040248D   .  33C0          XOR EAX, EAX
0040248F   .  EB 00         JMP 0X00402491
00402491   >  83C4 08       ADD ESP, 0X08
00402494   .  5F            POP EDI
00402495   .  5E            POP ESI                                  ;  kernel32.7C7D7376
00402496   .  5D            POP EBP                                  ;  kernel32.7C7D0000
00402497   .  5B            POP EBX                                  ;  kernel32.7C7D353C
00402498   .  C3            RET

IAT 기록 (004027C1)

호출 순서

OpenFileMappingA -> CreateFileMappingA -> GetWindowsDirectoryA -> strcat -> PathFileExistsA -> InitializeCriticalSection

004011E5   .  57            PUSH EDI                                 ;  ApcRunCm.00402991
004011E6   .  6A 10         PUSH 0X00000010
004011E8   .  53            PUSH EBX
004011E9   .  6A 04         PUSH 0X00000004
004011EB   .  53            PUSH EBX
004011EC   .  6A FF         PUSH 0XFFFFFFFF
004011EE   .  FF96 38030000 CALL DWORD PTR DS:[ESI+0X00000338]       ;  kernel32.CreateFileMappingA
004011F4   .  68 03010000   PUSH 0X00000103
004011F9   .  8D85 F4FEFFFF LEA EAX, DWORD PTR SS:[EBP-0X0000010C]
004011FF   .  50            PUSH EAX
00401200   .  FF96 3C030000 CALL DWORD PTR DS:[ESI+0X0000033C]       ;  kernel32.GetWindowsDirectoryA
00401206   .  8D86 2E050000 LEA EAX, DWORD PTR DS:[ESI+0X0000052E]
0040120C   .  50            PUSH EAX
0040120D   .  8D85 F4FEFFFF LEA EAX, DWORD PTR SS:[EBP-0X0000010C]
00401213   .  50            PUSH EAX
00401214   .  FF96 A8030000 CALL DWORD PTR DS:[ESI+0X000003A8]       ;  msvcrt.strcat
0040121A   .  59            POP ECX                                  ;  ApcRunCm.00402499
0040121B   .  59            POP ECX                                  ;  ApcRunCm.00402499
0040121C   .  8D85 F4FEFFFF LEA EAX, DWORD PTR SS:[EBP-0X0000010C]
00401222   .  50            PUSH EAX
00401223   .  FF96 CC030000 CALL DWORD PTR DS:[ESI+0X000003CC]       ;  shlwapi.PathFileExistsA / C:\Windows\Temp\~v3.log 파일이 있는 유무 확인
00401229   .  85C0          TEST EAX, EAX
0040122B   .  75 6C         JNE 0X00401299
0040122D   .  56            PUSH ESI                                 ;  ApcRunCm.00402499
0040122E   .  FF96 B0020000 CALL DWORD PTR DS:[ESI+0X000002B0]       ;  ApcRunCm.004021B2   / taskkill 을 통한 프로세스 종료

C:\Windows\Temp\~v3.log 파일 유무 확인
없을 경우

taskkill /F /IM pasvc.exe 실행
taskkill /F /IM clisvc.exe 실행


0040122E   .  FF96 B0020000 CALL DWORD PTR DS:[ESI+0X000002B0]       ;  ApcRunCm.004021B2
00401234   .  8D46 10       LEA EAX, DWORD PTR DS:[ESI+0X10]
00401237   .  59            POP ECX                                  ;  0012FDC0
00401238   .  50            PUSH EAX
00401239   .  8945 FC       MOV DWORD PTR SS:[EBP-0X04], EAX
0040123C   .  FF96 40030000 CALL DWORD PTR DS:[ESI+0X00000340]       ;  kernel32.InitializeCriticalSection
00401242   .  8D46 28       LEA EAX, DWORD PTR DS:[ESI+0X28]
00401245   .  50            PUSH EAX
00401246   .  8945 F8       MOV DWORD PTR SS:[EBP-0X08], EAX
00401249   .  FF96 40030000 CALL DWORD PTR DS:[ESI+0X00000340]       ;  kernel32.InitializeCriticalSection
0040124F   .  56            PUSH ESI                                 ;  ApcRunCm.00402499
00401250   .  895D 08       MOV DWORD PTR SS:[EBP+0X08], EBX
00401253   .  FF96 5C020000 CALL DWORD PTR DS:[ESI+0X0000025C]       ;  ApcRunCm.0040129E   / GetVersion 확인

이후 Thread를 돌림.

 

더 많은 내용을 확인 하고 싶다면

http://wowhacker.org/files/0320_cyberterror_stolenbyte.pdf

http://asec.ahnlab.com/926

 

반응형
반응형

WER 이라고 하면, Windows 내에서 크래쉬가 발생 또는 응용프로그램이 문제가 발생할 경우 Dump 파일을 생성하여, 해당 파일을 MS 측으로 전달하는 과정을 의미한다.

 

WER의 경우는 MS 쪽으로 오류 정보를 보내겠습니까? 라는 메시지가 바로 WER이다.

해당 WER의 덤프는 유저의 마음대로 설정할 수 있는데, 그 내용이 바로 아래에 나와 있는 주소 이다.

 

http://msdn.microsoft.com/en-us/library/windows/desktop/bb513616(v=vs.85).aspx

 

해당 주소가 가게 되면 LocalDumps 라는 키를 생성하여, 응용프로그램 상의 문제가 발생하는 모든 덤프를 확인 할 수 있다.

 

분석을 하기 위한 준비 단계로 생각되며, 해당 세팅을 할 경우 향후 많은 도움이 될 것으로 판단된다.

 

 

 

LocalDumps.reg

 

각 항목의 정보는 아래와 같다.

 

 

 value

 type

 default value

 DumpFolder

 REG_EXPAND_SZ

 %SystemRoot%\Minidump

 DumpCount

 REG_DWORD

 20

 DumpType

 REG_DWORD

 2

 

DumpFolder : 덤프 파일이 생성될 경로

DumpCount : 덤프 파일 보존 개수 (넘게 되면 오래된 것부터 삭제)

DumpType : 1. 미니덤프 / 2. 전체덤프

 

출처 : windbg로 쉽게 배우는 Windows Debugging - 책

         MS WER 홈페이지 : http://msdn.microsoft.com/en-us/library/windows/desktop/bb513616(v=vs.85).aspx

반응형
반응형

요즘 들어, 제 PC에서 자꾸 Load ollydbg/immunity debug를 이용해서 분석하는데,

Single Step Excetpion으로 분석을 못하는 상황이 발생하더군요.

 

그래서 확인 해보니, Single Step Exception 의 경우 자체적으로 excetpion handle을 생성하여

처리할 경우 발생하는 exception 인데....debugger 측에서 처리하는데 다소 문제(?)가 발생 한 것 같습니다.

(혹시, 자세한 내용을 아신다면 댓글로...^^)

 

그래서 임시 방편으로 분석하는 방법을 적어 봅니다.

먼저, Load 하였는데 아래와 같이 ntdll.ZwRaiseException 에서 멈춘다.

 

 

 

그럼 자체적인 Exception Handle이 있다고 생각하시면 좋을 듯 싶습니다.

그럼 어떻게 처리하느냐....

Option -> Events -> Break on new module (DLL) 을 체크 하시면 EP 지점에서 분석을 시작 할 수 있습니다.

 

 

 

그럼 이만....

반응형
반응형

오랜만에 글을 쓰네요.

이번에 경험한 부분에 대하여 관련 내용을 공유하려고 합니다.

 

발생한 상황 .

 - Dump 파일이 생성되지 않는 프로그램

 

[Windbg 따라하기 - 0x003 crash dump file] 생성하기 에서 보셨던 상황과는 다소 차이가 있습니다.

process list에서 볼 수 있는 환경에서는 0x003번과 같이 적용하시면 원하시는 파일을 dump 할 수 있지만

실행 하자마자 죽어버리는 상황이라면 좀 틀려 집니다.

 

필요한 준비물

  - adplus, windbg

  (※ 해당 파일은 VisualStdio를 설치 하시면 설치 됩니다. 만약 설치 안되었다면 [여기] 에서 다운 받으시기 바랍니다.)

 

그럼 준비되었으니 본격적으로 사용하도록 하겠습니다.

먼저, adplus의 역할이 무엇인지 알아야겠죠? 상세 설명은 [이곳]으로 가시기 바랍니다.

간단하게 설명하면 debugging 을 통하여 해당 프로그램에 접근 및 dump 파일을 생성할 수 있게 도와주는 프로그램 입니다.

 

따라서, 해당 프로그램의 attach 및 debugging 모드를 막아놓았다면 adplus를 사용할 수 없게 됩니다. 이점 유의 하시길 바랍니다. (만약 사용하고 싶다면 anti-debug 쪽을 제거 하신 후에 사용하시면 될 것으로 생각되네요..ㅎㅎ)

 

그럼 adplus의 옵션 중 모니터링을 하고 있다가 crash가 발생하면 debugger를 띄어주는 옵션을 인자로 넣어주고

프로그램을 실행 한다. 해당 명령어는 아래와 같다.

 

 

 

   - crash : crash 발생하면 attach 하는 옵션 (hang 옵션도 존재)

   - pmn : 프로세스가 생성될 때 까지 대기 상태로 있다가 생성되면 attach 한다.

   - dbg : debugger 종류 선택

  

이렇게 실행 하게 되면 크래쉬가 발생할 경우 windbg가 생성되게 된다.

 

test.exe 프로그램을 실행 시킬 경우 windbg가 실행 되게 된다. 그 이후 dump 명령어를 통하여 dump 생성을 한다.

 

 

파일 생성 이후 windbg로 crash 파일을 열어서 확인 하면 해당 내용에 대한 call stack 을 확인 하여 문제를 확인 할 수 있다.

 

 

 

그럼 다음엔 더 좋은 내용으로 찾아 뵙도록 하겠슴~다람쥐~~

 

 

 

반응형
반응형

오랜만에 포스트를 하네요. 
요즘 강제로 크래쉬를 만들어서 분석하는 부분에 대해서 삽질을 하기 있어서
이렇게 포스트를하게 됩니다. 

제일 먼저 crash 발생하게 한 뒤에 dump 파일을 생성하게 하는 방법입니다.
일반적으로는 crash가 발생하였을때 dump 파일을 생성하게 코딩을 하고 있지 않기 때문에
crash가 발생할 경우 Just in debugging 기능을 통하여 debugging을 하는 경우가 대부분 입니다. 

이번에 포스트 하는 부분은 crash가 발생한 프로그램에 대한 dump file을 생성하는 방법입니다.
(sample crash 파일 : http://www.codeproject.com/KB/debug/windbg_part1.aspx#_Toc64133663)

 

[그림 1.] crash 프로그램

 

crash가 발생하는 프로그램을 실행 시킨 뒤 [그림 1.] 과 같은 화면에서 Process List를 확인 합니다.

[그림  2.] 프로세스 리스트 - crash 발생하는 프로그램(Crash_Test.exe)

 

Crash_Test.exe 프로세스를 선택 후 오른 쪽 버튼을 눌러 [그림 3.]과 같이 Dump를 하면 됩니다.

[그림 3.] crash 파일 생성 과정

 

Path 경로를 따라 가서 DMP 파일을 windbg를 이용하여 분석하면 됩니다.
분석은 추후에 포스트를 하도록 하겠습니다.

감사합니다.

반응형

+ Recent posts