如题!谢谢了。毫无头绪

解决方案 »

  1.   

    在没人回复之前,先跟lz说下,网上是可以搜到一些资料的,也有一些代码的,肯定是可以找到一些头绪的。以前我也试过做这个事情,不过没成功放弃了,so 关注一下。
      

  2.   

    嘿,从网上下载了 一个gina.dll,调用了下,可以实现屏蔽系统启动界面功能
      

  3.   

    gina是微软自定义的一个接口,供自定义验证登陆用,msdn上说的很清楚了,jedi官网也有一个文章
      

  4.   

    LZ想自定義GINA?分太少了吧...不過出於學習,我還是先小來一點資料吧。。
        Winlogon進程負責管理登錄相關的安全性工作,它負責處理用戶的登錄與註銷、啟動用戶shell、輸入口令、更改口令、鎖定與解鎖工作站等。Winlogon進程必須保證其與安全相關操作對其他進程不可見,以免其他進程取得登錄密碼。    系統初始化時,啟動使用者程式之前,Winlogon進行特定工作已保障以上的需求。Winlogon進程將創建並打開一個Window Stations,然後設置一個存取控制人口(ACE),該ACE中只包含Winlogon進程的SID,這樣就只有Winlogon進程才能訪問該Window Stations 。然後winlogon創建桌面,設置其中的winlogon桌面只有winlogon可以訪問,其他進程不能訪問該桌面的任何資料和代碼;利用這一特性保護口令、鎖定桌面等操作的安全。winlogon還會註冊安全注意序列(SAS - secure attention sequence)的熱鍵,任何時候按下SAS熱鍵(缺省為ctrl+alt+del),將調用Winlogon,切換到安全桌面,從而使密碼捕捉程式不能接收登錄密碼和更改密碼等安全活動。
        而登錄進程的驗證和身份驗證都是在GINA(GINA - Graphical Identification and Authentication圖形標識和身份驗證)中實現的,微軟的GINA是MSGINA.dll,實現了預設的Windows NT登錄介面。不過可以自己開發GINA DLL以實現其他的身份驗證方法,如磁卡。當然這也為木馬留下了機會,可以通過編寫和系統GINA介面相同的GINA,然後取代MSGINA.dll。在msdn sample裡有一個GINA的例子。不過如果僅僅為了獲取登錄密碼,沒有必要那麼麻煩,只需寫一個介面和GINA一樣的,然後所有函數在實現時都去調用MSGINA.dll的相同函數就可以了,在msdn sample裡也有這樣一個例子叫做ginastub,當然作為木馬還要在登錄時將密碼轉儲。(更多的gina資訊,在msdn裡查找gina)
        NTShelGINA就是使用了後一種方法。我把ginastub改了改,在登錄時將username:password:domain存在msole32.srg裡。它在運行時具體功能都要調用msgina.dll,因此安裝時這個檔必須存在,然後將msgina.dll改名為winlogon32.dll,然後把NTShellGINA.dll拷貝為msgina.dll即可。這是ntshell裡的第二種安裝方法。    不過微軟還在註冊表裡留了一個位置由於安裝GINA,在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon下設置GINADLL為某個GINA DLL,(GINADLL這個值缺省沒有)如果設置了這個值,nt會調用該GINA,而不會調用缺省的msGINA.dll。因此NTShell的第一種安裝方法是將NTShellGINA.dll拷貝到system32\mshtmlgi.dll,然後設置GINADLL為mshtmlgi.dll。    因此第二種方法安裝成功的前提是系統原來沒有設置GINADLL這個值,否則將不予安裝NTShellGINA 。當然在win2000裡如果使用第二種安裝方法還要把dllcache裡msgina.dll改名。(ntshell改名為mshtmlgi.dll)。
        由於GINA DLL負責系統認證和安全登錄,因此如果一旦出錯,使用者將不能登錄系統,必須慎用。也因此NTShell在安裝時作了較多的檢測,如果檢測失敗將不予安裝。比如在把ntshellgina.dll拷貝為檔msgina.dll的安裝方法裡,第一次mslogon32.dll<-- msgina.dll<-- ntshellgina.dll,如果再次安裝用msgina.dll替換mslogon32.dll,用ntshellgina.dll替換後來的msgina.dll(其實還是ntshellgina.dll),這樣原來的msgina.dll就沒有了,只有兩個ntshellgina.dll,找不到真正的msgina.dll,ntshellgina.dll將失敗。ntshell依次作如下檢測:
    1. 註冊表裡的GINADLL如果設置,則認為系統不是使用預設的登錄GINA,自然不予安裝(找不到msgina.dll或者其他程式工作不正常)2. 如果系統的msgina.dll和ntshellgina.dll相同,則認為已經安裝過了,不能再次安裝3. 如果系統中存在mslogon32.dll,有可能使用ntshell安裝過了,不再安裝(除非你確認,msgina.dll還是原來的,可以手工刪除mslogon32.dll,再安裝;否則不要安裝)
        因為安裝方法有如上兩種,而且沒有專門記錄使用哪種方法安裝的,因此用程式很難卸載,卸載程式必須確切知道你安裝的方法才行,或許以後我會讓用戶指定卸載的方法。目前只能手工卸載,下面是相應的卸載方法: 1. 不能使用reg檔卸載,因為在win nt/2000下,把reg檔輸入註冊表要彈出對話方塊,要你確認的。可以遠端連接到該機的註冊表,或者使用resource kit裡提供的命令列編輯註冊表的程式reg.exe,可以到我的首頁上下載。使用REG.EXE delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
    Windows NT\CurrentVersion\Winlogon\ginadll" 刪除該鍵。系統重起動後,再刪除ntshellgina檔(檔案名是mshtmlgi.dll),當然這個檔不刪除也可以,只是在系統裡留下了痕跡。 另外,如果不理會註冊表,只刪掉mshtmlgi.dll系統將不能啟動。變通卸載方法是把msgina.dll拷貝成mshtmlgi.dll,這樣其實mshtmlgi.dll還是系統的,而且還有了對ntshell的免疫了。 2. 把msgina.dll(就是ntshellgina)改名為任意一個系統沒有的其他檔案名,如gina.tmp(不能刪除,因為系統在使用,無法刪除),然後把mslogon32.dll改名為msgina.dll,重起動後刪除改名後的ntshellgina木馬(當然不刪除也可以,只是在系統裡留下了痕跡)。 如果存在msole32.srg,還要刪除該檔。    
        如果安裝出錯,將不能登錄,msdn中介紹了如下4種方法進行恢復,但是我做了試驗,只有第4種方法可行:在多個nt/2000的系統裡,去另一個系統把備份的msgina.dll檔案修復(對於第一種安裝方法,只能使用上邊的變通卸載方法把系統原來的msgina.dll拷貝成mshtmlgi.dll。另外還有一個方法就是使用緊急修復盤進行恢復或者恢復性安裝。    我覺得一旦本機不能登錄,那麼網路上其它電腦也不能訪問該機的資源包括共用和註冊表(不能驗證其身份),因此採用網路方法是不能恢復這種故障的。
      

  5.   

    再來點:1.實現原理在NT/2000中互動式的登陸支援是由WinLogon調用GINA DLL實現的,GINA_DLL提供了一個互動式的介面為使用者登陸提供認證請求。在WinLogon初始化時,也就是電腦啟動時,就向系統註冊截獲CTRL ALT DEL消息,所以其他程式就無法得到CTRL ALT DEL的消息。WinLogon會和GINA_DLL進行交互,缺省是MSGINA.DLL(在System32目錄下)。微軟同時也為我們提供的介面,自己可以編GINA _DLL來代替MSGINA.DLL。 2.操作步驟 1) 主機控制與審計系統要在Windows登錄之前,就只能利用GINA技術,自己編寫DLL(mygina.dll),放入system32資料夾中。 2) 在註冊表“\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon”項下加入名為“GinaDLL”字串值,類型為“RegSZ”默認,值為“mygina.dll”,使得系統在登錄時先調用mygina.dll(默認為MSGINA.dll),這樣就可以在“登錄”和“註銷”時先進行認證了。 3.通過GINA實現,還可以在“鎖定電腦”的情況下出現認證介面。將“我的登錄”這段程式碼放在“WlxDisplayLockedNotice函數”內。寫過一個直接可以使用…
    1。在WlxActivateUserShell()裡啟動一個執行緒,該執行緒的主要作用是向系統發送ctrl+alt+del的sas,並且判斷標誌位元Flag(全域變數bool Flag,初始值為false),如果為真則結束執行緒。 
    2。在WlxLoggedOnSAS()函數裡當接收到WLX_SAS_TYPE_CTRL_ALT_DEL時首先判斷Flag是否為真,如果為真則正確回應WLX_SAS_TYPE_CTRL_ALT_DEL,否則將Flag設為true,返回WLX_SAS_ACTION_NONE。 
    3。鎖屏時首先判斷Flag是否為true,如果為true,則判斷當前螢幕狀態是否已經鎖定,如果已鎖定,則不再發送鎖屏事件;如果Flag為false,則不發送鎖屏事件,以確保WLX_SAS_ACTION_NONE是第一個sas;解屏做同樣的處理。 
    4.需要注意的是在系統logoff的時候,需要重新將此變數設為falg = false;你可以通過程式設計替換掉微軟的MSGINA.DLL,用來實現自己的密碼登陸驗證功能,如圖,我就加入了兩個密碼驗證的功能。一、原理
    在NT/2000中互動式的登陸支援是由WinLogon調用GINA DLL實現的,GINA DLL提供了一個互動式的介面為使用者登陸提供認證請求。WinLogon會和GINA DLL進行交互,缺省是MSGINA.DLL(在System32目錄下)。微軟同時也為我們提供了介面,我們可以自己編寫GINA DLL來代替MSGINA.DLL。WinLogon初始化時會創建3個桌面:
    (1)、winlogon桌面:主要顯示Windows 安全等介面,如你按下CTRL+ALT+DEL,登陸的介面等
    (2)、應用程式桌面:我們平時見到的那個有我的電腦的介面
    (3)、螢幕保護裝置桌面:螢幕保護裝置顯示介面。在預設情況下,GINA顯示登陸對話方塊,使用者輸入用戶名及密碼 。所以要獲得用戶名和密碼 ,則可以寫一個新的GINA DLL,其中提供介面調用msgina.dll的函數WlxLoggedOutSAS。二、程式實現
    GINA DLL要輸出下列函數(winlogon會調用):(表一)GINA 函數一覽表函數    描述
    WlxActivateUserShell   啟動使用者外殼程式
    WlxDisplayLockedNotice   允許GINA DLL 顯示鎖定資訊
    WlxDisplaySASNotice    當沒有使用者登陸時,Winlogon調用此函數
    WlxDisplayStatusMessage   Winlogon 用一個狀態資訊調用此函數進行顯示
    WlxGetConsoleSwitchCredentials    Winlogon調用此函數讀取當前登陸使用者的信任資訊,並透明地將它們傳到目標會話
    WlxGetStatusMessage    Winlogon 調用此函數獲取當前狀態資訊
    WlxInitialize    針對指定的視窗位置進行GINA DLL初始化
    WlxIsLockOk    驗證工作站正常鎖定
    WlxIslogoffOk    驗證註銷正常
    WlxLoggedOnSAS    用戶已登陸並且工作站沒有被加鎖,如果此時接收到SAS事件,則Winlogon 調用此函數
    WlxLoggedOutSAS    沒有用戶登陸,如果此時收到SAS事件,則Winlogon 調用此函數, This indicates that a logon attempt should be made 。
    WlxLogoff    請求註銷操作時通知GINA DLL 
    WlxNegotiate    表示當前的Winlogon版本是否能使用GINA DLL
    WlxNetworkProviderLoad    在載入網路服務提供程式收集了身份和認證資訊後,Winlogon 調用此函數
    WlxRemoveStatusMessage    Winlogon 調用此函數告訴GINA DLL 停止顯示狀態資訊
    WlxScreensaverNotify    允許GINA與螢幕保護裝置操作交互
    WlxShutdown    在關閉之前Winlogon 調用此函數,允許GINA實現任何關閉任務,例如從讀卡器中退出智慧卡
    WlxStartApplication    當系統需要在使用者的上下文中啟動應用程式時調用此函數
    WlxWkstaLockedSAS   當工作站被鎖定,如果接收到一個SAS,則Winlogon 調用此函數為了簡化程式設計,我們從MSGINA.DLL中動態獲取上述函數,在自訂的DLL中(以下稱為MyGina.DLL)中直接調用MSGINA.DLL的函數即可。現在我們要處理的就是WlxLoggedOutSAS函數...然後設計你的GINA程式(實現自己的介面),具體實現就不再詳細說明了:(因為分太少了)三、安裝和注意事項:在編寫GIAN DLL中要注意,GINA DLL使用的是unicode。引用【安裝】GINA DLL的安裝:
    1. 添加註冊表
    鍵名 : \HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
    變數名 : GinaDLL
    變數類型 : [REG_SZ]
    內容 : "你的GINA DLL的名稱" 如:"MyGina.DLL:2. 將你的GINA DLL(MyGina.dll)拷貝到系統目錄下(system32);3. 重啟機器,你的GINA DLL(MyGina.dll)就會運行。【注意】
    1. 如果出現進不了你的系統,那你進入DOS後,將msgina.dll拷貝成你的GINA DLL(MyGina.dll)就可進入了;或者進入安全模式,刪除掉那個鍵值( GinaDLL )。
      

  6.   

    最後:
      你需要的程序功能比較簡單:只是屏蔽開機啟動界面,然後直接進入某軟件界面;所以,只需要在gina的login中攔截ctrl+alt+del再加一點點小小的處理即可...如果需要的話,我可以先提供一個demo的EXE給你安裝並測試一下,看看效果不過前提是,你的分數要加哦...
      

  7.   


    感谢kye_jufei ,昨天载了一个别人自定义的mygina.dll,通过运行发现也是修改注册表,
    所以只要调用他的dll,添加或修改对应注册表值,就可以实现了。至于直接进入某软件界面这个通过修改注册表的shell值可以了。但没看到具体代码,不知如何实现的
      

  8.   

    to:kye_jufei ,如你那个demo的源码能发过来供学习下,分数不是问题哈。不管怎样,肯定给你分的呵呵
      

  9.   

    procedure TForm1.btn1Click(Sender: TObject);
    var
      lDllPath,lNewPath:string;
      lSysPath :PChar;
      lStrSysPath:string;  hKey: string;
      hReg: TRegIniFile;  
    begin
      getmem(lSysPath,100);
      GetSystemDirectory(lSysPath,100) ;
      lStrSysPath :=  String(lSysPath);
      lDllPath := ExtractFilePath(Application.ExeName) + 'MyGina.dll';
      lStrSysPath :=lStrSysPath+'\MyGina.dll';
      if  CopyFile(pChar(lDllPath),pChar(lStrSysPath),false) then
      else showmessage('文件拷贝失败!');
       
      hReg := TRegIniFile.Create('');  hReg.RootKey := HKEY_LOCAL_MACHINE;  //新增GinaDLL项                    
      hReg.WriteString('Software\Microsoft\Windows NT\CurrentVersion\Winlogon'
                        + hKey + #0,
                        'GinaDLL',
                        'MyGina.dll' );  hReg.destroy;end;procedure TForm1.btn2Click(Sender: TObject);
    var
    reg:tregistry;
    begin
      reg:=tregistry.Create;
      reg.rootkey:=HKEY_LOCAL_MACHINE;
      reg.openkey('Software\Microsoft\Windows NT\CurrentVersion\Winlogon',true);
      reg.DeleteValue('GinaDLL'); //删除注册表项
      reg.CloseKey;
      reg.Free;
    end;以上是我的实现代码,有需要的可以看下,动态库可向我要:)
      

  10.   

    你您的油箱給你,我發給您一個我用Delphi編寫的Gina給你安裝參考一下
      

  11.   

    to:kye_jufei ; 谢谢先:)
      

  12.   

    已發送,請查收(共三個文件,1個EXE和2個DLL,你運行EXE後直接Install看看效果...)PS,如果想還復之前的登錄界面,請進入安全模式下regedit,將這個gina鍵值delete即可...
      

  13.   


    jufei,你好,收到的附件打不开啊