익히 알려진 것들이겠지만... 정리차원에서 살포시 올려봅니다.
일단 "프로세스" 에 대한 전체 경로이기 때문에 EPROCESS 에서부터 시작합니다. ^^;;;;
편의상 WinXP SP3 OS 환경 하의 notepad.exe 를 타겟으로 잡고 진행합니다. ^^;;
( XP 이상이면 가능할 것으로 생각됩니다...ㅎ )
타겟으로 잡은 notepad.exe 의 EPROCESS 는 다음과 같습니다.
EPROCESS 의 여러 정보들 중에서 SectionObject, Peb, SeAuditProcessCreationInfo ...
이상의 세가지를 통해 전체경로를 구해보도록 하겠습니다. ( 물론 다른 방법도 있을 수 있겠죠..^^;; )
1. Peb
유저레벨에서도 접근이 가능한 Peb 를 이용하는 것이 가장 일반적인 방법이 아닐까 싶네요.
Peb 에는 다음과 같은 정보들이 있습니다.
ProcessParameters 는 프로세스의 파라메터에 대한 정보를 담고있는데...
ImagePathName 이라는 필드에 해당 프로세스의 전체 경로가 저장이 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | kd> dt nt!_RTL_USER_PROCESS_PARAMETERS 0x00020000 +0x000 MaximumLength : 0x1000 +0x004 Length : 0x700 +0x008 Flags : 0x22001 +0x00c DebugFlags : 0 +0x010 ConsoleHandle : (null) +0x014 ConsoleFlags : 0 +0x018 StandardInput : (null) +0x01c StandardOutput : 0x00010001 Void +0x020 StandardError : (null) +0x024 CurrentDirectory : _CURDIR +0x030 DllPath : _UNICODE_STRING "C:\WINDOWS\system32;C:\WINDOWS\system32;C:\WINDOWS\system;C:\WINDOWS;.;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\UTIL;C:\MyTools\OllyDBG;C:\MyTools\LordPE;C:\MyTools\ImpREC" +0x038 ImagePathName : _UNICODE_STRING "C:\WINDOWS\system32\notepad.exe" +0x040 CommandLine : _UNICODE_STRING "" C:\WINDOWS\system32\notepad.exe " " +0x048 Environment : 0x00010000 Void +0x04c StartingX : 0 +0x050 StartingY : 0 +0x054 CountX : 0 +0x058 CountY : 0 +0x05c CountCharsX : 0 +0x060 CountCharsY : 0 +0x064 FillAttribute : 0 +0x068 WindowFlags : 0x401 +0x06c ShowWindowFlags : 1 +0x070 WindowTitle : _UNICODE_STRING "C:\WINDOWS\system32\notepad.exe" +0x078 DesktopInfo : _UNICODE_STRING "WinSta0\Default" +0x080 ShellInfo : _UNICODE_STRING "" +0x088 RuntimeData : _UNICODE_STRING "" +0x090 CurrentDirectores : [32] _RTL_DRIVE_LETTER_CURDIR |
2. SeAuditProcessCreationInfo
1 2 3 | +0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO +0x000 ImageFileName : 0x86027008 _OBJECT_NAME_INFORMATION +0x000 Name : _UNICODE_STRING "\Device\HarddiskVolume1\WINDOWS\system32\notepad.exe" |
3. SectionObject
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | kd> dt nt!_SECTION_OBJECT 0xe19085f8 +0x000 StartingVa : (null) +0x004 EndingVa : (null) +0x008 Parent : (null) +0x00c LeftChild : (null) +0x010 RightChild : (null) +0x014 Segment : 0xe182dd08 _SEGMENT_OBJECT kd> dt nt!_SEGMENT 0xe182dd08 +0x000 ControlArea : 0x86005008 _CONTROL_AREA +0x004 TotalNumberOfPtes : 0x14 +0x008 NonExtendedPtes : 0x14 +0x00c WritableUserReferences : 0 +0x010 SizeOfSegment : 0x14000 +0x018 SegmentPteTemplate : _MMPTE +0x020 NumberOfCommittedPages : 0 +0x024 ExtendInfo : (null) +0x028 SystemImageBase : (null) +0x02c BasedAddress : 0x01000000 Void +0x030 u1 : __unnamed +0x034 u2 : __unnamed +0x038 PrototypePte : 0xe182dd48 _MMPTE +0x040 ThePtes : [1] _MMPTE kd> dt nt!_CONTROL_AREA 0x86005008 +0x000 Segment : 0xe182dd08 _SEGMENT +0x004 DereferenceList : _LIST_ENTRY [ 0x0 - 0x0 ] +0x00c NumberOfSectionReferences : 1 +0x010 NumberOfPfnReferences : 0x13 +0x014 NumberOfMappedViews : 1 +0x018 NumberOfSubsections : 4 +0x01a FlushInProgressCount : 0 +0x01c NumberOfUserReferences : 2 +0x020 u : __unnamed +0x024 FilePointer : 0x86132220 _FILE_OBJECT +0x028 WaitingForDeletion : (null) +0x02c ModifiedWriteCount : 0 +0x02e NumberOfSystemCacheViews : 0 kd> dt nt!_FILE_OBJECT 0x86132220 +0x000 Type : 0n5 +0x002 Size : 0n112 +0x004 DeviceObject : 0x863bd900 _DEVICE_OBJECT +0x008 Vpb : 0x863e28e0 _VPB +0x00c FsContext : 0xe1043d90 Void +0x010 FsContext2 : 0xe1043ee8 Void +0x014 SectionObjectPointer : 0x86133424 _SECTION_OBJECT_POINTERS +0x018 PrivateCacheMap : (null) +0x01c FinalStatus : 0n0 +0x020 RelatedFileObject : (null) +0x024 LockOperation : 0 '' +0x025 DeletePending : 0 '' +0x026 ReadAccess : 0x1 '' +0x027 WriteAccess : 0 '' +0x028 DeleteAccess : 0 '' +0x029 SharedRead : 0x1 '' +0x02a SharedWrite : 0 '' +0x02b SharedDelete : 0x1 '' +0x02c Flags : 0x44042 +0x030 FileName : _UNICODE_STRING "\WINDOWS\system32\notepad.exe" +0x038 CurrentByteOffset : _LARGE_INTEGER 0x0 +0x040 Waiters : 0 +0x044 Busy : 0 +0x048 LastLock : (null) +0x04c Lock : _KEVENT +0x05c Event : _KEVENT +0x06c CompletionContext : (null) |
"프로세스" 에 포커스를 맞춰서 전체경로를 얻어오는 방법을 정리한건데...
"전체경로" 에 포커스를 맞춘다면 Peb 의 Ldr 정보를 이용하거나...
VadRoot 를 이용해서 로딩된 모듈들의 전체 경로를 구할 수도 있습니다.
그 중에서 프로세스의 경로만 가져오면 되겠죠... ^^;;;;;
'Windows System' 카테고리의 다른 글
윈도우 시스템 모듈(kernel32.dll)을 복사해서 로딩할 경우 주의점 (0) | 2014.02.15 |
---|---|
WOW64 프로세스의 PEB (11) | 2012.12.17 |
Win7 ~ 인터넷 연결 공유(ICS) 설정 삽질기 (2) | 2012.06.01 |
Microsoft Windows System Call Table ( NT/2000/XP/2003/Vista/2008/7/8 ) (0) | 2011.12.07 |
Visual C++ 의 C 런타임 라이브러리(CRT) 등의 공유모듈 배포시 주의점... (1) | 2011.08.10 |