禁用Ctrl+Alt+Del最有效的方法
Ctrl+Alt+Del可以打开任务管理器(Ctrl+Shift+Esc也可以)。如何禁用这个热键,网上有很多方法:
通过注册表禁用,网上大多数用此方法,打开任务管理器就会提示被禁用;监视窗口或进程,一发现就Kill掉;键盘Hook(任务管理器出来后,才能检测到组合键;其实没用…);Open Environ$(“WinDir”)&"\system32\taskmgr.exe" ForBinary As #1(占用了文件,自然打不开)Ctrl+Alt+Del由winlogon管的,直接杀死winlogon!(XP系统蓝屏…)在Win7/Win10下winlogon杀死后不会蓝屏,Ctrl+Alt+Del也可以成功屏蔽,不过桌面会空空如也(Explorer死了?!) 以上的方法,在实际操作中,都是不能用的!下面介绍一个确实有用的方法: 在WIN7/WIN10环境下,采用挂起winlogon.exe的方法,实际测试确实可行!操作步骤如下: Step1:进程提权(不然OpenProcess返回0); SetPrivilege(); Step2:OpenProcess, LoadNtDllFun(); Step3:挂起NtSuspendProcess,要恢复就用NtResumeProcess。 SuspendProcess(); Step4:退出恢复系统,NtResumeProcess。 ResumeProcess(); UnloadNtDllFun();
一。进程提权,代码如下:
int SetPrivilege(void)//进程提权
{
HANDLE token_handle;
//打开访问令牌
if (!OpenProcessToken(GetCurrentProcess(), //要修改权限的进程句柄
TOKEN_ALL_ACCESS, //要对令牌进行何种操作
&token_handle //访问令牌
))
{
printf("openProcessToken error");
return -1;
}
LUID luid;
if (!LookupPrivilegeValue(NULL, //查看的系统,本地为NULL
SE_DEBUG_NAME, //要查看的特权名称
&luid //用来接收标识符
))
{
printf("lookupPrivilegevalue error");
return -2;
}
TOKEN_PRIVILEGES tkp;
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = luid;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//调整访问令牌权限
if (!AdjustTokenPrivileges(token_handle, //令牌句柄
FALSE, //是否禁用权限
&tkp, //新的特权的权限信息
sizeof(tkp), //特权信息大小
NULL, //用来接收特权信息当前状态的buffer
NULL //缓冲区大小
))
{
printf("adjust error");
return -3;
}
printf("sucessful");
return 0;
}
二。 OpenProcess 获取winlogon.exe的句柄的代码如下:
`#include
#include
#include
#include
using std::cout;
using std::endl;\
const LPCTSTR lpszProcessName = _T("winlogon.exe");
HANDLE hDesProcess = NULL;
//根据进程的名字(image name)来查找该进程是否是打开的
bool FindProcess(LPCTSTR lpszProcessName)
{
DWORD dwProcessIdentify[MAX_PATH] = { 0 };
DWORD dwTrueBytes = 0;
HANDLE hProcess = NULL;
if (!EnumProcesses(dwProcessIdentify, MAX_PATH * sizeof(DWORD), &dwTrueBytes))
{
cout |