首页
社区
课程
招聘
7
[原创]利用钩子函数来注入DLL的一个具体应用:点击桌面不同图标,播放相应音符
发表于: 2011-6-27 21:17 18113

[原创]利用钩子函数来注入DLL的一个具体应用:点击桌面不同图标,播放相应音符

2011-6-27 21:17
18113

最近看核心编程,看到DLL注入这一章,有一个Desktop Item Positon Saver(DIPS)的例子,这个例子是使用窗口挂钩来将一个DLL注入到Explorer.exe的地址空间中,来保存和恢复图标位置。
于是便想根据这个例子自己改造一下,正好前段时间看到在 Google 的首页上,谷歌为了纪念电吉他之父莱斯·保罗 96 周年诞辰,特意做了一个很有意思的Doodle,这个 谷歌电吉他Logo可以让用户在其上面弹奏吉他,于是便想利用桌面图标来编一个类似的程序,点击不同的图标,发出不同的吉他音色的音符。
下面把编程的大概思路说一下:
首先就是找到桌面ListView控件的窗口句柄,刚开始在这里就遇到了问题。
核心编程这本书上讲到Windows外壳有一个类别为ProgMan的窗口,这个ProgMan窗口有且只有一个类别为SHELLDLL_DefView的子窗口。这个子窗口同样有且只有一个子窗口,子窗口的类别为SysListView32,这个SysListView32窗口就是桌面的ListView控件窗口。
于是我便利用了它的代码:
HWND hWndLV =GetFirstChild(GetFirstChild(
      FindWindow(TEXT("ProgMan"), NULL)));
但发现运行不正确,于是便使用spy++查看,发现我的SysListView32窗口是位于类为WorkerW的窗口下。难道这是win7系统更改的?我也不清楚。因此,如果大家下载下来我的源代码后,如果运行不成功,最好用spy++查看一下窗口信息,看一看SysListView32控件到底是谁的子窗口,如果是ProgMan的子窗口,那么大家需要把MouseHookApp.cpp文件中的
HWND hWndLV;
   EnumWindows(EnumWindowsProc,(LPARAM)&hWndLV);

EnumWindowsProc函数注释掉,
取消HWND hWndLV =GetFirstChild(GetFirstChild(
      FindWindow(TEXT("ProgMan"), NULL)));这一代码的注释。
我发现类名为WorkerW的窗口不是唯一的,因此不能使用FindWindows了,改用了EnumWindows函数。
HWND hWndLV;
   EnumWindows(EnumWindowsProc,(LPARAM)&hWndLV);

其中的EnumWindowsProc函数实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam){
    if(hwnd)
    {
        TCHAR classname[128];
        GetClassName(hwnd, classname, 128);
        if(!_tcscmp(classname, _T("WorkerW") ) )
        {
            HWND &hWndLV = *(HWND *)lParam;
            TCHAR childClassName[128];
            HWND hChildWnd = GetWindow(hwnd, GW_CHILD);
            while(hChildWnd)
            {
                GetClassName(hChildWnd, childClassName, 128);
                if(!_tcscmp(childClassName, _T("SHELLDLL_DefView")))
                hWndLV = GetFirstChild(hChildWnd);
                chASSERT(IsWindow(hWndLV));
                return false;
            }
        }
    }
     
    return true;
}

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

上传的附件:
收藏
免费 7
支持
分享
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2024-5-31 07:27
伟叔叔
为你点赞~
2024-5-31 01:22
心游尘世外
为你点赞~
2024-2-23 00:25
飘零丶
为你点赞~
2024-2-13 00:22
QinBeast
为你点赞~
2024-1-26 03:19
shinratensei
为你点赞~
2024-1-21 04:53
PLEBFE
为你点赞~
2023-3-8 03:08
最新回复 (19)
雪    币: 2439
活跃值: (2360)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
2
核心编程我也看过, 但是没写出像LZ那么好玩的程序, 失败啊。
希望LZ以后能改进通用性的同时能分享你的学习心得。
2011-6-28 10:28
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看过,很好,感谢楼主分享!
2011-6-28 12:31
0
雪    币: 677
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
只装了vc6  鸭梨很大
2011-6-28 13:42
0
雪    币: 271
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wep
5
不错,挺好的应用。
2011-6-28 14:41
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
嗯 曾经谷歌的这个小动作我也留意过
2011-6-28 20:18
0
雪    币: 327
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
上班的电脑,只装了vc6。今晚是不能试玩了!
2011-6-28 21:07
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
8
恩 那个电吉他很赞 不知道怎么做的 谁可以讲讲啊
2011-6-28 22:05
0
雪    币: 256
活跃值: (79)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
对啊,我也想看看google的那个电吉他的原理。是不是用ajax实现的?
2011-6-28 23:26
0
雪    币: 256
活跃值: (79)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
多谢斑竹,以后会分享的
2011-6-28 23:31
0
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
如果楼主学过WINDOWS GDI那这个软件肯定更出色^_^
2011-6-29 07:24
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
没放bin啊,一时之间找不到编译器``
鼠标钩子,学以致用啊
2011-7-1 05:30
0
雪    币: 217
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
LZ挺有创意,从来没有想过这么玩。佩服。
2011-7-2 09:44
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
厉害啊,我也看过核心编程,就没有这么多的想法。向楼主学习
2011-7-2 10:21
0
雪    币: 7
活跃值: (393)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
编码风格不错。
既然win32下,就用大写FALSE替代false吧。
2011-7-3 23:56
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
16
mark~~,有点意思~~
2011-7-4 17:36
0
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
very very very good!
好!
能否指点一下在linux下如何运行你这个程序?
手头已经没有windows的机器了,可否书写一份linux下的源码?
2011-7-6 08:32
0
雪    币: 256
活跃值: (79)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
多谢回复。现在还是个菜,linux没接触过,以后又机会一定要学习一下linux
2011-7-6 14:46
0
雪    币: 49
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
鼠标钩子!!! 正好能用上!
2011-7-6 19:24
0
雪    币: 777
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
看起来蛮有创意的。
2011-7-13 11:27
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册