close

※ 反灰部分請略過 ,是我研究後失敗的部分,但留存以備不時之需

 

最近需要研究自動登入功能

在網路上看到有一玩意兒叫做Credential Provider

就下載了一個範例來玩玩

步驟1:用VMware新增一個win10來測試

絕對務必要用VM試,除非你有信心改完程式登入不了後,還有其他辦法進去桌面

 我VM裝的是win10家用版,安裝的時候宿主機不會連網,因為若連網的話,
    會需要輸入信箱帳密跟強迫設定登入pin碼,我覺得多這步很煩... 

-> VM作以下設定才可以把檔案傳給VM用

     Select the virtual machine and select Player > Manage > Virtual Machine Settings.
     On the Options tab, select Shared Folders. 把設定設一設

     然後宿主機這邊跟vm分享的資料夾也要按右鍵->properties ->  Sharing把設定設一設

 

步驟2:下載範例專案

 

https://github.com/phaetto/windows-credentials-provider         https://github.com/SteveSyfuhs/CredProvider.NET

-> 用Visual Studio 以admin權限開啟專案,並在Reference加入midl/CredProvider.NET.Interop2.dll

-> 我要試自動登入功能,需要修改程式碼一些地方

     1. 開啟WindowsCredentialProviderTest\TestWindowsCredentialProviderTile.cs

         //#define AUTOLOGIN   拿掉註解 

     2. WindowsCredentialProviderTest\TestWindowsCredentialProvider.cs
         把SetUsageScenario改成這樣
         case _CREDENTIAL_PROVIDER_USAGE_SCENARIO.CPUS_CREDUI:
         case _CREDENTIAL_PROVIDER_USAGE_SCENARIO.CPUS_LOGON:
         return HResultValues.S_OK;

         註:Windows 10, 無論已經log in還是 session被locked,_CREDENTIAL_PROVIDER_USAGE_SCENARIO都是返回CPUS_LOGON  

     3. WindowsCredentialProviderTest\TestWindowsCredentialProviderTile.cs
         GetSerialization function裡的username跟password 寫死 ,像這樣

         var username = @".\yuan";      紅的明顯,.\這個一定要加,代表domain
         var password = "12"; 

         另外,若安裝win os的時候是設定用pin登入,要改成用本機帳戶

-> 在project CredProvider.NET

     WindowsCredentialProviderTest上按右鍵 ->properties -> build ->
     最底下output那邊勾選 register for COM interop ->用X64編譯專案

-> build的時候會有一些error,把using CredProvider.NET.Interop改成using CredProvider.NET.Interop2

     再build一次應該就沒問題了。

->   register-credentials-provider.reginstall.reg(在下載的專案裡面,自己搜尋一下)跟

      build出的WindowsCredentialProviderTest.dll

      Syfuhs.Security.CredentialProvider.Tester.exe & CredProvider.NET.dll

     放到vm存取的到的share folder,供vm使用

 

步驟3(最後一步):開始在vm 試囉

->  把share folder裡的CredProvider.NET.dllWindowsCredentialProviderTest.dll複製一份到 

      C:\Windows\System32

-> 使用regasm手動註冊com interop。Admin開cmd,下指令:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe "C:\Windows\System32\WindowsCredentialProviderTest.dll" /tlb /codebase)

註:unregister         regasm.exe /unregister %WorkFolder%\xxx.dll

-> VM裡雙擊share folder裡的install.reg register-credentials-provider.reg,不用重開機,直接win+L lock screen

      可以看到多一個登入選項,見下圖藍底Seconds passed...,倒數結束後就會登入了

         image

 

進階玩法

 image-> copy from  https://www.cnblogs.com/nightnine/p/7132658.html

●更改Tile Image

      WindowsCredentialProviderTest\TestWindowsCredentialProviderTile.cs

      new _CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR
      {
            cpft = _CREDENTIAL_PROVIDER_FIELD_TYPE.CPFT_TILE_IMAGE,
            dwFieldID = 0,
            pszLabel = "Icon",
     
 },
      new _CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR
      {
            cpft = _CREDENTIAL_PROVIDER_FIELD_TYPE.CPFT_SMALL_TEXT,
            dwFieldID = 1,
            pszLabel = "Rebootify",
            guidFieldType=Guid.Parse("286BBFF3-BAD4-438F-B007-79B7267C3D48" ) ,
      },

      new _CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR
      {
            cpft = _CREDENTIAL_PROVIDER_FIELD_TYPE.CPFT_SUBMIT_BUTTON,
            dwFieldID = 2,
            pszLabel = "Login",
      }

....

        public int GetBitmapValue(uint dwFieldID, IntPtr phbmp)
        {   ....
             //phbmp = IntPtr.Zero; // TODO: show a bitmap
            //+++
           Bitmap tileIcon ;
           tileIcon = new Bitmap(@"C:\Users\xxxxx\Desktop\xxxxxx.bmp");//換成你自己的圖檔路徑
 
            Marshal.WriteIntPtr(phbmp, tileIcon.GetHbitmap());   //2020.03.26  Yuan:can't write this :phbmp = tileIcon.GetHbitmap();

                                                                                                        it'll get negative return value
            return HResultValues.S_OK;
            //---
            //return HResultValues.E_NOTIMPL; 

        }

 

      效果如下圖

image

C:\Users\<accountName>\AppData\Roaming\Microsoft\Windows\AccountPictures  帳戶圖片路徑

Trouble shooting

●VM才用一陣子,宿主機的硬碟空間一直被吃掉,超靠杯的,

查了一下發現兇手在working directory裡面↓

image

 

打開working directory,holy shit!!!!!! 怎麼有那麼多snapshot

image

 

如果直接砍掉的話,vm會打不開

但我用的vmware版本是vmware workstation 14 player 

根本沒有可以關掉跟刪除snapshot的選項

 

只好按這裡去下載pro版 ↓

image

pro版裡面就可以在options裡面找到snapshot的選項,預設是不會存。

 

 

 

 

參考資料:

Credential Providers in Windows 10 

https://docs.microsoft.com/en-us/windows/win32/secauthn/credential-providers-in-windows

 

Credential provider usage scenario: CPUS_UNLOCK_WORKSTATION removed from Windows 10

https://stackoverflow.com/questions/32188454/credential-provider-usage-scenario-cpus-unlock-workstation-removed-from-windows?rq=1

 

★Creating Custom Windows Credential Providers in .NET 此篇文章主要參考這

https://syfuhs.net/2017/10/15/creating-custom-windows-credential-providers-in-net/

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 iam9527 的頭像
    iam9527

    翁丸的育兒筆記

    iam9527 發表在 痞客邦 留言(0) 人氣()