Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出。
该进程的正常路径应是 C:\Windows\System32 且是以 SYSTEM 用户运行.我们都知道操作系统都是基于权限,而权限都是基于用户的,而这个winlogon进程就是管理用户登入登出,是不可以被结束的。winlogon是一个父进程,大多数的进程都是winlogon的子进程,如MDM.EXE、SVCHOST.EXE、ALG.EXE等等重要的进程,换句话说没有winlogon哪来正常的操作系统,怎么能启动系统。
为了监控winlogon进程中没有病毒,需要插入dll 进行安检。
dll编写就不再浪费时间,
下面我们重点实现如何插入dll.
#include "stdafx.h" #ifdef _MANAGED #pragma managed(push, off) #endif EXTERN_C __declspec(dllexport) void install(); EXTERN_C __declspec(dllexport) void uninstall(); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } #ifdef _MANAGED #pragma managed(pop) #endif void install() { HANDLE hToken; // handle to process token TOKEN_PRIVILEGES tkp; // pointer to token structure OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); HKEY hkey; BYTE value_[MAX_PATH*2]; char *run="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\Notify\\winsvr";//启动项 HANDLE cf; RegDeleteKey(HKEY_LOCAL_MACHINE,run);//先删除 RegCreateKey(HKEY_LOCAL_MACHINE,run, &hkey); //自启动 if (!hkey)//失败 { return; } strcpy((char*)&value_,"c:\\dll.dll");//dll路径 RegSetValueEx(hkey,"DLLName",0,REG_EXPAND_SZ,(PBYTE)&value_,strlen((char*)&value_)); strcpy((char*)&value_,"exe");//导出函数名 RegSetValueEx(hkey,"Logon",0,REG_SZ,(PBYTE)&value_,strlen((char*)&value_)); //让winlogon异步处理我们的程序,避免卡在那。 DWORD dw=1; RegSetValueEx(hkey,"Asynchronous",0,REG_DWORD,(PBYTE)&dw,sizeof(dw)); } void uninstall() { HANDLE hToken; // handle to process token TOKEN_PRIVILEGES tkp; // pointer to token structure OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); HKEY hkey; BYTE value_[MAX_PATH]; char *run="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\Notify\\winsvr";//启动项 HANDLE cf; RegDeleteKey(HKEY_LOCAL_MACHINE,run);//先删除 }