S SuKiDelphi Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-06 #1 如何在win2000/NT/XP中屏蔽ctrl+alt+del,全部分送上,app2001请进来
L linfinder Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-06 #3 也谈在Windows2000下屏蔽Ctrl-Alt-Del键 概述:本文通过应用DLL注入,函数替换(HOOK API)等技术达到了在Windows2000下不修改注册表,不重新启动的情况下屏蔽了Ctrl-Alt-Del键 有幸拜读了《程序员》杂志2001年11期上的陆其明先生的《Win2K/NT下屏蔽Ctrl+Alt+Del的响应》,通过这篇文章的启发,我完成了一个可以在应用程序需要屏蔽Ctrl-Alt-Del的时候就屏蔽,不需要屏蔽的时候就取消的方法,不用需要书写一个额外的gina.dll文件,也不需要重新启动系统和修改注册表。 该方法的基本原理是通过HOOK winlogon.exe所使用的gina.dll中的WlxLoggedOnSAS函数,大家通过《Win2K/NT下屏蔽Ctrl+Alt+Del的响应》这篇文章都知道,当按下Ctrl-Alt-Del键时,WinLogon.exe就会调用msgina.dll中的函数WlxLoggedOnSAS来进行验证,此时如果我们能够修改这个函数的返回值,我们也就可以使Windows不进入Logon窗口了。 可是,我们应该怎样做才可以修改WlxLoggedOnSAS函数的返回值?对比大量论坛上讨论的屏幕取词等等技术,我们不难看到答案,使用函数替换(HookAPI)技术,修改WlxLoggedOnSAS函数的入口地址就可以做到这一点,我们只要自己完成一个WlxLoggedOnSAS的替换函数就可以了,在替换函数里,我们返回我们需要的值就达到了修改函数返回值的效果,进而就达到了屏蔽Ctrl-Alt-Del键的目的。 通过上面的讨论,在这个方法中我们至少需要使用到如下的技术:DLL注入,函数替换(Hook API)。为了配合理解本文提供完整的能够运行的Delphi代码,在Windows2000+Delphi5下通过,可以在CSDN相关栏目中进行下载。 DLL注入 所谓的DLL注入是指将DLL文件加载到其他的进程空间中。目前,常用的方法有使用钩子(SetWindowsHook),使用创建远程线程(CreateRemoteThread),以及切换线程执行上下文(SuspendThread,GetThreadContext,SetThreadContext,ResumeThread)等等方法。本文使用的是创建远程线程的方法。 函数替换(HOOK API) 关于这种技术的讨论,网上也同样有大量的论述,在这里我只是讲述我所使用的方法。
也谈在Windows2000下屏蔽Ctrl-Alt-Del键 概述:本文通过应用DLL注入,函数替换(HOOK API)等技术达到了在Windows2000下不修改注册表,不重新启动的情况下屏蔽了Ctrl-Alt-Del键 有幸拜读了《程序员》杂志2001年11期上的陆其明先生的《Win2K/NT下屏蔽Ctrl+Alt+Del的响应》,通过这篇文章的启发,我完成了一个可以在应用程序需要屏蔽Ctrl-Alt-Del的时候就屏蔽,不需要屏蔽的时候就取消的方法,不用需要书写一个额外的gina.dll文件,也不需要重新启动系统和修改注册表。 该方法的基本原理是通过HOOK winlogon.exe所使用的gina.dll中的WlxLoggedOnSAS函数,大家通过《Win2K/NT下屏蔽Ctrl+Alt+Del的响应》这篇文章都知道,当按下Ctrl-Alt-Del键时,WinLogon.exe就会调用msgina.dll中的函数WlxLoggedOnSAS来进行验证,此时如果我们能够修改这个函数的返回值,我们也就可以使Windows不进入Logon窗口了。 可是,我们应该怎样做才可以修改WlxLoggedOnSAS函数的返回值?对比大量论坛上讨论的屏幕取词等等技术,我们不难看到答案,使用函数替换(HookAPI)技术,修改WlxLoggedOnSAS函数的入口地址就可以做到这一点,我们只要自己完成一个WlxLoggedOnSAS的替换函数就可以了,在替换函数里,我们返回我们需要的值就达到了修改函数返回值的效果,进而就达到了屏蔽Ctrl-Alt-Del键的目的。 通过上面的讨论,在这个方法中我们至少需要使用到如下的技术:DLL注入,函数替换(Hook API)。为了配合理解本文提供完整的能够运行的Delphi代码,在Windows2000+Delphi5下通过,可以在CSDN相关栏目中进行下载。 DLL注入 所谓的DLL注入是指将DLL文件加载到其他的进程空间中。目前,常用的方法有使用钩子(SetWindowsHook),使用创建远程线程(CreateRemoteThread),以及切换线程执行上下文(SuspendThread,GetThreadContext,SetThreadContext,ResumeThread)等等方法。本文使用的是创建远程线程的方法。 函数替换(HOOK API) 关于这种技术的讨论,网上也同样有大量的论述,在这里我只是讲述我所使用的方法。
L linfinder Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-07 #5 http://www.vckbase.com/document/viewdoc/?id=242
L linfinder Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-07 #7 就是自己 编一个GINA DLL来替换MSGINA.DLL。自己的GINA DLL需要有下列函数: WlxActivateUserShell WlxDisplayLockedNotice WlxDisplaySASNotice WlxDisplayStatusMessage WlxGetStatusMessage WlxInitialize WlxIsLockOk WlxIsLogoffOk WlxLoggedOnSAS WlxLoggedOutSAS WlxLogoff WlxNegotiate WlxNetworkProviderLoad WlxRemoveStatusMessage WlxScreenSaverNotify WlxShutdown WlxStartApplication WlxWkstaLockedSAS 因为这些函数winlogon会调用 你只要在WlxLoggedOnSAS函数中做不处理,其他函数则直接调用MSGINA.DLL里的就可以了。 这个是C++的代码: http://www.vckbase.com/document/journal/vckbase11/src/noreboot.zip
就是自己 编一个GINA DLL来替换MSGINA.DLL。自己的GINA DLL需要有下列函数: WlxActivateUserShell WlxDisplayLockedNotice WlxDisplaySASNotice WlxDisplayStatusMessage WlxGetStatusMessage WlxInitialize WlxIsLockOk WlxIsLogoffOk WlxLoggedOnSAS WlxLoggedOutSAS WlxLogoff WlxNegotiate WlxNetworkProviderLoad WlxRemoveStatusMessage WlxScreenSaverNotify WlxShutdown WlxStartApplication WlxWkstaLockedSAS 因为这些函数winlogon会调用 你只要在WlxLoggedOnSAS函数中做不处理,其他函数则直接调用MSGINA.DLL里的就可以了。 这个是C++的代码: http://www.vckbase.com/document/journal/vckbase11/src/noreboot.zip
4 41426277 Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-08 #9 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3355802
K koalaone Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-08 #10 用钩子写的,我写过,其他方法在win2000下是不行的
B boy2002cn Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-10 #12 www.tomore.com上有昨天我还下了,有2个
G guth Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-12 #14 var tmp:integer; begin tmp:=0; SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@tmp,0); //屏蔽Ctrl+Alt+Del end; 如果需要恢复:SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@tmp,0); 如果屏蔽其他系统按键,修改第一个参数。
var tmp:integer; begin tmp:=0; SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@tmp,0); //屏蔽Ctrl+Alt+Del end; 如果需要恢复:SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@tmp,0); 如果屏蔽其他系统按键,修改第一个参数。
S SuKiDelphi Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-24 #15 请你看清,我要的是在XP下实现的,你的API只能适用于 WIN98-ME!!
W wenyian0928 Unregistered / Unconfirmed GUEST, unregistred user! 2006-03-25 #16 linfinder说的有道理。 完成你的需求,你需要了解两个知识: 1、远程注入 2、APIHOOK 实现的方法和linfinder说的差不多,你首先得远程注入到winlogon.exe中; 然后APIHOOK:gina.dll中的WlxLoggedOnSAS函数。 就可以了。 这样的资料网山很多,去找找吧。
linfinder说的有道理。 完成你的需求,你需要了解两个知识: 1、远程注入 2、APIHOOK 实现的方法和linfinder说的差不多,你首先得远程注入到winlogon.exe中; 然后APIHOOK:gina.dll中的WlxLoggedOnSAS函数。 就可以了。 这样的资料网山很多,去找找吧。
L lovellybaby Unregistered / Unconfirmed GUEST, unregistred user! 2006-04-11 #18 键盘Hook,我以前写了屏蔽系统热健的软件是给游戏用的。有源码