安装钩子一定要用dll么,可以只用exe来完成么?最好给个具体键盘钩子例子

Toogo 2004-07-11 10:35:46
内容如题。
...全文
506 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabo 2005-02-10
  • 打赏
  • 举报
回复
呵呵呵,这个简单。。。。

的确钩子必须要用DLL,但是如果楼主有需求只用EXE,也行。

把DLL当作资源读入EXE中……明白?

不明白的话给了分再讨论。。。。
会思考的草 2005-02-09
  • 打赏
  • 举报
回复
最后再罗嗦几句,因为exe和dll对装载器而言是不同的模块,对于一个模块,在不同进程中,是处于不同的虚拟地址上,但是必须最后映射到同一段物理地址,这样重定位问题是非常麻烦的——如果你不做成dll的话。
会思考的草 2005-02-09
  • 打赏
  • 举报
回复
这要从头说起,在98下,内存划分为高2G和低2G,这两部分的作用就不用我罗嗦了吧,基本上和2k是差不多的。但是,有一个区别,对于dll,9x可能出于效率的考虑,把它装在高2G,这样可以在多个进程之间共享代码,所以像那3个著名的dll,都是在高2G里,所有进程使用同一份拷贝。这就使得全局api hook比较方便,只要把dll加载到高2G,用一个简单的jmp在api入口的地方跳到我们的hook dll里面,处理完了再跳回去即可。之所以做成dll,是因为dll可以方便地加载于高2G的地址空间,现在你明白了?只要能把一个模块加载到高2G的空间去,不一定要做成dll。
但是同样的情况在2K下不再成立,dll装载于低2G中,即使是user32.dll这样的系统dll,也是每个进程有一个拷贝,所以你即使修改了本进程的dll,也不能影响到其他进程,要完成全局hook,就必须要将我们的hook dll自动加载到系统中每个进程当中去,对于将来运行的进程,也必须要自动加载才行,注册表中有一个表项,可以指定一个dll在每个进程启动的时候都必须自动加载,这样对于完成api hook稍微方便一点:)
42252343 2005-02-04
  • 打赏
  • 举报
回复
我不同意 楼上说的全局钩子非得写入DLL
hhook=SetWindowsHookEx (WH_JOURNALRECORD,(HOOKPROC)HookProc, hInst, 0);
WH_JOURNALRECORD属于全局键盘钩子 我用它却不用写入DLL
qaz1984 2005-02-04
  • 打赏
  • 举报
回复
up
ywyw 2005-02-04
  • 打赏
  • 举报
回复
不错
vcforever 2004-07-12
  • 打赏
  • 举报
回复
全局钩子必须写在DLL中,局部钩子可以写在应用程序自身内!

局部钩子
http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
用钩子实现重现用户操作

全局钩子
http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
Windows XP系统中如何屏蔽 Ctrl+Alt+Del、Alt+Tab以及Ctrl+Esc键序列
Toogo 2004-07-12
  • 打赏
  • 举报
回复
有具体的例子么?
zkxz 2004-07-12
  • 打赏
  • 举报
回复
同意楼上,但要补充一点,全局消息钩子不一定非要做成DLL,像WH_KEYBOARD_LL、WH_MOUSE_LL等几个消息可以用EXE来实现全局HOOK。这个问题,CSDN以前有个帖子介绍过。
zkxz 2004-07-12
  • 打赏
  • 举报
回复
To Toogo(Toogo),你说的那个KeyLogger可以用exe做,因为它HOOK了WH_KEYBOARD_LL消息,关于这个消息的全局钩子是可以在EXE中实现的,写一个试试就知道了。

To 楼上各位,你们也可以写一个WH_KEYBOARD_LL全局钩子EXE程序试试,是正确的。
keiven 2004-07-12
  • 打赏
  • 举报
回复
学习
kvls 2004-07-12
  • 打赏
  • 举报
回复
可以只使用EXE,不过必须使用汇编,因为高级语言据我所知无法解决代码重定位的问题。
Kudeet 2004-07-12
  • 打赏
  • 举报
回复
那就是相当于打包一个应用程序,最简单的就是静态编译,也可以用一些打包工具
Toogo 2004-07-12
  • 打赏
  • 举报
回复
那又是怎么实现?
Kudeet 2004-07-12
  • 打赏
  • 举报
回复
它把全部编译成了一个可执行文件
Toogo 2004-07-12
  • 打赏
  • 举报
回复
但是有的键盘记录软件如KeyLogger,只有一个exe文件,但他可以实现全局键盘记录,是怎样实现的呢?
会思考的草 2004-07-12
  • 打赏
  • 举报
回复
写成dll是因为windows要把你的dll映射到各个进程独立的地址空间里面去——如果你写的是全局钩子的话。
如果是单对本进程而言,可以不用dll。
myxs 2004-07-12
  • 打赏
  • 举报
回复
学习!
PiggyXP 2004-07-12
  • 打赏
  • 举报
回复
就是上面各位兄弟说的那样了:

局部的钩子当然可以写在自己的exe中,但是全局钩子还是要用dll来实现地~~~^_^
PiggyXP 2004-07-12
  • 打赏
  • 举报
回复
呵呵,帮你搜了好几份资料

深入解析钩子和动态链接库
http://www.csdn.net/develop/Read_Article.asp?id=26865

深入浅出HOOKS
http://www.csdn.net/develop/Read_Article.asp?id=17914

给DLL初学者——全程键盘钩子的一种简单实现
http://www.csdn.net/develop/read_article.asp?id=16499
加载更多回复(8)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