注入Winlogon进程示例代码 - [编程学习]

转载 2011年01月20日 13:27:00

      “Winlogon通知包(Winlogon Notification Package)”就是处理winlogon在切换状态时发出的事件的DLL。你可以通过“Winlogon Notification Package”来监视winlogon事件的响应。你可以注册这些DLL,那么winlogon.exe会在启动时加载它们,并且会在系统状态切换时来调用注册DLL的事件处理函数。当然这一点用来加载后门是在好不过了,因为加载的后门存在于winlogon.exe的进程中,而winlogon.exe是系统进程,一般情况下是无法终止它的,况且杀死它会导致系统崩溃或重启,没人会这么做。用“Winlogon Notification Package”来加载后门的又一个好处是——你的后门将运行在system权限下而不用注册为系统服务。

为了注册你的“Winlogon Notification Package”,必须在“HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/Notify”下创建你的“notification package”子键。在我的系统中,存在6个子键,分别是:crypt32chain,cryptnet,cscdll,sclgntfy,SensLogn,termsrv。在“Notify”项下,可以根据需要创建如下键值:

Asynchronous[REG_DWORD]:表明是否异步处理winlogon事件,如设为 1,winlogon将启动一个新线程来处理。
DllName[REG_EXPAND_SZ]:指定要加载的DLL名。
Impersonate[REG_DWORD]:表明是否以登陆用户的权限来处理事件。
Lock[REG_SZ]:锁定桌面事件。
Logoff[REG_SZ]:注销事件。
Logon[REG_SZ]:登陆事件。
Shutdown[REG_SZ]:关机事件。
StartScreenSaver[REG_SZ]:启动屏保事件。
StartShell[REG_SZ]:启动shell(一般指explorer.exe)事件。
Startup[REG_SZ]:系统开机事件。
StopScreenSaver[REG_SZ]:停止屏保事件。
Unlock[REG_SZ]:解除桌面锁定事件。

其中每个事件对应DLL中的一个导出函数,即每当有事件发生时,winlogon.exe便调用相应的函数。譬如:DllName的值为“test.dll”,Logoff的值为“testlogoff”,那么系统注销时winlogon.exe将调用test.dll中导出的“testlogon”函数。

关于DLL的实现非常地简单:只要导出处理事件是要调用的函数就行,其他和别的DLL无异。以下是代码的简单实现:

//----------------------------------Start of WNP.C-------------------------------------------
/*Create file exports.def with content:
EXPORTS
testlogoff
testlogon
*/
#include <windows.h>
#pragma comment(linker,"/export:test=_testlogoff@0")
#pragma comment(linker,"/export:test=_testlogon@0")
#pragma comment(linker,"/entry:DllEntry")
#pragma comment(linker,"/subsystem:windows")
#pragma comment(linker,"/align:4096")
#pragma comment(linker,"/dll")
#pragma comment(linker,"/base:1976369152")

__declspec(dllexport) void __stdcall testlogoff(DWORD unknow)
{
MessageBox(NULL,"系统正在注销!","Winlogon Notification Package",MB_OK);
}

__declspec(dllexport) void __stdcall testlogon(DWORD unknow)
{
MessageBox(NULL,"系统正在登陆!","Winlogon Notification Package",MB_OK);
}

BOOL __stdcall DllEntry(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:break;
case DLL_THREAD_ATTACH:break;
case DLL_THREAD_DETACH:break;
case DLL_PROCESS_DETACH:break;
}return TRUE;
}
//----------------------------------End of WNP.C---------------------------------------------

将编译好的test.dll复制到系统文件夹,修改注册表并重启后,发现C:/WINNT/system32/test.dll已经成功加载到winlogon.exe进程中



原文地址:http://drag0n.blogbus.com/logs/40519401.html

相关文章推荐

winlogon源码分析

转载请标明是引用于 http://blog.csdn.net/chenyujing1234  欢迎大家拍砖!    一、从WinMain开始分析 (1)  获得系统debug信息 NtQ...

进行DLL注入的三种方法

进行DLL注入的三种方法 作者:陶冶(无邪) MAIL:taoy5178@hotmail.comOICQ:24149877   在WINDOWS中,每个进程都有自己独立的地址空间,这样一个应用程序就无...
  • taoyi
  • taoyi
  • 2004年09月14日 12:57
  • 1522

windows7 default桌面,winlogon桌面和screensaver桌面的截屏

这个项目已经结束快两年了,由于公司需要,所以又来做个总结。 当时需要做屏幕截图,但是在winlogon桌面(ctrl+alt+del 或 登录界面 或 UAC)和screensave桌面(屏保下)截图...

HOOk 系统热键屏蔽

Ctr+Alt+Del是Winlogon的热键,WinlogoN是SYSTEM的进程,它不在当前用户的会话中,机制不一样的啦。...

基于VTK的MFC应用程序开发(2)

基于VTK的MFC应用程序开发(2) 分类: VTK应用示例 2013-03-29 13:03 6647人阅读 评论(18) 收藏 举报 MFCVTK图像重采样 目录(...

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

Windows Logon Process,Windows NT 用户登陆程序,管理用户登录和退出。该进程的正常路径应是 C:\Windows\System32 且是以 SYSTEM 用户运行.我们都...

访问进程外控件示例代码

  • 2010年10月23日 23:57
  • 2KB
  • 下载

Linux socket连接句柄进程间传送示例代码

准备做一个网络侦听进程和数据处理进程分离的模块,侦听进程和数据处理进程一对多关系,希望侦听进程在收到连接后,把socket句柄传送给空闲的数据处理进程。对于进程间文件描述符传送,先做了如下的示例程序。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:注入Winlogon进程示例代码 - [编程学习]
举报原因:
原因补充:

(最多只允许输入30个字)