登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - Delphi 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

在Windows2000中拦截Ctrl+Alt+Del
发表日期:2003-05-28作者:[] 出处:  

问题:在win2000中如何屏蔽ctrl+del+alt键和其他系统键(98下可以为什么在2000下就不行) ( 积分:100, 回复:20, 阅读:198 )

分类:系统相关 ( 版主:luyear, zyy04 ) 

来自:xan, 时间:2001-8-26 21:09:00, ID:607224 [显示:小字体 | 大字体] 

rt!

来自:lsyx, 时间:2001-9-5 14:20:00, ID:612055

win2000系统不允许屏蔽系统建,因为它的登录和任务管理都用的是ctrl+alt+del

来自:goddy, 时间:2001-9-5 18:39:00, ID:612514

hook the key

来自:梆梆, 时间:2001-9-6 16:15:00, ID:613742

有人认为使用一个键盘钩子WH_KEYBOARD就可以解决问题,但实际上问题并不是那么简单。

这是因为键盘钩子WH_KEYBOARD不能截取到系统键的输入。在Windows NT 4.0 SP3或 Windows 2000下系统提供了一个底层系统钩子(Low Level Hook)WH_KEYBOARD_LL。底层键盘钩子存在于用户敲击键盘和系统处理之间,而普通键盘钩子则存在于系统产生WM_KEY***消息之后。很清楚,普通键盘钩子只能截获WM_KEY***消息,而不能对系统键进行操作。但是底层键盘钩子有一个致命的弱点,就是如果调用它的进程或线程出现死循环,则系统将不能处理任何键盘操作。为了解决这个问题,微软在注册表中给出了一个底层键盘钩子处理的限制时间,如果超出了这个时间,系统将进入正常处理。这个时间键值存储在注册表的HKEY_CURRENT_USER\Control Panel\Desktop\ LowLevelHooksTimeout下。

首先需要安装钩子:

HHOOK SetWindowsHookEx(int iHookCode, 

HOOKPROC lpfn,HINSTANCE hModule,DWORD dwThreadId);

其中,第一个参数是钩子的类型;第二个参数是钩子函数的地址;第三个参数是包含钩子函数的模块句柄;第四个参数指定监视的线程。如果指定确定的线程,即为线程专用钩子;如果指定为空,即为全局钩子。其中,全局钩子函数必须包含在DLL(动态链接库)中,而线程专用钩子还可以包含在可执行文件中。得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个SDK中的API函数CallNextHookEx来传递它。钩子函数也可以通过直接返回TRUE来丢弃该消息,并阻止该消息的进一步传递。

下面是实现底层键盘钩子的部分源代码:

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam, LPARAM lParam) 

{

  BOOL fEatKeystroke = FALSE;

   If (nCode == HC_ACTION) {

    switch (wParam) {

    case WM_KEYDOWN: 

    case WM_SYSKEYDOWN:

    case WM_KEYUP: 

    case WM_SYSKEYUP: 

     PKBDLLHOOKSTRUCT p = 

(PKBDLLHOOKSTRUCT) lParam;

     fEatKeystroke =((p->vkCode == 

VK_TAB) && ((p->flags & LLKHF_ALTDOWN) 

!= 0)) ||((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||((p->vkCode == VK_ESCAPE) && 

((GetKeyState(VK_CONTROL) & 0x8000) != 0));

     break;

}

   }

return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));

  }

  int WINAPI WinMain(HINSTANCE hinstExe, HIN

STANCE, PTSTR pszCmdLine, int) 

{

  //安装底层键盘钩子

HHOOK hhkLowLevelKybd = SetWindow

sHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 

hinstExe, 0);

  MessageBox(NULL,TEXT(“Alt+Esc, Ctrl+Esc, and Alt+Tab are now disabled.\n”),TEXT(“Click \“Ok\” to terminate this application and re-enable these keys.”),TEXT(“Disable Low-Level Keys”), MB_OK);

  UnhookWindowsHookEx(hhkLowLevelKybd);

  return(0);

  }

来自:xWolf, 时间:2001-9-6 17:36:00, ID:613901

上面的例子是MSDN里的,不过很显然,是无法屏蔽Ctrl+Alt+Del的。我只知道如何去模拟一次Ctrl+Alt+Del

来自:smilboy, 时间:2001-9-9 0:21:00, ID:617046

能不能用汇编完全锁死键盘呢?

请讨论:给出汇编代码,成功后我给200分

