업무 중에 crash가 발생한 프로그램에 대한 메모리 덤프를 뜬 파일을 분석하게 되었습니다.
어느 부분에서 crash가 발생하였는지 확인하는 과정을 나열해 봅니다.
(※ 해당 crash 파일은 MiniDumpWriteDump API의 "MiniDumpNormal"로 설정한 파일 입니다.)
본문에서는 반어를 사용합니다. 이점 양해 부탁 드립니다.
-------------------------------------------------------------------------
crash가 발생하여 메모리를 dump를 뜬 파일을 전달 받았다.
해당 파일을 windbg로 열어서 어느 부분에서 crash가 발생하였는지 확인 해보도록 하자.
우선, dump 파일을 windbg의 crash file open 메뉴를 이용하여 파일을 읽어야 한다.
그렇지 않을 경우 아래와 같은 화면이 나오므로 다시 Open 하기 바란다.
해당 파일은 crash 파일인데 그냥 열겠냐?
라는 메시지다. yes를 누르면 아래와 같이 분석 할 수 없는 내용이 나온다.
따라서, windbg에서 crash dump 파일을 분석할 수 있는 기능인 "Open Crash Dump" 메뉴를 이용하여
파일을 열어야 분석 할 수 있는 환경이 만들어 진다.
굳이, 분석을 진행하지 않더라도 간단하게 어떤 이유로 crash가 발생 했는지 확인 할 수 있다.
예제 파일은 "Access violation" 으로 크래쉬가 발생한 것이다.
그럼 조금 더 분석을 하기 위해서 windbg 명령인 "!analyze -v"를 실행 한다.
0:000> !analyze -v
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff) CONTEXT: 00000000 -- (.cxr 0x0;r) DEFAULT_BUCKET_ID: NULL_CLASS_PTR_WRITE PROCESS_NAME: test.exe ERROR_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx EXCEPTION_PARAMETER1: 00000001 EXCEPTION_PARAMETER2: 00000001 WRITE_ADDRESS: 00000001 FOLLOWUP_IP: APP: test.exe ANALYSIS_VERSION: 6.3.9600.16384 (debuggers(dbg).130821-1623) x86fre FAULTING_THREAD: 00002704 PRIMARY_PROBLEM_CLASS: NULL_CLASS_PTR_WRITE BUGCHECK_STR: APPLICATION_FAULT_NULL_CLASS_PTR_WRITE LAST_CONTROL_TRANSFER: from 00401f46 to 00401b1a STACK_TEXT:
SYMBOL_STACK_INDEX: 0 SYMBOL_NAME: test+1b1a FOLLOWUP_NAME: MachineOwner MODULE_NAME: test IMAGE_NAME: test.exe DEBUG_FLR_IMAGE_TIMESTAMP: 53210e00 FAILURE_BUCKET_ID: NULL_CLASS_PTR_WRITE_c0000005_test.exe!Unknown BUCKET_ID: APPLICATION_FAULT_NULL_CLASS_PTR_WRITE_test+1b1a ANALYSIS_SOURCE: UM FAILURE_ID_HASH_STRING: um:null_class_ptr_write_c0000005_test.exe!unknown FAILURE_ID_HASH: {f756d029-0188-112b-7fe5-3c317ed11732} Followup: MachineOwner |
test+1b1a 00401b1a c6400100 mov byte ptr [eax+1],0
위 코드로 인하여, 실행하는 과정에서 문제가 발생 하였다.
해당 Address를 알 수 있으므로, 디버깅하기는 수월할 것이다.
(소스 코드와 연동하면 더욱 더 편하게 분석 할 수 있다.)
조금 더 아래로 내려와서 분석을 하다보면
DEFAULT_BUCKET_ID: NULL_CLASS_PTR_WRITE
이런 내용이 보일 것이다. 해당 내용은 Write 하려는 class pointer가 NULL 값을 가지므로 인해서
Write 할 수 없다는 의미이다.
이것으로 crash dump 분석을 마무리 하도록 하겠다.
'Reverse > 분석 문서' 카테고리의 다른 글
[SECCON2016] Forensic 100 write up (0) | 2016.12.12 |
---|---|
[Adware] 광고 조회 프로그램 (0) | 2016.06.23 |
[WinDbg 따라하기 - 0x009] Interrupt 확인 하기 (0) | 2014.03.10 |
CVE-2014-0322 제로데이 취약점을 이용한 악성코드 (0) | 2014.02.24 |
유휴 프로세스(System Idle Process) (0) | 2014.02.17 |