发布一款捉弄人的小程序与挂机锁同一原理(附源码)
//转载请保留以下这段内容
//此文章为本人学习笔记和心得,仅供您学习参考,不能保证其正确性。
//您在阅读本篇文章是有什么意见或看法,需要和本人探讨或指出错误,请到本篇文章处给我留言
//来源: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将鼠标锁定在某个区域。总之一条让用户即不出程序。我采用全局钩子的方式屏蔽快捷键的。
制作遇到的几个问题:
- Ctrl+alt+Del三个键用全局钩子是无法屏蔽的。我解决方法是使用计时器,定时检测有没有”Windows任务管理器”这样的窗口出现,如果出现就向其发送WM_CLOSE消息将窗口给灭了。外加ClipCursor将鼠标锁定在指定的区域,就是你弹出了任务管理器,也结束不了任务。
- ClipCursor锁定鼠标在某个区域,如果弹出任务管理器的话,全使锁定区域无效。产生这个问题的主要原因是当窗口大小改变时会调用ClipCursor(NULL),来释放鼠标,使得你的锁定变成无效。我的解决方法是当弹出任务管理器窗口时,再次锁定鼠标。但有一点需要注意的是,不能直接锁定,需要将线程Sleep100毫秒后再次锁定就OK了。
- 由于要屏蔽几个热键,我采用了全局勾子。但是全局勾子需要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)

11 条评论
to:sky,
有可能被绕过,当时弄的时候没考虑到这方面。
网上看到的源码,下载后试了下,找到一个方法可以绕过的。
在开了QQ的情况下,按,CTRL+ALT+Z,可以出现任务栏,然后,再用右键可以关掉 locksystem。
-_-!!
lonkil兄,看了这个程序,很有创意。
对于Ctrl+Alt+Del锁定,是比较麻烦,用远线程注入才可以达到目的。不过有一个DLL别人封装好了,只要调用就可以真正屏蔽Ctrl+Alt+Del了。不过这个DLL是很久以前的,不知道vista下兼容性。这个DLL可以下载到:http://www.xiaozhou.net/ReadNews.asp?NewsID=980
感谢兄弟指点,我去学习一下。
刚才逆了一下那两个DLL,好像实现思路注入到kernel32.dll中去拦截窗口回调,进行处理。
可惜我试了两次都蓝屏了,winxp+sp3.汗。
呵呵…有意思…我决定研究一下如何阻止全局钩子加载…^_^
期待大作,有什么成果的话,记得分享一下。Thx
大哥文章发表的进度正好是我学习的进度。好~~ 我研究看能不能卸载这个全局hook,谢谢分享,学习
看样子,我开了个好头,嘎嘎。
太巧合了。按照我制定的学习顺序,正在钻研dll编程和hook的相关东西