首页
社区
课程
招聘
[原创]在内核里查看所有的快捷键~~~
发表于: 2010-4-23 19:29 9674

[原创]在内核里查看所有的快捷键~~~

2010-4-23 19:29
9674
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;


从_KTHREAD结构可以得到进程,fsModifiers和vk加起来就是组合键了。

所以关键是怎么找到那个单向链表

可以通过从导出函数查找内存的方法找到这个单向链表

首先是从shadow ssdt里的NtUserUnregisterHotKey函数开始查找

win32k!NtUserUnregisterHotKey:

(大段省略...)

912d32f8 e888ffffff      call    win32k!_UnregisterHotKey (912d3285)

(大段省略...)


然后在_UnregisterHotKey 里面找FindHotKey函数

win32k!_UnregisterHotKey:

(大段省略...)

912d32a0 e8cffaffff      call    win32k!FindHotKey (912d2d74)

(大段省略...)


最后从FindHotKey函数里面找到那个单向链表

这个时候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 就是那个单向链表了,

最后只要循环这个单向链表就可以枚举所有的快捷键了~~~

[课程]Android-CTF解题方法汇总!

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 254
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
问题核心是搜索你提到的全局变量。看上去你似乎是用搜索特征码的办法,用搜索e888ffffff的方法定位_UnregisterHotKey严重不具有通行性。可以用通用性更好的办法搜索,比如XX…
2010-4-23 23:20
0
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
恩,最好有通用性更好的方法,
大牛能不能提醒一下这个XX是什么啊?
2010-4-23 23:48
0
游客
登录 | 注册 方可回帖
返回
//