生活的天平本不平衡,只有通过努力改变其偏向。

发布一款捉弄人的小程序与挂机锁同一原理(附源码)

2008-11-13

//转载请保留以下这段内容
//此文章为本人学习笔记和心得,仅供您学习参考,不能保证其正确性。
//您在阅读本篇文章是有什么意见或看法,需要和本人探讨或指出错误,请到本篇文章处给我留言
//来源:www.vcfans.com
//By Lonkil (lonkil_at_gmail.com)
//2008-11-13

前一段时间Ricokuo给我一个捉弄人的小程序,主要实现意思就是将窗口置顶且全屏,Hook了几个关键,让你退不出程序。我和Ricokuo说那个程序做的太简单了,还能弹出开始菜单,改天我做一个强大一点的。当时说将开机自启动也加上,现在想想还是算了吧,对于那些普通用户,加个自启动,就不是捉弄人了,就是害人了。所以这一版还是放弃了自启动的功能。

界面如下:

主要实现思路:

Hook了系统中所有关闭应用程序中的快捷键,比如什么Esc,Alt+Tab,Alt+F4,Ctrl+shit+Esc等。将窗口全屏且置顶,使用ClipCursor将鼠标锁定在某个区域。总之一条让用户即不出程序。我采用全局钩子的方式屏蔽快捷键的。

制作遇到的几个问题:

  1. Ctrl+alt+Del三个键用全局钩子是无法屏蔽的。我解决方法是使用计时器,定时检测有没有”Windows任务管理器”这样的窗口出现,如果出现就向其发送WM_CLOSE消息将窗口给灭了。外加ClipCursor将鼠标锁定在指定的区域,就是你弹出了任务管理器,也结束不了任务。
  2. ClipCursor锁定鼠标在某个区域,如果弹出任务管理器的话,全使锁定区域无效。产生这个问题的主要原因是当窗口大小改变时会调用ClipCursor(NULL),来释放鼠标,使得你的锁定变成无效。我的解决方法是当弹出任务管理器窗口时,再次锁定鼠标。但有一点需要注意的是,不能直接锁定,需要将线程Sleep100毫秒后再次锁定就OK了。
  3. 由于要屏蔽几个热键,我采用了全局勾子。但是全局勾子需要DLL,这样发布程序的时候会多出一个DLL文件,这样很不方便,达不到欺骗人的目的。我的解决方案是将Hook的DLL放到EXE的资源中,在程序启动的时候释放出来。^_^,这种方式是不是像某种病毒呀,哈哈。有一个问题需要注意,当窗口退出的时候删除释放的DLL的时候,可能一次删除文件不成功,需要再一次FreeLibary才可能正常删除。具体的参见代码。

玩法:

我设定的规则是:

不论你前十次输入是或否,都不会退出程序。只有达到第十次以后,输入是时才能正常退出程序。我留了一个超管的密码就是:www.vcfans.com.如果你碰巧被朋友捉弄了,可以试试www.vcfans.com这个密码。

代码我就不贴了,有兴趣的朋友可以下载代码回去自己看吧。

代码下载:

  locksystem_src.7z (49.6 KiB, 1,056 hits)

可执行文件下载:

  LockSystem.7z (7.3 KiB, 864 hits)

作者:lonkil | 分类目录:本站原创编程开发 | 标签:

11 条评论

  1. lonkil 说道:

    to:sky,

    有可能被绕过,当时弄的时候没考虑到这方面。

  2. sky 说道:

    网上看到的源码,下载后试了下,找到一个方法可以绕过的。
    在开了QQ的情况下,按,CTRL+ALT+Z,可以出现任务栏,然后,再用右键可以关掉 locksystem。

  3. Cooldog 说道:

    lonkil兄,看了这个程序,很有创意。
    对于Ctrl+Alt+Del锁定,是比较麻烦,用远线程注入才可以达到目的。不过有一个DLL别人封装好了,只要调用就可以真正屏蔽Ctrl+Alt+Del了。不过这个DLL是很久以前的,不知道vista下兼容性。这个DLL可以下载到:http://www.xiaozhou.net/ReadNews.asp?NewsID=980

  4. BaihowFF 说道:

    呵呵…有意思…我决定研究一下如何阻止全局钩子加载…^_^