来自:forss, 时间:2001-9-13 13:16:00, ID:623708

用汇编锁键盘很简单,

procedure Tmainform.Lockkey(lock: boolean);

begin

if lock = true then

begin

asm  //封锁20端口 锁定键盘 98&95

IN AL,21H

OR AL,02H

OUT 21H,AL

end;

end

else

begin

asm   //解锁20端口 解锁键盘

IN AL,21H

AND AL,0FDH

OUT 21H,AL

end;

end;

end;

来自:iamfly, 时间:2001-9-13 13:22:00, ID:623725

这段汇编在2000下能用吗?我怀疑:)

来自:forss, 时间:2001-9-13 13:29:00, ID:623735

当然不行,,写的很清楚啦。。。:)

来自:iamfly, 时间:2001-9-13 13:36:00, ID:623750

既然不行,在98下不用汇编也能做到吗:)

现在XAN就是想知道在2000下怎么做^_^

我也曾经尝试过,最后就是没下文。。。

来自:atorm, 时间:2001-9-20 19:41:00, ID:636154

1、运行注册表编辑器。

2、打开HKEY_CURRENT_USER\Software\Microsoft\windows\CurrentVersion\Policies\Explorer子键,

新建一个名为NoWinKeys的双字节值,数值为1。

来自:guoyan, 时间:2001-9-22 10:47:00, ID:639083

to atorm :

您的方法管用吗?

来自:softdog, 时间:2001-9-22 11:08:00, ID:639101

2000下允许截获CTRL+ALT+DEL组合吗?

来自:xan, 时间:2001-9-23 13:00:00, ID:640476

我的本意是不想让别人结束我的程序,如果能把进程隐藏掉也行,

比如我做一个收费系统的客户端.拜托各位给我想想办法.

来自:fanren945, 时间:2001-9-23 13:18:00, ID:640489

[:)][center][/center]关注

来自:mikedeakins, 时间:2001-9-23 15:39:00, ID:640617

做成 windows service,你的收费系统总是要运行在 user 权限上吧?这个权限不能

进行服务管理。

如果你觉得麻烦,可以简化 service,判断你的程序被结束了就重新加载那个程序。

来自:xan, 时间:2001-9-28 9:47:00, ID:649203

我得意思是 在每台客户机上安装一客户端软件,每次开机,程序自动运行,连接到服

务器上,这样当然是不允许他关闭我得程序,目的能达到不能关闭就行,屏蔽系统键是一

个办法,隐藏进程好像是一个更好的办法。

如果不能屏蔽系统键,那么隐藏进程有没有好的方法呢?我知道在98下是可以的,调用一个

api函数即可,但2000下此函数不支持,不知道还有没有别的函数?请高手不吝赐教!!!

我见过一个程序,在任务管理器中根本看不到它,就是不知道他是怎么实现的!

来自:zeroworld, 时间:2001-9-28 10:32:00, ID:649284

不用想了,win2K下肯定是不能屏蔽Ctrl+alt+del的,这是为了2K的安全性考虑的

进程也是不能屏蔽掉的,只要是进程在win2K的任务管理器中都是能看到的

最好的方法是用线程,将dll的线程导入win2K常用的程序中,比如rundll32调用这个dll函数

这样在任务管理器中看到的就是rundll32这个进程了,一般人不会注意,当然这个只是简单的

隐藏,比较低级吧,高级一点的是用函数转发。将win2K常用的dll替换成你的。例如shell32.dll

等等的,将原来的shell32.dll改名为shell32x.dll等,然后判断win2K的请求

来自:smilboy, 时间:2001-9-28 11:53:00, ID:649488

如果是隐藏进程可以把你的程序绑定到Explorer.exe这样他就没办法关闭你的程序了

如何绑定?请查阅黑客网站或者这里

http://jingtao.delphibbs.com 他有一个二合一的工具,你还可以和他要该程序的Delphi的

原文件[:)]

来自:flier, 时间:2001-9-29 4:18:00, ID:650659

以上面这些方法在Win2K下根本不可能完全屏蔽Ctrl+Alt+Del,

因为这三个键以及其他几个热键的处理,是独立于键盘队列的

以我目前所知,唯一一种用户模式编程实现的可行方法就是

编写GINA DLL,至于怎么写,你如果自认为水平足够,直接去看MSDN

好了,如果没把握最好别自找麻烦,否则就要重装系统了 :)

来自:zw84611, 时间:2001-9-30 13:45:00, ID:652754

