Win7 修改Winlogon.exe进程代码
2014-05-07 16:27
246 查看
首先要说的我用的方法不一定是最好的,但是可能是最简单的,并且是可恢复的一种方法,程序向winlogon.exe进程具体位置写入一个字节,屏蔽了Win+L。当然Ctrl+Alt+Del、Ctrl+Shift+Esc、Win+P等等都可以屏蔽,前提是你知道原理
原理不多说了,不明白的直接看http://bbs.pediy.com/showthread.php?t=159346
该程序演示了在Win7如何禁止快捷键,程序中有一处硬编码,但估计win7都差不多,如果不行的话请大家按照自己的真实情况修改相应偏移,反正我是测试成功了。
贴张屏蔽Win+L演示程序截图
演示程序是64位,由于没32位 win7系统做测试,所有不知道具体偏移
。
发一下具体代码,Win+L的ID为5、Ctrl+Shift+Esc的ID为4、Ctrl+Alt+Del的ID为0
代码:
本演示程序只有64位,请务必在win7 64位运行,32位的想必也差不多
原理不多说了,不明白的直接看http://bbs.pediy.com/showthread.php?t=159346
该程序演示了在Win7如何禁止快捷键,程序中有一处硬编码,但估计win7都差不多,如果不行的话请大家按照自己的真实情况修改相应偏移,反正我是测试成功了。
贴张屏蔽Win+L演示程序截图
演示程序是64位,由于没32位 win7系统做测试,所有不知道具体偏移
。
发一下具体代码,Win+L的ID为5、Ctrl+Shift+Esc的ID为4、Ctrl+Alt+Del的ID为0
代码:
/* 由进程名获取PID */ DWORD GetPidByProcessName(LPCTSTR pszName) { PROCESSENTRY32 pe32; HANDLE hSnapshot; hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot == INVALID_HANDLE_VALUE) return -1; pe32.dwSize = sizeof(PROCESSENTRY32); if( !Process32First( hSnapshot, &pe32 ) ) { CloseHandle(hSnapshot); return -1; } do { if(lstrcmpi(pe32.szExeFile, pszName) == 0) { CloseHandle(hSnapshot); return pe32.th32ProcessID; } } while ( Process32Next(hSnapshot, &pe32) ); CloseHandle(hSnapshot); return -1; } /* 禁止Win+L热键,参数bDisable表示是否禁止 */ BOOL DisableHotKey(BOOL bDisable) { UCHAR uchOrigCode[] = {0x05}; UCHAR uchHookCode[] = {0x25}; UCHAR uchReadCode[] = {0x00}; LPVOID lpReadAddress; DWORD dwPID; HANDLE hProcess; HMODULE lphModule[512]; DWORD_PTR dwReturn; DWORD dwOldProtect; INT i; //查找winlogon.exe进程PID if(!(dwPID = GetPidByProcessName(_T("winlogon.exe")))) return FALSE; //打开进程 if(!(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID))) return FALSE; //枚举进程模块 if(!EnumProcessModules(hProcess, lphModule, sizeof(lphModule), (LPDWORD)&dwReturn)) { CloseHandle(hProcess); return FALSE; } //进程加载基址加上偏移 lpReadAddress = (LPVOID)((LPSTR)lphModule[0] + 0x1710D); if(bDisable) { //读取原地址字节 if(!ReadProcessMemory(hProcess, lpReadAddress, uchReadCode, sizeof(uchReadCode), &dwReturn)) { CloseHandle(hProcess); return FALSE; } //判断是否是要修改的字节 for(i=0; i<sizeof(uchReadCode)/sizeof(UCHAR); i++) { if(uchReadCode[i] != uchOrigCode[i]) { CloseHandle(hProcess); return FALSE; } } //将Win+L的ID从5改成25 VirtualProtectEx(hProcess, lpReadAddress, sizeof(uchHookCode), PAGE_EXECUTE_WRITECOPY, &dwOldProtect); WriteProcessMemory(hProcess, lpReadAddress, uchHookCode, sizeof(uchHookCode), &dwReturn); VirtualProtectEx(hProcess, lpReadAddress, sizeof(uchHookCode), dwOldProtect, &dwOldProtect); } else { //读取原地址字节 if(!ReadProcessMemory(hProcess, lpReadAddress, uchReadCode, sizeof(uchReadCode), &dwReturn)) { CloseHandle(hProcess); return FALSE; } //判断是否是要修改的字节 for(i=0; i<sizeof(uchReadCode)/sizeof(UCHAR); i++) { if(uchReadCode[i] != uchHookCode[i]) { CloseHandle(hProcess); return FALSE; } } //恢复 VirtualProtectEx(hProcess, lpReadAddress, sizeof(uchOrigCode), PAGE_EXECUTE_WRITECOPY, &dwOldProtect); WriteProcessMemory(hProcess, lpReadAddress, uchOrigCode, sizeof(uchOrigCode), &dwReturn); VirtualProtectEx(hProcess, lpReadAddress, sizeof(uchOrigCode), dwOldProtect, &dwOldProtect); } CloseHandle(hProcess); return TRUE; }
本演示程序只有64位,请务必在win7 64位运行,32位的想必也差不多
相关文章推荐
- Win7 修改Winlogon.exe进程代码
- 自动附加到计算机“EASON”上的进程“[2096] aspnet_wp.exe”失败。错误代码为 0x8013134b。
- Ring3下无驱动移除winlogon.exe进程ctrl+alt+del,win+u,win+l三个系统热键,非屏蔽热键
- 动态修改其它进程的代码,实现DLL注入
- win7 上面 gcc 编译的程序 a.exe 运行的时候报错 a.exe 已停止工作, 异常代码:c0000005
- 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法,有人在暴力破解
- win7 修改winlogon内存 禁用Ctrl+Alt+Delete
- 动态修改其它进程的代码实现DLL注入
- 无耻的盗号木马WINLOGON.EXE(全大写,小写的那个一般是核心进程)
- 修改活动进程链来隐藏进程代码
- 在win7里 修改注册表 让excel独占进程
- 动态修改其它进程的代码,实现DLL注入
- win7下用PyInstaller把Python代码打包成exe文件
- win7下修改注册表问题 模块"jscript.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005 我是WIN7
- win7进程中的svchost.exe占用CPU和内存很高的原因和解决窍门
- 无耻的盗号木马WINLOGON.EXE(全大写,小写的那个一般是核心进程)
- 注入Winlogon进程示例代码 - [编程学习]
- win7下修改注册表问题 模块"jscript.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005 我是WIN7
- 远程进程注入 - 把自己的代码注入explorer.exe
- 用c++编写一段完整代码,要求判断一个进程(例如qq.exe)是否存在,若存在,输出存在,不存在就输出不存在。