Ring3下无驱动移除winlogon.exe进程ctrl+alt+del,win+u,win+l三个系统热键,非屏蔽热键(子类化SAS 窗口)
随手而作,纯粹技术研究,没什么实际意义。
打开xuetr,正常情况下.winlogon.exe注册了三个热键。
ctrl+alt+del,win+u,win+l三个。
这三个键用SetWindowsHookEx()函数,使用键盘钩子也屏蔽不了。

我们先把UnregisterSystemHotKey.dll解压出来,放到任意目录.
比如E盘根目录,就运行
- rundll32 E:\UnregisterSystemHotKey.dll,Hook
再打开xuetr看下,Winlogo.exe进程注册的热键都没有了.

- #include <windows.h>
- #include <process.h>
- #include <tchar.h>
- #include <stdio.h>
- #include <shlwapi.h>
- #include <psapi.h>
- #pragma comment(lib, "psapi.lib")
- #pragma comment(lib, "shlwapi.lib")
- TCHAR ModuleFile[MAX_PATH];
- TCHAR szText[128] = {0};
- WNDPROC OldWindowProc;
- HWND hWinLogon;
- HMODULE hDll;
- LRESULT CALLBACK NewWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- if (message == WM_NULL)
- {
- ::UnregisterHotKey(hWnd, 0); //Ctrl+Alt+delete
- ::UnregisterHotKey(hWnd, 4); //Ctrl+Shift+Esc
- ::UnregisterHotKey(hWnd, 5); //Win+L
- ::UnregisterHotKey(hWnd, 6); //Win+U
- ::SetWindowLongPtr(hWnd, GWL_WNDPROC, (LONG)OldWindowProc);
- return 1;
- }
- return CallWindowProc(OldWindowProc, hWnd, message, wParam, lParam);
- }
- BOOL WINAPI EnablePrivileges()
- {
- HANDLE hToken;
- TOKEN_PRIVILEGES tkp;
- if (!OpenProcessToken(GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
- return( FALSE );
- LookupPrivilegeValue(NULL, SE_DEBUG_NAME,
- &tkp.Privileges[0].Luid);
- tkp.PrivilegeCount = 1;
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
- (PTOKEN_PRIVILEGES)NULL, 0);
- if (GetLastError() != ERROR_SUCCESS)
- return FALSE;
- return TRUE;
- }
- BOOL CALLBACK lpEnumWindowsProc(HWND hwnd, LPARAM lParam)
- {
- if (IsWindow(hwnd))
- {
- ::GetWindowText(hwnd, szText, _countof(szText));
- if (!_tcscmp(szText, TEXT("SAS window")))
- {
- hWinLogon = hwnd;
- OldWindowProc = (WNDPROC)::SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG)NewWindowProc);
- PostMessage(hwnd, WM_NULL, 0, 0);
- return FALSE;
- }
- }
- return TRUE;
- }
- UINT _stdcall FreeSelfProc(void *Arg)
- {
- FreeLibraryAndExitThread(hDll, 0);
- return 1;
- }
- BOOL WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved)
- {
- switch ( nReason )
- {
- case DLL_PROCESS_ATTACH:
- hDll = hDllHandle;
- GetModuleFileName(NULL, ModuleFile, _countof(ModuleFile));
- EnablePrivileges();
- if (StrStrI(ModuleFile, TEXT("winlogon.exe")))
- {
- HANDLE hThread;
- UINT ThreadId;
- HDESK hWinLogon = OpenDesktop(TEXT("Winlogon"), 0, FALSE, GENERIC_ALL);
- ::EnumDesktopWindows(hWinLogon, lpEnumWindowsProc, NULL);
- CloseDesktop(hWinLogon);
- hThread = (HANDLE)_beginthreadex(NULL, NULL, &FreeSelfProc, 0, 0, &ThreadId);
- WaitForSingleObject(hThread, INFINITE);
- CloseHandle(hThread);
- }
- else
- {
- DWORD dwProcessId = 0;
- HANDLE hProcess = 0;
- DWORD ProcessList[512], cbNeeded, cProcess;
- TCHAR szFileName[256];
- EnumProcesses(ProcessList, sizeof(ProcessList), &cbNeeded);
- cProcess = cbNeeded/sizeof(DWORD);
- for (UINT i=0; i<cProcess; i++)
- {
- if (ProcessList[i] != 0)
- {
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessList[i]);
- if (hProcess)
- {
- GetModuleBaseName(hProcess, NULL, szFileName, _countof(szFileName));
- if (!_tcsicmp(szFileName, TEXT("winlogon.exe")))
- {
- dwProcessId = ProcessList[i];
- break;
- }
- }
- }
- }
- if (dwProcessId)
- {
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
- }
- if (!hProcess)
- {
- return 0;
- }
- LPVOID Param = VirtualAllocEx(hProcess, 0, 512, MEM_COMMIT, PAGE_READWRITE);
- if (!Param)
- {
- MessageBox(NULL, TEXT("申请内存失败"), TEXT("申请内存失败"), MB_ICONWARNING);
- return 0;
- }
- GetModuleFileName(hDllHandle, ModuleFile, _countof(ModuleFile));
- if (!WriteProcessMemory(hProcess, Param, (LPVOID)ModuleFile, 256, NULL))
- {
- MessageBox(NULL, TEXT("写入内存失败"), TEXT("写入内存失败"), MB_ICONWARNING);
- return 0;
- }
- HANDLE hThread = CreateRemoteThread(hProcess,
- NULL,
- NULL,
- (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"),
- Param,
- NULL,
- NULL);
- if (hThread)
- {
- WaitForSingleObject(hThread, INFINITE);
- }
- else
- {
- TCHAR sztmp[1024];
- _stprintf_s(sztmp, _countof(sztmp), TEXT("创建远程线程失败, 错误代码:%d, dll=%s"), GetLastError(), ModuleFile);
- MessageBox(NULL, sztmp, TEXT("创建远程线程失败"), MB_ICONWARNING);
- return 0;
- }
- VirtualFreeEx(hProcess, Param , 0, MEM_RELEASE);
- CloseHandle(hThread);
- CloseHandle(hProcess);
- }
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- case DLL_PROCESS_DETACH:
- ::SetWindowLongPtr(hWinLogon, GWL_WNDPROC, (LONG)OldWindowProc);
- break;
- default:
- break;
- }
- return 1;
- }
- EXTERN_C __declspec(dllexport) int Hook(void)
- {
- return 1;
- }
http://blog.csdn.net/zwfgdlc/article/details/6609591
我仔细看了看,突然想到。这不是传说很久的SAS子类化吗?居然忘记了
http://topic.csdn.net/u/20090402/11/d3e27441-cfcc-45d8-a0b2-1164fc3dd777.html
Ring3下无驱动移除winlogon.exe进程ctrl+alt+del,win+u,win+l三个系统热键,非屏蔽热键(子类化SAS 窗口)的更多相关文章
- 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法,有人在暴力破解
关于csrss.exe和winlogon.exe进程多.占用CPU高的解决办法 最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要好半天才反映过来,看到任务管理器有多个 ...
- 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法
原地址 http://blog.sina.com.cn/s/blog_912e77480101nuif.html 最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要 ...
- win7下禁用ctrl alt del +上下左右键
1.控制面板 2.屏幕分辨率 3.高级设置 4.英特尔图形和媒体控制面板 5.图形属性 6.选项和支持 7.快捷键管理器 8.去掉启动前的勾
- Mac下通过远程桌面向Windows发送Ctrl+Alt+Delete
今天在Mac中通过远程桌面给Windows安装Git Extensions,在安装程序自动关闭资源管理器时,Windows无响应,桌面显示黑屏.于是,想通过Ctrl+Alt+Delete快捷键调出对话 ...
- Ring3下干净的强行删除文件
在某公司实习完,再次回到寝室.还是在学校好. 实习期间的给我的任务就是为项目添加一个强行删除的模块. 背景是硬盘上存储空间不够时,需要删掉老的文件,如果这时后,老的文件被打开了,没有关掉,就无法删除. ...
- 树莓派3b无驱动打印
Linux系统下很少有对打印机做驱动支持,自己做起来又有非常麻烦,还好大多数打印机都能够支持escpos协议,因此我们可以做到无驱动打印. 1.安装python-usb库 git clone http ...
- winlogon.exe应用程序错误怎么办
winlogon.exe应用程序错误 求解决办法,重装,还原一定能解决就不要说了,我要其他办法 最佳答案 winlogon.exe 是控制你的系统登陆的程序,是系统绝对核心进程,用来管理系统用户登陆! ...
- Ubuntu16.04下nvidia驱动+nvidia-docker+cuda9+cudnn7安装
一.宿主机安装nvidia驱动 打开终端,先删除旧的驱动: sudo apt-get purge nvidia* 禁用自带的 nouveau nvidia驱动 sudo gedit /etc/modp ...
- Linux的.a、.so和.o文件 对比 window下的dll,lib,exe文件
连续几天终于将一个又一个问题解决了,这里说其中一个问题 描述问题:使用多线程pthread的时候,(我用的IDE,CODEBOLCKS)编译后发现直接弹出窗口,程序还没有被Build..巴拉巴拉,然后 ...
随机推荐
- Centos Apache和tomcat集成配置,同一时候支持PHP和JAVA执行
近期因为项目的须要,须要再原来执行Tomcatserver上支持PHP执行.非常显然,PHP执行使用的是Apacheserver.尽管Tomcat也属于Apache,可是并没有现有的环境,须要我们自己 ...
- WM_NOTIFY消息流程实例分析
我们以CListCtrl控件为例来分析WM_NOTIFY消息. CListCtrl控件在Report样式下会包含CHeaderCtrl标头控件,即CHeaderCtrl标头控件为CListCtrl控件 ...
- yii2框架学习一 yii安装与常见问题
1 安装安装有两种 cpmposer 喝归档文件 安装 这里采用的归档文件安装 归档文件安装分为两种 基础末班和高级模板,这里采用高级模板 在官网或者yii-china 下载归档文件 解 ...
- Android app设置全屏模式
Android中,为APP设置全屏模式,主要有如下几种方式: 在manifest中设置 在项目中找到AndroidManifest.xml配置文件,找到Activity所在的节点,添加theme. & ...
- TCP 报文段结构
源端口.目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信.源端口.目标端口是用 ...
- 向西项目管理工具Git一片
前言 Git 这个词相信大家并不陌生,做开发的童鞋们每天都离不开它.当然,假设你的项目中没实用到分布式,那么,你可能从未用过 Git,当然也可能没听过.只是,这不是重点,重点是这一篇文章,我们将一起谈 ...
- 【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理
一.undo空间原理: dml操作会产生undo数据. update时,sever process 会在databuffer 中找到该记录的buffer块,没有就从datafile中找并读入data ...
- WPF 圆形Loading
原文:WPF 圆形Loading 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a771948524/article/details/9271933 ...
- WPF里的一些Effect特效
原文:WPF里的一些Effect特效 Blend的特效都在Microsoft.Expression.Media.Effects里,用之前添加一下引用. 可以在前台选中对象后直接点击Effect新建一种 ...
- Html 空格与换行
空格 换行 <br/> 调行距 <div style="line-height:10px"></div>