到www.vckbase.com去看看。

WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL

作者:ac952_z_cn

前言

在WINDOWS 9X环境中我们可以使用SystemParametersInfo (SPI_SCREENSAVERRUNNING, 1,NULL, 0);来屏蔽CTRL+ALT+DEL,但在NT/2000环境下却行不通,即使使用WH_KEYBOARD_LL这个低级的键盘hook也无法拦截!笔者通过替换GINA DLL的方式很好地实现了在NT/2000下屏蔽CTRL+ALT+DEL的功能。

下载源代码 6K

一、原理

在NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL实现的,GINA DLL提供了一个交互式的界面为用户登陆提供认证请求。在WinLogon初始化时,就向系统注册截获CTRL+ALT+DEL消息,所以其他程序就无法得到CTRL+ALT+DEL的消息。

WinLogon会和GINA DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。微软同时也为我们提供的接口,自己

可以编GINA DLL来代替MSGINA.DLL。

WinLogon初始化时会创建3个桌面:

(1)、winlogon桌面:主要显示window 安全等界面,如你按下CTRL+ALT+DEL,登陆的界面等

(2)、应用程序桌面:我们平时见到的那个有我的电脑的界面

(3)、屏幕保护桌面:屏幕保护显示界面。

在用户登陆以后,按下CTRL+ALT+DEL键的时候,WinLogon回调用GINA DLL的输出函数:WlxLoggedOnSAS,

这时正处于winlogon桌面,我们只要直接将他转向应用程序桌面,系统就不会显示Windows安全那个界面,换一种说法

也就是用户按下CTRL+ALT+DEL后,不会起什么作用。当是我们在切换桌面的时候会出现屏幕闪动!

二、程序实现

GINA DLL要输出下列函数(winlogon会调用)

WlxActivateUserShell

WlxDisplayLockedNotice

WlxDisplaySASNotice

WlxDisplayStatusMessage

WlxGetStatusMessage

WlxInitialize

WlxIsLockOk

WlxIsLogoffOk

WlxLoggedOnSAS

WlxLoggedOutSAS

WlxLogoff

WlxNegotiate

WlxNetworkProviderLoad

WlxRemoveStatusMessage

WlxScreenSaverNotify

WlxShutdown

WlxStartApplication

WlxWkstaLockedSAS

为了简化编程,我们从MSGINA.DLL中动态获取上诉函数,在自定义的DLL中(以下称为NoReboot.DLL)中直接调用MSGINA.DLL

的函数即可。现在我们要处理的就是WlxLoggedOnSAS函数:

int WINAPI WlxLoggedOnSAS (

PVOID pWlxContext,

DWORD dwSasType,

PVOID pReserved)

{

HANDLE hMutex;

WriteInfo("WlxLoggedOnSAS \r\n"); //用于记录信息

if (dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL){ //屏蔽CTRL_ALT_DEL,也可以根据特定条件来决定是否要屏蔽

//我采用了Mutex来控制是否屏蔽,(注意:要用unicode)

hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"_ac952_z_cn_CTRL_ALT_DEL");

if (hMutex){

CloseHandle(hMutex);

WriteInfo("disble CTRL+ALT+DEL \r\n");

return WLX_SAS_ACTION_NONE; //将屏幕切换到应用程序桌面,屏蔽掉CTRL+ALT+DEL

}

else

WriteInfo("not disble CTRL+ALT+DEL \r\n");

}

return prcWlxLoggedOnSAS ( //这是我从MSGINA.DLL中获取的函数。

pWlxContext,

dwSasType,

pReserved);

}

我们要在自己的程序中调用hMutex = CreateMutex(NULL, FALSE, "_ac952_z_cn_CTRL_ALT_DEL");就可屏蔽CTRL+ALT+DEL。

三、安装和注意事项:

在编写GIAN DLL中要注意,GINA DLL使用的是unicode。

GINA DLL的安装:

键名 : \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

变量名 : GinaDLL

变量类型 : [REG_SZ]

内容 : "你的GINA DLL的名称" 如:"NoReboot.DLL:

将你的GINA DLL(NoReboot.dll)拷贝到系统目录下(system32),重启机器,你的GINA DLL(NoReboot.dll)就会运行。

如果出现进不了你的系统,那你进入DOS后,将msgina.dll拷贝成你的GINA DLL(NoReboot.dll)就可进入了,或者进入

安全模式,删除掉那个键值。

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 在Windows2000中拦截Ctrl+Alt+Del

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00205