系统热键分析 TWO 取热键对应的进程名

又是系统热键分析,静静的夜里分析起来,比打麻将时间过得快...

typedef struct tagHOTKEY {
    W32THREAD pti;    <-- W32THREAD
    PWND    spwnd;
    WORD    fsModifiers; // MOD_SHIFT, MOD_ALT, MOD_CONTROL, MOD_WIN
    WORD    wFlags;      // MOD_SAS
    UINT    vk;
    int     id;
    struct tagHOTKEY *phkNext;
} HOTKEY, *PHOTKEY;

lkd> x /t /v /q /d win32k!gphkFirst
pub global bf9b0bd8             0  @!"win32k!gphkFirst" = 

lkd> dd /c 6 dwo(win32k!gphkFirst) L6
e10687d8  e29749b0 bbe68840 00000006 000000c0 0000c01a e2e8c8f8
lkd> dd /c 6 e2e8c8f8 L6
e2e8c8f8  e29749b0 bbe68840 00000003 0000004a 0000000c e2f4cab8
lkd> dd /c 6 e2f4cab8 L6
e2f4cab8  e29749b0 bbe68840 00000003 000000bd 0000000b e28d4d20
lkd> dd /c 6 e28d4d20 L6
e28d4d20  e29749b0 bbe68840 00000003 0000004e 0000000a e2f30e98

lkd> dt -v win32k!_W32THREAD
struct _W32THREAD, 10 elements, 0x28 bytes
   +0x000 pEThread         : Ptr32 to struct _ETHREAD, 0 elements, 0x0 bytes

lkd> dt -v nt!_ETHREAD
struct _ETHREAD, 55 elements, 0x260 bytes
   +0x000 Tcb              : struct _KTHREAD, 74 elements, 0x1c0 bytes
   ...
   +0x220 ThreadsProcess   : Ptr32 to struct _EPROCESS, 107 elements, 0x260 bytes
          ^^^^^^^^^^^^^^^^^
   +0x224 StartAddress     : Ptr32 to Void
   ...

lkd> dt -v nt!_EPROCESS
struct _EPROCESS, 107 elements, 0x260 bytes
   +0x000 Pcb              : struct _KPROCESS, 29 elements, 0x6c bytes
   ...
   +0x174 ImageFileName    : [16] UChar
          ^^^^^^^^^^^^^^^^
   +0x184 JobLinks         : struct _LIST_ENTRY, 2 elements, 0x8 bytes
   ...

lkd> dd win32k!gphkFirst L1   <--- 指向 gphkFirst
bf9b0bd8  e10687d8            

lkd> dd e10687d8 L1           <--- 指向 W32THREAD
e10687d8  e29749b0            

lkd> dd e29749b0 L1           <--- 指向 _ETHREAD
e29749b0  85d64990            

lkd> dd 85d64990+0x220 L1     <--- 指向 _EPROCESS
85d64bb0  86e1db30            

lkd> da 86e1db30+174          <--- 指向 _EPROCESS 的 _EPROCESS->ImageFileName
86e1dca4  "explorer.exe"
为了取进程名既然跳了5次...
原文地址:https://www.cnblogs.com/nlsoft/p/2999937.html