吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4827|回复: 9
收起左侧

[C&C++ 转载] XP 遍历系统所有热键

 关闭 [复制链接]
690827027 发表于 2012-7-11 13:00
Windows 系统热键是通过
RegisterHotKey
来注册的 通过 UnregisterHotKey l来注销的

但是没有提供相关查询函数,在想是否可以提供一个函数查询所有热键信息
网上找了下,然后用IDA了看了Win32k.sys一下 翻了下源码 把相关结构贴了出来
大家一起来研究下

热键保存的结构为
typedef struct tagHOTKEY
{
  PDWORD pti; // 也是 PPETHREAD
  PDWORD    spwnd; //指向窗口句柄 PHWND
  WORD    fsModifiers; // MOD_SHIFT, MOD_ALT, MOD_CONTROL, MOD_WIN
  WORD    wFlags;      // MOD_SAS
  UINT    vk;  //
  int     id; //热键ID
  struct tagHOTKEY *phkNext; //下一个热键结构
} HOTKEY, *PHOTKEY;  
系统

常量定义

#define MOD_ALT                         0x0001
#define MOD_CONTROL                     0x0002
#define MOD_SHIFT                       0x0004

#define MOD_LEFT                        0x8000
#define MOD_RIGHT                       0x4000

而系统热键是存在win32k!gphkFirst  以头部的单链结构
所以只要得到这个变量地址 然后遍历所有结构就可以了

lkd> u win32k!FindHotKey
win32k!FindHotKey:
bf890dd3 8bff            mov     edi,edi
bf890dd5 55              push    ebp
bf890dd6 8bec            mov     ebp,esp
bf890dd8 8b4d20          mov     ecx,dword ptr [ebp+20h]
bf890ddb 832100          and     dword ptr [ecx],0
bf890dde 83652000        and     dword ptr [ebp+20h],0
bf890de2 53              push    ebx
bf890de3 56              push    esi
lkd> u
win32k!FindHotKey+0x11:
bf890de4 8b35d8fb9abf    mov     esi,dword ptr [win32k!gphkFirst (bf9afbd8)]
bf890dea 85f6            test    esi,esi
bf890dec 57              push    edi
bf890ded 7420            je      win32k!FindHotKey+0x6a (bf890e0f)
bf890def 8b7d0c          mov     edi,dword ptr [ebp+0Ch]
bf890df2 33db            xor     ebx,ebx
bf890df4 43              inc     ebx
bf890df5 8b16            mov     edx,dword ptr [esi]

lkd> dd win32k!FindHotKey+13
bf890de6  bf9afbd8 7457f685 0c7d8b20 8b43db33
bf890df6  08553b16 8b669774 3b660846 13741445
bf890e06  768bfe8b 75f68514 20458be6 5d5b5e5f
bf890e16  8b001cc2 453b0c46 83e57518 7500047e
bf890e26  08553b05 1989da75 06e8d6eb 3bfff709
bf890e36  9aeccc05 c76975bf 0001fc45 60eb0000
bf890e46  90909090 55ff8b90 5151ec8b 00fc6583
bf890e56  358b5653 bf9af078 107d8b57 7f116580

lkd> dd bf9afbd8
bf9afbd8  e5c989a8 00000000 e3d47570 00000000
bf9afbe8  e730ba78 e730ba78 00000000 bb68a368
bf9afbf8  00000000 e32157e8 00000000 bb5d1150
bf9afc08  e5b934a0 bb5d1190 e5ed7a30 bb5d11b0
bf9afc18  00000000 bb5d1170 00000000 bb5d11d0
bf9afc28  0000000a 00000004 00000004 00000000
bf9afc38  00000000 00000000 000927c0 00000000
bf9afc48  00000000 00000000 00000000 00000000

