请问高手,有谁知道瑞星在windows登录界面图标按钮是如何放上去的吗

sunqi 2007-10-18 05:18:45
如题,安装后没看到他替换msgina.dll,注册表也没有ginadll表项,是如何实现的呢
...全文
430 点赞 收藏 10
写回复
10 条回复
dakota 2011年11月24日
LZ真是相当不厚道
回复 点赞
fnnxlsm 2010年11月30日
装B,知道也不说出来,

其实搞个那样的窗口超级简单,你只需要创建一个服务,

然后用CreateProcess创建一个进程,把进程的桌面设成"Winlogon"

一切就搞定了.
回复 点赞
zmserver 2009年12月26日
怎么实现的,说下吧牛人!
回复 点赞
热情的破坏者 2009年01月06日
知道是怎么实现的,说出来啊,牛人
回复 点赞
valuexx 2008年05月04日
学习一下
回复 点赞
sunqi 2007年10月19日
我知道瑞星是怎么实现的了
回复 点赞
凤矶 2007年10月19日
还有两种,1.做成服务,把优先级调高
2。驱动
回复 点赞
sunqi 2007年10月19日
1.做成服务,把优先级调高
服务可以设置优先级吗?是不是就是进程的优先级?
回复 点赞
sunqi 2007年10月18日
这个办法好像可以做到登录界面增加按钮之类的控件,有空我来试试,但是我检查了注册表,瑞星好像也没在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify中创建任何子键,还有别的办法吗
回复 点赞
凤矶 2007年10月18日
用Winlogon Notification Package
//想捕捉WinXP用户注销,切换用户的事件,用WTSRegisterSessionNotification这个函数,原形:
// BOOL WTSRegisterSessionNotification(
// HWND hWnd,
// DWORD dwFlags
// );
//

//使用HandlerEx 函数
//

//有一个方法:程序中用SetConsoleCtrlHandler函数来注册一个回调函数HandlerRoutine,这个回吊函数中可以收到
//CTRL_LOGOFF_EVENT
//CTRL_SHUTDOWN_EVENT
//等消息,可以处理了
//


“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@4")
#pragma comment(linker,"/export:test=_testlogon@4")
#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进程中
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7977

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告