본문 바로가기
반응형

WinDbg10

윈도우 구조 - 커널 진입 - Ntdll.dll 세부 분석 우리가 편지를 쓴다면, 보내는 사람은 “나”라는 이름으로 편지를 보내고, 받는 사람 “너”라는 사람이 편지 내용을 읽고 회신하게 된다. 이 과정 속에 실질적인 편지 배달은 우체국에서 진행하게 된다. 우체국은 중간에서 편지를 각 지역별로 구분한 후, 공통된 배달 방식에 맞게 구분하여 편지를 배달해 주는 것이다. 이와 같은 원리는 시스템에서도 볼 수 있다. 편지와 비교해 본다면, “나”는 응용프로그램으로 사용자의 입력이나, 처리 요청을 받아 개발 의도에 맞게 가공하여 커널에 처리를 요청하게 된다. 그리고 커널은 편지에서 “너”라고 할 수 있다. 이 둘간의 전달 역할을 해주는 것이 서브시스템과 Ntdll.dll로써, 서브시스템은 바로 우편배달부처럼 각 지역 요청들을 수집하여 우체국에 전달하고 이를 우체국과 유.. 2022. 4. 2.
[WebBook] 윈도우 구조 - 시스템 프로세스(Windows Startup Process) - 서브시스템 관리자 Csrss.exe Client-Server Runtime Subsystem의 약자로, 앞서 Smss가 로드하는 3개의 서브시스템 중 하나로, 윈도우 서브시스템이라고도 불리우며, 윈도우상에서 실행되는 프로세스와 스레드들의 관리를 담당한다. Csrss.exe(이하 Csrss)는 실행시 Basesrv.dll(Microsoft Windows NT Base API Server Library), Winsrv.dll(Windows Server Library), Csrsrv.dll(Client Server Runtime Process)을 로드하여 콘솔 윈도우(Console windows) 처리, 프로세스와 스레드 생성과 삭제, 16비트 가상 DOS 머신(VDM) 프로세스를 위한 기능 일부 및 SxS(Side-by-Side)를 지원하게 .. 2022. 2. 28.
Windbg - !(extension) 확장 명령 그리고 닷넷 디버깅 !(Extension)은 Windbg에서 사용할 수 있는 스크립트 같은 확장 명령으로, 플러그인 같은 기능이다. Windbg 플러그인은 Dll로 제공하는데 우리가 흔히 사용하는 확장 명령어(!analyze, !vm, !process)들도, Windbg 설치시 기본적으로 함께 Dll로 설치 되기 때문에 사용이 가능한 것이다. 이러한 확장 기능은 IIS의 ASP와 같은 닷넷(.NET) 디버깅 혹은 SQL 디버깅을 수행할 때, 이 기능을 이용해 유용하게 사용할 수 있다. 닷넷 디버깅을 진행 할 때에는 Sos.dll(Extension for managed/.Net debugging)을 추가해 원활한 역분석을 돕게 된다. 이러한 확장 명령 라이브러리를 로드하는 방법은 해당 Dll 파일을 Windbg 디렉토리(C:.. 2022. 2. 13.
Windbg - lm 드라이버 확인 Windbg에서 lm 명령은 List Loaded Modules의 약자로 본 명령어를 통해 커널에 올라온 시스템 전역 모듈을 확인할 수 있으며, 로드된 커널과 드라이버, 그리고 시스템 전역 Dll들을 확인할 수 있다. 주로 사용하는 옵션은 t(시간 정보 표시), n(모듈 이름)을 표시하고, m 명령을 통해 모듈을 검색할 수 있다. 특히 이를 통해 시스템에 로드된 드라이버를 확인하거나 자신이 원하는 심볼이 로드되었는지 확인할 수 있고, 이용 가능한 메모리 범위를 확인할 수 있어, 버퍼 오버런(Buffer overrun, 시스템에서 발생하는 오류)과 같은 오류에 대해서도 확인이 가능하다. 그리고 커널 생성의 처리 흐름에 대한 실제 코드인 어셈블리 코드를 확인해 보고자 한다면 진행 순서에 표시한 함수명을 Wi.. 2022. 2. 13.
시스템 시작, 커널 생성 MBR과 부트 섹터를 지나 부트 로더인 Ntldr(비스타 이후 Winload.exe로 변경되었다)를 통해 BCD(Windows Boot Manager)의 실행까지 알아보았다. 이후 BCD는 지정된 시간 동안 입력이 없으면, 기본적으로 지정된 운영제체를 실행하여 부팅을 위한 윈도우 커널 초기화 작업을 진행하게 된다. 이때 부트 파티션에서 커널 초기화에 필요한 적절한 커널(Ntoskrnl.exe외 3가지) 파일과 HAL(Hardware Abstraction Layer) 이미지 등을 로드하고, 레지스트리 %SystemRoot%\System32\Config\System을 HIVE(연결) 하여 디바이스 드라이버를 로드하는 작업을 진행하게 된다(레지스트리에 대해서는 추후 커널과 유저의 소통에서 다룬다). 커널 초기.. 2022. 2. 13.
Windbg - Crash Dump 발생시 기본 체크 사항들 Crash Dump 분석 체크 리스트 여기서는 덤프 분석 시 기본적인 확인할 사항을 정리 해본 것 입니다. 해당 상황에 아래 확인 사항들을 보시면 문제점 해결하시는데 도움이 되실 겁니다. 기본 사항 내부 자료 검색 Google 혹은 Microsoft Search에서 알려진 이슈가 있는지 검색 (가끔 답을 바로 찾을수도..) 툴을 이용해서 저장한 Dump (자동 혹은 수동으로 생성..) OS/SP 버전 (서비스팩) OS언어 Debug 시간 System 가동 시간 컴퓨터 이름 .kframes 100 Application Crash or hang 일때 기본 분석 (!analyze –v 또는 행이라면 !analyze –v –hang) Crash 와 hang의 Critical Sections 확인 (!locks .. 2020. 11. 27.
Windbg Preview - Time Line Travel 분석 오늘 Microsoft Store를 방문하여 새로운 버전의 Windbg가 나온것을 알게되었다. Preview 상태이긴 한데, 어떤 변화가 있는지 궁금하여 설치해보고, 놀라움을 감출수 없었다. 기존 Windbg에서 보여주던 불편했던 UI가 사라지고, Debugging로 진화하고 있는 모습을 알 수 있다. 어떤 종류를 디버깅 할 수 있는지 File 메뉴를 통해 확인해본 결과, Remote 부터 프로세스, 코드 소스등을 기존과 동일한 수준으로 지원한다. 그리고 직관적이라서 사용성이 편리하다. 예전에는 symbols 설정한는 것도 일이였는데, 심볼 설정도 자동으로 구성되니, 기존 커맨드 명령을 통해 사용하고 초기 설정을 진행해야 했다면, 이런 부분을 해결해 놓은 버전이니 보다 쉽게 사용이 가능할 것 같다. 그리.. 2020. 11. 24.
BugCheck 0x50 - PAGE_FAULT_IN_NONPAGED_AREA PAGED와 NONPAGED AREA 란 윈도우에서 PAGE는 정보를 사용하기위한 정보를 저장해 놓은 것이라고 생각 하면 되는데, 기본 크기는 4096Byte 이다. PAGE라는 용어는 여러 곳에서 사용되게 되며, NONPAGED란 가상 메모리화 할 수 없는 영역, 즉 시스템 메모리(실제 물리 메모리) 영역에서 오류가 발생했다는 판단하면 된다. 오류가 발생하는 원인 이유는 크게 2가지로 보실수 있다. 첫째는 함수로 지정한 공간이 너무 작은 경우, 두번째는 위의 반대 상황으로, 입력값이 너무 커서 발생할 수 있다. 같은 상황 같지만, 장애를 조치하는 방식에 있어서는 엄연히 다른 부분이 되겠다. 해결 방법 어떠한 값이 잘못된 메모리 영역을 사용하도록 하였는지 확인하는게 키 포인트로, 잘못된 메모리를 찾았다면.. 2020. 11. 23.
반응형