Windows OS2014. 3. 13. 23:54
반응형

시스템 프로세스에 대해 ZwQueryInformationProcess(ProcessImageFileName)를 호출해 이미지 경로를 구하려고 하면 경로가 나오지 않는다. 


무심코 사용하다가 이런 상황이 발생하니 당황스러워 정리해 둔다.

(MSDN에 적혀 있지도 않아서...)


현재 프로세스는 시스템 프로세스다.


kd> !process 843bdd08 0

PROCESS 843bdd08  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000

    DirBase: 00185000  ObjectTable: 88001be0  HandleCount: 1153.

    Image: System



현재 콜스택은 MyDrv가 ZwQueryInformationProcess()를 호출하고 있는 상황이다.


kd> k

ChildEBP RetAddr  

920796ec 82c0dd87 nt!SeLocateProcessImageName+0x26

92079738 82c4375b nt!PsQueryFullProcessImageName+0x1d

92079a30 82a491ea nt!NtQueryInformationProcess+0x116

92079a30 82a479ad nt!KiFastCallEntry+0x12a

92079abc 876eb3c6 nt!ZwQueryInformationProcess+0x11

92079af8 876eb46c MyDrv!GetProcessImageName+0x86 

...

92079d90 82abc219 nt!PspSystemThreadStartup+0x9e

00000000 00000000 nt!KiThreadStartup+0x19



이미지 경로가 나오지 않는 이유를 알아보기 위해 커널 내부에서 어떻게 처리하고 있는지 살펴봤다.

콜스택에 보이는 마지막 함수(SeLocateProcessImageName)가 실제로 커널에서 이미지 경로를 얻어 주는 함수다.


kd> u 82c4c7e8 L12

nt!SeLocateProcessImageName:

82c4c7e8 8bff            mov     edi,edi

82c4c7ea 55              push    ebp

82c4c7eb 8bec            mov     ebp,esp

82c4c7ed 51              push    ecx

82c4c7ee 8b450c          mov     eax,dword ptr [ebp+0Ch]

82c4c7f1 832000          and     dword ptr [eax],0

82c4c7f4 53              push    ebx

82c4c7f5 8b5d08          mov     ebx,dword ptr [ebp+8]

82c4c7f8 56              push    esi

82c4c7f9 57              push    edi

82c4c7fa 8bc3            mov     eax,ebx

82c4c7fc e861000000      call    nt!SePopulateProcessImageName (82c4c862)

82c4c801 894508          mov     dword ptr [ebp+8],eax

82c4c804 85c0            test    eax,eax

82c4c806 7c4a            jl      nt!SeLocateProcessImageName+0x6a (82c4c852)

82c4c808 8b83ec010000    mov     eax,dword ptr [ebx+1ECh]

82c4c80e 0fb77002        movzx   esi,word ptr [eax+2]               <===



마지막 두 줄에서 이미지 경로를 얻어오기 시작한다.


ebx는 첫번째 파라미터인 [ebp+8]이고 프로세스 오브젝트 포인터다.

ebx+1EC는 뭔가 했더니 프로세스 생성 정보고 이미지 경로가 들어 있는 영역이다.

다음과 같이 확인이 가능하다.


kd> dt _EPROCESS

ntdll!_EPROCESS

   +0x000 Pcb              : _KPROCESS

   +0x098 ProcessLock      : _EX_PUSH_LOCK

   ...

   +0x1ec SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO



_SE_AUDIT_PROCESS_CREATION_INFO가 뭔지 확인해 보면 결국 UNICODE_STRING으로 밝혀진다.


kd> dt _SE_AUDIT_PROCESS_CREATION_INFO

ntdll!_SE_AUDIT_PROCESS_CREATION_INFO

   +0x000 ImageFileName    : Ptr32 _OBJECT_NAME_INFORMATION


kd> dt _OBJECT_NAME_INFORMATION

ntdll!_OBJECT_NAME_INFORMATION

   +0x000 Name             : _UNICODE_STRING



