基于visual c++之windows核心编程代码分析(54)实现Winlogon注入dll
2013-01-01 14:19
946 查看
Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出。
该进程的正常路径应是 C:\Windows\System32 且是以 SYSTEM 用户运行.我们都知道操作系统都是基于权限,而权限都是基于用户的,而这个winlogon进程就是管理用户登入登出,是不可以被结束的。winlogon是一个父进程,大多数的进程都是winlogon的子进程,如MDM.EXE、SVCHOST.EXE、ALG.EXE等等重要的进程,换句话说没有winlogon哪来正常的操作系统,怎么能启动系统。
为了监控winlogon进程中没有病毒,需要插入dll 进行安检。
dll编写就不再浪费时间,
下面我们重点实现如何插入dll.
[cpp]
view plaincopyprint?
#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);//先删除
}
原文地址:http://blog.csdn.net/yincheng01/article/details/7214452
该进程的正常路径应是 C:\Windows\System32 且是以 SYSTEM 用户运行.我们都知道操作系统都是基于权限,而权限都是基于用户的,而这个winlogon进程就是管理用户登入登出,是不可以被结束的。winlogon是一个父进程,大多数的进程都是winlogon的子进程,如MDM.EXE、SVCHOST.EXE、ALG.EXE等等重要的进程,换句话说没有winlogon哪来正常的操作系统,怎么能启动系统。
为了监控winlogon进程中没有病毒,需要插入dll 进行安检。
dll编写就不再浪费时间,
下面我们重点实现如何插入dll.
[cpp]
view plaincopyprint?
#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);//先删除
}
原文地址:http://blog.csdn.net/yincheng01/article/details/7214452
相关文章推荐
- 基于visual c++之windows核心编程代码分析(54)实现Winlogon注入dll
- 基于visual c++之windows核心编程代码分析(54)实现Winlogon注入dll
- 基于Visual C++之Windows核心编程代码分析(3)实现程序自动安装
- 基于visual c++之windows核心编程代码分析(48)编程实现远程登录3389
- 基于Visual C++之Windows核心编程代码分析(3)实现程序自动安装
- 基于visual c++之windows核心编程代码分析(11)实现屏幕截取
- 基于visual c++之windows核心编程代码分析(63)无模块dll进程注射
- 基于visual c++之windows核心编程代码分析(51)基于匿名管道实现远程控制
- 基于visual c++之windows核心编程代码分析 实现开机自启动
- 基于Visual C++之Windows核心编程代码分析(3)实现程序自动安装
- 基于visual c++之windows核心编程代码分析(63)无模块dll进程注射
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- 基于visual c++之windows核心编程代码分析(26)实现文件关联
- 基于visual c++之windows核心编程代码分析(33)实现防火墙模型
- 基于visual c++之windows核心编程代码分析(49)基于匿名管道实现远程控制
- 基于visual c++之windows核心编程代码分析(48)编程实现远程登录3389
- 基于visual c++之windows核心编程代码分析(26)实现文件关联
- 基于visual c++之windows核心编程代码分析(33)实现防火墙模型
- 基于visual c++之windows核心编程代码分析(49)基于匿名管道实现远程控制
- 基于visual c++之windows核心编程代码分析(65)实现程序自我复制