xuetr0.33版本增加了进程的快捷键的查看,
于是乎查了下资料,找到了实现的方法,不敢独享和大家分享一下~~~
其实Windows的所有的快捷键保存在win32k里面的一个单向连表里面,
链表里面的结构体如下:
代码:
typedef struct _HOT_KEY_ITEM { LIST_ENTRY ListEntry; struct _ETHREAD *Thread; HWND hWnd; int id; UINT fsModifiers; UINT vk; } HOT_KEY_ITEM, *PHOT_KEY_ITEM;
所以关键是怎么找到那个单向链表
可以通过从导出函数查找内存的方法找到这个单向链表
首先是从shadow ssdt里的NtUserUnregisterHotKey函数开始查找
代码:
win32k!NtUserUnregisterHotKey: (大段省略...) 912d32f8 e888ffffff call win32k!_UnregisterHotKey (912d3285) (大段省略...)
代码:
win32k!_UnregisterHotKey: (大段省略...) 912d32a0 e8cffaffff call win32k!FindHotKey (912d2d74) (大段省略...)
这个时候XP和Win7的处理有所不同
代码:
win32k!FindHotKey: (大段省略...) XP的时候 bf89e4b4 8b35d4cb9abf mov esi,dword ptr [win32k!gphkFirst (bf9acbd4)] Win7的时候 912d2d84 8b3495009b4891 mov esi,dword ptr win32k!gphkHashTable (91489b00)[edx*4] (大段省略...)
gphkFirst /gphkHashTable 就是那个单向链表了,
最后只要循环这个单向链表就可以枚举所有的快捷键了~~~