lkd> dd e5c989a8
e5c989a8  e2f3e900 bb761930 00000003 0000004d
e5c989b8  0000c04b e57b1c58 00010404 31616c47
e5c989c8  0c0d0401 5546744e 0058070e e5d34008
e5c989d8  00000000 00000000 00000000 e6942bb0
e5c989e8  00000040 00000002 0001a5f1 008d0000
e5c989f8  00011761 02430000 8ffe2410 00000001
e5c98a08  2e080c66 01cd5f15 00000000 00000000
e5c98a18  00000c5d 00000010 003c0004 00350042

e57b1c58  为下一个热键地址

lkd> dd e57b1c58
e57b1c58  e2f3e900 bb761930 00000003 000000bb
e57b1c68  0000c04a e1276860 0c410404 74536d4d
e57b1c78  2c6a08c0 00000000 35cbc8c0 00000000
e57b1c88  38dfd8c0 00000000 366be8c0 00000000
e57b1c98  369ff8c0 00000000 39f408c0 00000000
e57b1ca8  368818c0 00000000 2e4428c0 00000000
e57b1cb8  324438c0 00000000 307848c0 00000000
e57b1cc8  332458c0 00000000 36c868c0 00000000

lkd> dd e2f3e900
e2f3e900  8a250020 00000001 00000000 02f10cb0
e2f3e910  00d90d20 00000000 00000000 00000000
e2f3e920  00000000 00000000 00000000 e5971cf8
e2f3e930  e716c008 e24ced38 bb69f640 8ac38038
e2f3e940  bb640650 7ffdf6cc 01100020 00000000
e2f3e950  00000000 00000000 00000000 00c73fdf
e2f3e960  e75bb358 00000000 0000009c 00000000
e2f3e970  00000000 00000000 00000000 00000000

lkd> !object 8a250020
Object: 8a250020  Type: (8b1adca0) Thread
    ObjectHeader: 8a250008 (old version)
    HandleCount: 4  PointerCount: 6

lkd> dd bb761930
bb761930  000b0418 0000000d e2f3e900 8ac38038
bb761940  bb761930 00020000 80000300 00000008
bb761950  8c000000 0ad80000 00000000 bb69dbf0
bb761960  bb761d28 bb6406e8 00000000 bb69dbf0
bb761970  00000000 00000000 00000000 00000000
bb761980  00000000 00000000 00000000 00000000
bb761990  0ade6500 bb75f930 00000000 bb69dd68
bb7619a0  00000000 00000000 00000000 00000000

000b0418 为窗口句柄
使用 GetWindowThreadProcessId GetProcessImageFileName 可以获得进程全路径



win32k地址和映像大小可以使用

NtQuerySystemInformation
SystemModuleInformation
获得
读取可以使用

NtSystemDebugControl  8号功能

提取特征码

static BYTE s_staticCode[0x10] = {0x8b,0xff,0x55,0x8b,0xec,0x8b,0x4d,0x20,0x83,0x21,0x00,0x83,0x65,0x20,0x00,0x53};

搜索就可以了,XP测试可以通过




免费评分

参与人数 1威望 +1 收起 理由
Hmily + 1 感谢发布原创作品,[吾爱破解论坛]因你更精.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qiangwei8526 发表于 2012-7-11 13:01
学习下。多谢呀
Demo 发表于 2012-7-11 13:09
头像被屏蔽
bambooqj 发表于 2012-7-11 13:10
houtjn 发表于 2012-7-11 13:23
完全看不懂,楼主好像很厉害的样子~
Hmily 发表于 2012-7-11 13:44
膜拜谭牛啊!
Tigflanker 发表于 2012-7-11 13:53
这么凶残!虽然不会用,但是挺感兴趣,mark一下
wowocock 发表于 2012-7-11 14:00
要求贴 代码,便于 CTRL C , CTRL V。
zeif 发表于 2012-7-11 14:33
wowocock 发表于 2012-7-11 14:00
要求贴 代码,便于 CTRL C , CTRL V。

膜拜潭牛~
大肉鸡你也不发点原创,看看淫家潭牛
freedmsky 发表于 2012-7-11 22:42
新手表示看不懂,希望楼主推荐一些初入门的教材
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 16:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表