프로세스 포인터를 적용해 내용을 살펴보면 황당하게도 이름이 없다.


kd> dt _EPROCESS SeAuditProcessCreationInfo. 843bdd08 

ntdll!_EPROCESS

   +0x1ec SeAuditProcessCreationInfo  : 

      +0x000 ImageFileName               : 0x880010a0 _OBJECT_NAME_INFORMATION


kd> dt 0x880010a0 _OBJECT_NAME_INFORMATION

ntdll!_OBJECT_NAME_INFORMATION

   +0x000 Name             : _UNICODE_STRING ""


kd> dt 0x880010a0 _UNICODE_STRING

ntdll!_UNICODE_STRING ""

   +0x000 Length           : 0

   +0x002 MaximumLength    : 0

   +0x004 Buffer           : (null) 


kd> dd 0x880010a0 L2

880010a0  00000000 00000000



시스템 프로세스는  SeAuditProcessCreationInfo.ImageFileName이 비어 있음을 알 수 있다.


시스템 프로세스에 대해서는 ZwQueryInformationProcess(ProcessImageFileName)를 호출해도 얻어지는 데이터가 없으므로 호출하지 않는 것이 좋겠다.


반응형
Posted by GreeMate
책좀읽자2014. 3. 2. 22:27
반응형




나의 평점: 3.5 / 5.0


습관이 우리 행동에 미치는 영향에 대해 자세히 설명해 주는 책이다.


습관이란 논리적인 사고나 기억력과는 관계없이 반복적으로 취하는 행동을 뜻한다.

여기서 중요한 것은 생각을 하지 않고 한다는 점이다. 

습관은 무엇을 해야 겠다라고 생각한다거나 머리속에 기억을 떠올리며 하는 것이 아니라 아무 생각없이 저절로 하는 행동이라는 사실을 여러가지 사례를 통해 알려주는 점이 인상적이었다.


뇌의 일부가 손상되어 단기 기억을 하지 못하는 사람에 대한 사례가 나온다.

이 사람은 자신의 집 내부구조조차 제대로 기억하지 못해 어떤 방이 어디에 있는지 그림도 그리지 못하지만 때가 되면 화장실은 잘만 찾아가더라는 것이다. 주방도 마찬가지고... 이 연구에서 밝혀진 결과는 뇌에서 단기 기억을 담당하는 부분과 습관적인 행동을 수행하는 부분은 분리되어 있다는 것이다. 생각해 보니 나도 걸으면서 많은 생각을 하는데 걷는 움직임은 누가 제어하고 있는 것인지 생각해 본적이 없었다. 습관을 담당하는 곳에서 습관적인 걷기를 하도록 움직여 주고 있었던 것이다.


이 책의 진짜 결론은 아무런 사고를 하지 않고 행동으로 옮겨지는 습관이란 매우 무서운 저력을 가지고 있기 때문에 나쁜 습관이 있다면 이를 개선해야 한다는 것이다. 좋은 것인지 나쁜 것인지 따질 겨를도 없이 행동으로 옮겨진다. 그래서 무섭다.


그러므로 좋은 습관을 익혀 놓는다면 오히려 매우 좋을 것이다.


좋은 책 같은데 평점을 많이 못 준 이유는 습관에 대한 연구 사례가 많지만 습관 개선에 대한 내용이 구체적이기 않기 때문이었다. 책에서도 밝히긴 했지만 습관이 천차만별이라 모두 개선 방법이 다르기 때문이라고 한다.


또 습관의 힘이라는 제목이 습관을 잘 이용하라는 내용처럼 들려 읽기 시작한건데 읽고 나니 낚시처럼 느껴져서이다.

습관의 좋은 점이라기 보다는 안좋은 습관에 대한 사례가 많이 나오기 때문에 차라리 "습관의 실체", "습관의 분석", "습관의 공포" 등의 제목이 더 어울리지 않을까 하는 생각...ㅋㅋ


반응형
Posted by GreeMate