суббота, 11 декабря 2010 г.

mailslot owner

например под xp sp2 владельца mailslotа можно выявить примерно так (в данном случае мой тестовый процесс PID EA0 создал mailslot "\sample_mailslot" с handle 7E8):


lkd> !process EA0
Searching for Process with Cid == ea0
PROCESS 862fe260 ...


lkd> !handle 7e8 f 862fe260
processor number 0, process 862fe260
PROCESS 862fe260  SessionId: 0  Cid: 0ea0    Peb: 7ffd6000  ParentCid: 047c
    DirBase: 1522e7a0  ObjectTable: e1982398  HandleCount:  11.
    Image: trash.exe

Handle table at e124c000 with 11 Entries in use
07e8: Object: 8541ff90  GrantedAccess: 00160089 Entry: e124cfd0
Object: 8541ff90  Type: (867e9ca0) File
    ObjectHeader: 8541ff78 (old version)
        HandleCount: 1  PointerCount: 1
        Directory Object: 00000000  Name: \sample_mailslot {Mailslot}

lkd> dt nt!_FILE_OBJECT 8541ff90
   +0x000 Type             : 5
   +0x002 Size             : 112
   +0x004 DeviceObject     : 0x862198d8 _DEVICE_OBJECT
   +0x008 Vpb              : (null)
   +0x00c FsContext        : 0x8547df00
   +0x010 FsContext2       : (null)
   +0x014 SectionObjectPointer : (null)
   +0x018 PrivateCacheMap  : (null)
   +0x01c FinalStatus      : 0
   +0x020 RelatedFileObject : (null)
   +0x024 LockOperation    : 0 ''
   +0x025 DeletePending    : 0 ''
   +0x026 ReadAccess       : 0x1 ''
   +0x027 WriteAccess      : 0 ''
   +0x028 DeleteAccess     : 0 ''
   +0x029 SharedRead       : 0x1 ''
   +0x02a SharedWrite      : 0x1 ''
   +0x02b SharedDelete     : 0 ''
   +0x02c Flags            : 0x40210
   +0x030 FileName         : _UNICODE_STRING "\sample_mailslot"
   +0x038 CurrentByteOffset : _LARGE_INTEGER 0x0
   +0x040 Waiters          : 0
   +0x044 Busy             : 0
   +0x048 LastLock         : (null)
   +0x04c Lock             : _KEVENT
   +0x05c Event            : _KEVENT
   +0x06c CompletionContext : (null)



8547df00 04 06 00 01 00 00 00 00 01 00 00 00 60 bb 37 86  ............`.7.
8547df10 60 bb 37 86 28 bb 37 86 90 99 21 86 90 ff 41 85  `.7.(.7...!...A.
8547df20 00 fa 09 e1 00 00 00 00 28 df 47 85 28 df 47 85  ........(.G.(.G.
8547df30 ff ff ff ff ff ff ff ff 02 d9 4d bc b9 98 cb 01  ..........M.....
8547df40 02 d9 4d bc b9 98 cb 01 02 d9 4d bc b9 98 cb 01  ..M.......M.....
8547df50 02 d9 4d bc b9 98 cb 01 01 00 00 00 01 00 00 00  ..M.............
8547df60 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00  ................
8547df70 00 00 00 00 20 00 22 00 a8 88 86 e1 1e 00 20 00  .... ."....... .
8547df80 aa 88 86 e1 01 08 02 00 ac bb 37 86 84 df 47 85  ..........7...G.
8547df90 90 df 47 85 00 00 00 00 00 00 00 00 74 df 47 85  ..G.........t.G.
8547dfa0 60 e2 2f 86 02 00 00 00 00 00 00 00 00 00 00 00


Update: фокус не удался - для клиентского handle FsContext отличается от серверного и поле по смещению 0xa0 вместо указателя на процесс-владелец содержит какой-то треш

Update2: фокус удался. Действительно, для клиентского mailslot handle FsContext отличается от серверного и значительно короче. Но если приглядеться внимательнее - по смещению 0x14 (под 64 бита 0x20) в нем хранится указатель на серверный FsContext, из которого уже можно достать все что нужно. Насколько мне удалось понять клиентский FsContext имеет в первом байте значение 6, а серверный 4.

Комментариев нет:

Отправить комментарий