모든 테스트는 Windows xp service pack 3에서 수행되었습니다.

- winDBG download
http://msdn.microsoft.com/en-us/windows/hardware/gg463009

- winDBG symbol download
http://msdn.microsoft.com/en-us/windows/hardware/gg463028


-LiveKD download
http://technet.microsoft.com/en-us/sysinternals/bb897415

위 URL에서 테스트시 사용할 파일을 다운로드 한 후 설치하였습니다.

winDBG는 기본설정으로 설치하였으며, symbol은 c:\symbols에 설치하였습니다.


1. LiveKD
설치 후 winDBG로 커널 접근을 쉽게 도와주는 LiveKD를  사용하였습니다.

-w 옵션을 사용하여, LiveKD를 사용함과 동시에 winDBG를 사용하였습니다.

사용자 삽입 이미지








2. PROCESS 내역 보기

!process 0 0 을 사용하여 현재 동작하고 있는 프로세스 내역을 확인해 봅니다.

0: kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 825b7830  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 02b40020  ObjectTable: e1002e40  HandleCount: 264.
    Image: System

PROCESS 82429948  SessionId: none  Cid: 0220    Peb: 7ffd8000  ParentCid: 0004
    DirBase: 02b40040  ObjectTable: e14558d8  HandleCount:  19.
    Image: smss.exe

PROCESS 82446da0  SessionId: 0  Cid: 0260    Peb: 7ffd7000  ParentCid: 0220
    DirBase: 02b40060  ObjectTable: e15e3858  HandleCount: 378.
    Image: csrss.exe

PROCESS 82344020  SessionId: 0  Cid: 0278    Peb: 7ffd8000  ParentCid: 0220
    DirBase: 02b40080  ObjectTable: e14f2590  HandleCount: 460.
    Image: winlogon.exe

PROCESS 8242f6e8  SessionId: 0  Cid: 02a4    Peb: 7ffdb000  ParentCid: 0278
    DirBase: 02b400a0  ObjectTable: e17ac350  HandleCount: 261.
    Image: services.exe

PROCESS 82449b88  SessionId: 0  Cid: 02b0    Peb: 7ffd7000  ParentCid: 0278
    DirBase: 02b400c0  ObjectTable: e17a6dd0  HandleCount: 349.
    Image: lsass.exe



3. 프로세스 링크 따라가기

작업관리자 -> 프로세스에서 확인되는 프로세스를 winDBG로 따라 들어 가보겠습니다.

0: kd> dt _EPROCESS 8238ea00
   +0x174 ImageFileName    : [16]  "cmd.exe"

   +0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x821dc0a8 - 0x81f03658 ]


0: kd> dd 8238ea00+0x088
8238ea88  821dc0a8 81f03658
                  FLINK       BLINK


0: kd> dt _EPROCESS 81f03658-0x88
   +0x174 ImageFileName    : [16]  "AYServiceNT.aye"

   +0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x8238ea88 - 0x82366280 ]



4. 프로세스 특징

윈도우는 Memory Pool에 8바이트 단위로 메모리를 할당합니다. Memory Pool에는 Ethread와 Eprocess와 같은 커널 오브젝트가 존재합니다.


- Pool_Header
메모리 풀에 할당된 메모리 블록은 관리를 위한 자료구조인 Pool_Header를 포함합니다.


- windbg에서
dt _POOL_HEADER 를 확인하면 0x004 offset에 PoolTag가 있습니다.


4-1. _POOL_HEADER에서 확인된 주소가 process와 thread를 담고있으면 0xe36f7250, 0xe5726854값을 가지게 됩니다.


PROCESS 82283370  SessionId: 0  Cid: 0574    Peb: 7ffde000  ParentCid: 0638
    DirBase: 02b403a0  ObjectTable: e1624420  HandleCount:  56.
    Image: notepad.exe


0: kd> dt _POOL_HEADER 82283370-0x18-0x8
nt!_POOL_HEADER
   +0x000 PreviousSize     : 0y000000001 (0x1)
   +0x000 PoolIndex        : 0y0000000 (0)
   +0x002 BlockSize        : 0y001010000 (0x50)
   +0x002 PoolType         : 0y0000101 (0x5)
   +0x000 Ulong1           : 0xa500001
   +0x004 ProcessBilled    : 0xe36f7250 _EPROCESS
   +0x004 PoolTag          : 0xe36f7250
   +0x004 AllocatorBackTraceIndex : 0x7250
   +0x006 PoolTagHash      : 0xe36f


4-2. Object_Header
Object_HEADER는 Type필드를 가지고 있으면 오브젝트에 대한 일반적인 속성을 담고 있습니다. 해당 값이 프로세스일 경우 PsProcessType과 같거나 0xbad040값을 갖습니다.

PROCESS 82283370  SessionId: 0  Cid: 0574    Peb: 7ffde000  ParentCid: 0638
    DirBase: 02b403a0  ObjectTable: e1624420  HandleCount:  56.
    Image: notepad.exe

0: kd> !object 82283370
Object: 82283370  Type: (825b7e70) Process
    ObjectHeader: 82283358 (old version)
    HandleCount: 2  PointerCount: 17

0: kd> dd PsProcessType L1
805659b8  825b7e70



4-3. DISPATCHER_HEADER
Eprocess구조체 가장 앞부분에 존재하는 DISPATCHER_HEADER의 type과 size를 확인해보면, 프로세스의 경우 type은 0x3 size는 0x1b라는 것을 알 수 있습니다.


PROCESS 82283370  SessionId: 0  Cid: 0574    Peb: 7ffde000  ParentCid: 0638
    DirBase: 02b403a0  ObjectTable: e1624420  HandleCount:  56.
    Image: notepad.exe


0: kd> dt _DISPATCHER_HEADER 82283370
ntdll!_DISPATCHER_HEADER
   +0x000 Type             : 0x3 ''
   +0x001 Absolute         : 0 ''
   +0x002 Size             : 0x1b ''
   +0x003 Inserted         : 0 ''
   +0x004 SignalState      : 0
   +0x008 WaitListHead     : _LIST_ENTRY [ 0x82283378 - 0x82283378 ]



'Header 가지고 놀기' 카테고리의 다른 글

PE구조 알아보자  (0) 2011.02.10
Prefetch Header 분석  (4) 2010.01.08
Thumbs.db을 통한 사진파일 복구  (3) 2009.09.02
Posted by 도시형닌자
: