基于visual c++之windows核心编程代码分析(54)实现Winlogon注入dll

21 篇文章 0 订阅
11 篇文章 0 订阅

Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出。

该进程的正常路径应是 C:\Windows\System32 且是以 SYSTEM 用户运行.我们都知道操作系统都是基于权限,而权限都是基于用户的,而这个winlogon进程就是管理用户登入登出,是不可以被结束的。winlogon是一个父进程,大多数的进程都是winlogon的子进程,如MDM.EXE、SVCHOST.EXE、ALG.EXE等等重要的进程,换句话说没有winlogon哪来正常的操作系统,怎么能启动系统。

为了监控winlogon进程中没有病毒,需要插入dll 进行安检。

dll编写就不再浪费时间,

下面我们重点实现如何插入dll.

  1. #include "stdafx.h" 
  2.  
  3.  
  4. #ifdef _MANAGED 
  5. #pragma managed(push, off) 
  6. #endif 
  7. EXTERN_C __declspec(dllexport) void install(); 
  8. EXTERN_C __declspec(dllexport) void uninstall(); 
  9. BOOL APIENTRY DllMain( HMODULE hModule, 
  10.                        DWORD  ul_reason_for_call, 
  11.                        LPVOID lpReserved 
  12.                      ) 
  13.     return TRUE; 
  14.  
  15. #ifdef _MANAGED 
  16. #pragma managed(pop) 
  17. #endif 
  18.  
  19. void  install() 
  20.     HANDLE hToken;              // handle to process token  
  21.     TOKEN_PRIVILEGES tkp;       // pointer to token structure  
  22.     OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS, &hToken);  
  23.     LookupPrivilegeValue(NULL, SE_DEBUG_NAME,  
  24.         &tkp.Privileges[0].Luid);  
  25.     tkp.PrivilegeCount = 1;  // one privilege to set     
  26.     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
  27.     AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 
  28.     HKEY hkey; 
  29.     BYTE value_[MAX_PATH*2]; 
  30.     char *run="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\Notify\\winsvr";//启动项 
  31.     HANDLE cf;   
  32.     RegDeleteKey(HKEY_LOCAL_MACHINE,run);//先删除 
  33.     RegCreateKey(HKEY_LOCAL_MACHINE,run, &hkey); //自启动 
  34.     if (!hkey)//失败 
  35.     { 
  36.         return
  37.     } 
  38.  
  39.     strcpy((char*)&value_,"c:\\dll.dll");//dll路径 
  40.     RegSetValueEx(hkey,"DLLName",0,REG_EXPAND_SZ,(PBYTE)&value_,strlen((char*)&value_)); 
  41.     strcpy((char*)&value_,"exe");//导出函数名 
  42.     RegSetValueEx(hkey,"Logon",0,REG_SZ,(PBYTE)&value_,strlen((char*)&value_)); 
  43.  
  44.     //让winlogon异步处理我们的程序,避免卡在那。 
  45.     DWORD dw=1; 
  46.     RegSetValueEx(hkey,"Asynchronous",0,REG_DWORD,(PBYTE)&dw,sizeof(dw));    
  47. void uninstall() 
  48.     HANDLE hToken;              // handle to process token  
  49.     TOKEN_PRIVILEGES tkp;       // pointer to token structure  
  50.     OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS, &hToken);  
  51.     LookupPrivilegeValue(NULL, SE_DEBUG_NAME,  
  52.         &tkp.Privileges[0].Luid);  
  53.     tkp.PrivilegeCount = 1;  // one privilege to set     
  54.     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
  55.     AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0); 
  56.     HKEY hkey; 
  57.     BYTE value_[MAX_PATH]; 
  58.     char *run="SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\Notify\\winsvr";//启动项 
  59.     HANDLE cf;   
  60.     RegDeleteKey(HKEY_LOCAL_MACHINE,run);//先删除 
  61. 原文地址:http://blog.csdn.net/yincheng01/article/details/7214452
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值