A. 電腦一直在顯示正在關機,卻一直關不了,怎麼辦
1、關機前有程序尚在運行或正在關閉,關機命令被延後。
解決辦法:關機前關閉所有打開的程序,並耐心等待其完成。或者按CTRL+ALT+DEL三鍵,進入任務管理器,選擇菜單欄「關機」項,選擇「重新啟動」或「關閉」。如果以上操作無效,可長按主機電源鍵直到電源指示燈熄滅或拔掉主機電源線(如果是筆記本再拆下電池)以強制關機。
2、關機程序損壞或被病毒感染。
解決辦法:WindowsXP的關機是由Shutdown.exe程序來控制的,位於Windows\System32文件夾中,可從正常電腦復制該文件到本機進行覆蓋(可使用啟動u盤或光碟啟動電腦進入PE系統後操作),並在安全模式下使用360安全衛士+360殺毒對硬碟進行全盤查殺木馬、病毒。
3、程序沖突導致系統假死或死機。
解決辦法:重啟,如無效,則重裝系統。
4、硬體故障導致系統死機。
解決辦法:逐一替換檢查各硬體,特別是內存、硬碟、主板,以確定故障源。
B. 電腦一直關不掉怎麼辦
Windows的關機程序在關機過程中將執行下述各項功能:完成所有磁碟寫操作,清除磁碟緩存,執行關閉窗口程序,關閉所有當前運行的程序,將所有保護模式的驅動程序轉換成實模式。引起Windows系統出現關機故障的主要原因有:選擇退出Windows時的聲音文件損壞;不正確配置或損壞硬體;BIOS的設置不兼容;在BIOS中的「高級電源管理」或「高級配置和電源介面」的設置不適當;沒有在實模式下為視頻卡分配一個IRQ;某一個程序或TSR程序可能沒有正確關閉;載入了一個不兼容的、損壞的或沖突的設備驅動程序等等。
1.退出Windows時的聲音文件損壞首先,你可確定「退出Windows」聲音文件是否已毀壞——單擊「開始」→「設置」→「控制面板」,然後雙擊「聲音」。在「事件」框中,單擊「退出Windows」。在「名稱」中,單擊「(無)」,然後單擊「確定」,接著關閉計算機。如果Windows正常關閉,則問題是由退出聲音文件所引起的,要解決這一問題,請選擇下列某項操作:從備份中恢復聲音文件;重新安裝提供聲音文件的程序;將Windows配置為不播放「退出Windows」的聲音文件。
2.快速關機不正常而快速關機是Windows 98中的新增功能,可以大大減少關機時間。但是,該功能與某些硬體不兼容,如果計算機中安裝了這些硬體,可能會導致計算機停止響應。你可禁用快速關機,先單擊「開始」→「運行」,在「打開」框中鍵入「Msconfig」,然後單擊「確定」(見圖1)。單擊「高級」→「禁用快速關機」,單擊「確定」,再次單擊「確定」。系統提示重新啟動計算機,可重新啟動。如果計算機能正常關機,則快速關機功能可能與計算機上所安裝的一個或多個硬體設備不兼容。
3.注意「高級電源管理」 計算機上的「高級電源管理(APM)」功能也可引起關機死機或黑屏問題。而要確定APM是否會引起關機問題,可單擊「開始」→「設置」→「控制面板」,然後雙擊「系統」。在「設備管理器」選項卡上,雙擊「系統設備」。雙擊設備列表中的「高級電源管理」,單擊「設置」選項卡,然後單擊以清除「啟用電源管理」復選框。連續單擊「確定」,直到返回「控制面板」。重啟動計算機。關閉計算機,如果計算機正常關機,則問題的原因可能在於APM。
4.啟動關機故障大家在使用電腦時,還會經常遇到在Windows剛剛啟動的時侯就顯示「你可以安全地關閉計算機了」,或者啟動時馬上關機或關機時重新啟動等故障。這類故障的原因一般來說是由於Wininit.exe或Vmm32.vxd文件的損壞所造成的。解決辦法是重新從Windows安裝程序壓縮包中調取這兩個文件。進入Windows\\system子目錄下,將Vmm32.vxd改名為Vmm32.XXX進行備份,然後再單擊「開始」→「程序」→「附件」→「系統工具」→「系統信息」。單擊菜單欄中的「工具」,然後選擇「系統文件檢查器」,單擊「從安裝盤提取一個文件」(見圖2),然後在「要提取的文件」框中輸入「Wininit.exe」或「Vmm32.vxd」。單擊「開始」,然後按照屏幕上的提示進行操作,以便從Windows CD-ROM或安裝盤將文件提取到C:\\Windows\\System文件夾,然後重復此步驟,以替換文件Wininit.exe或Vmm32.vxd。
5.Bootlog.txt文件出錯此外,在Bootlog.txt文件中存在定位問題也可引起關機黑屏故障。你可先使用文本編輯器,如「記事本」,檢查Bootlog.txt文件中的「Terminate=」條目。這些條目位於文件的結尾,可為問題的起因提供一定的線索。對每一個「Terminate=」條目,查找所匹配的「EndTerminate=」條目。Terminate=Query Drivers表明內存管理程序有問題;Terminate=Unload表明Network與Config.sys中的實模式或網路驅動程序存在沖突;Terminate=Reset Display表明可能需要更新視頻驅動程序;Terminate=Rit表明音效卡或滑鼠驅動程序存在問題;Terminate=Win32表明與32位程序有關的問題阻塞了線程。如果Bootlog.txt文件的最後一行為「EndTerminate=KERNEL」,Windows 98就可成功關閉。
6.Config.sys或Autoexec.bat有問題此外,你可檢查Config.sys文件或Autoexec.bat文件中是否存在沖突?先確定Config.sys文件或Autoexec.bat文件中是否存在沖突,可單擊「開始」,然後單擊「運行」。在「打開」框中,鍵入「Msconfig」,然後單擊「確定」。單擊「診斷啟動」,然後「確定」。系統提示重新啟動計算機時,請單擊「確定」。如果計算機的啟動或關閉不正確,請確定問題是由Config.sys或Autoexec.bat文件的哪一行引起的。要確定引起問題的行,可重新啟動計算機。計算機重新啟動時,請按住Ctrl鍵。從「Startup」菜單中選擇「Safe Mode安全模式」。啟動後單擊「開始」,然後再擊「運行」。在「打開」框中,鍵入「Msconfig」,然後單擊「確定」。單擊以清除Config.sys和Autoexec.bat選項卡中不含Windows圖標行的復選框。使用此Config.sys文件,單擊以啟用某行。單擊「確定」。當系統提示重新啟動計算機時,單擊「確定」。如果計算機的啟動和關閉都很正常,請啟用另一行,並重復上述步驟的操作,以逐步啟用Config.sys文件和Autoexec.bat文件中的行,直到發現問題為止。
7.內部系統問題此外,可確定是否存在內部系統問題。單擊「開始」→「運行」。在「打開」框中,鍵入「Msconfig」,然後單擊「確定」。在「常規」選項卡中單擊「高級」。單擊以清除「高級疑難解答設置」中的下列復選框,然後單擊「確定」:禁用系統ROM中斷點;禁用虛擬HD IRQ;EMM不包含A000-FFFF。系統提示重新啟動計算機時,單擊「確定」。如果計算機正常啟動,可重復以上步驟,但在步驟中「單擊以清除『高級疑難解答設置』中的下列復選框」時單擊以選中某復選框。重復此過程,每次選中其它某復選框,直到發現計算機無法正常關閉為止。一旦發現計算機無法重新啟動或關閉,可再次重復以上步驟單擊以清除剛才選中的復選框即可。
8.檢查CMOS設置CMOS設置不正確一樣也會引起電腦關機問題,大家在電腦啟動時可按「Del」鍵進入CMOS設置頁面,重點檢查CPU外頻、電源管理、病毒檢測、IRQ中斷開閉、磁碟啟動順序等選項設置是否正確。具體設置方法你可參看你的主板說明書,其上面有很詳細的設置說明。如果你對其設置實在是不太懂,建議你可直接在CMOS載入或取下CMOS電池、短接跳線,選用廠家出廠默認設置即可。
9.硬體問題此外,一些BIOS本身的問題或硬體系統本身的問題也會引起不能關機故障。當你發現你安裝了新的硬體在關機時出現系統掛起的情況,如顯示器黑屏,鍵盤滑鼠無響應等,那麼很可能是為新硬體所配置的驅動程序有兼容性的問題。要解決這種第三方的硬體不兼容問題,一般都是到硬體廠家網站上查找解決方案,找到該設備的最新驅動程序並下載安裝到你的機器系統中,一般即可解決該問題。-- 解決不能正常關機的「難題」 曾有一些朋友問筆者:為什麼我的電腦不能自動關機?筆者不得不為他們解決這類問題,又順便把經驗「上升到理論」。相信這篇文章也能幫助你解決點問題。對於ATX電源的電腦,Windows 98提供了電腦的自動關機功能。但在很多情況下,我們的電腦卻並不能順利地正常關機,有時會在關機的過程中死機或失去響應,使我們必須重新啟動電腦或強制性關掉電腦電源。有沒有辦法可以讓電腦關機不再失敗呢?讓我們一起來分析一下原因。
一、關機有音樂很多朋友都喜歡在「控制面板」的聲音設置中設置一段關機音樂,為冰冷的電腦增加一些生氣。如果關機的音樂文件因為某種原因被損壞而不能正常播放,那麼在執行關機程序時自然會失敗了。如果你的電腦不能正常關機,而你恰恰又設置了關機音樂,不妨先把關機音樂設置為「無」(如圖1),然後再試試。
二、驅動不兼容硬體驅動程序之間的不兼容,也會造成電腦不能正常關機。在這里有一個竅門,每次Windows 98關機失敗後,都會在C盤根目錄下面的Bootlog.txt文件中作出記錄,找出其中的「Terminate=」和「EndTerminate=」,在這里記錄了關機失敗的原因。還是拿我自己現在用的這台電腦來說吧,最開始時我用一塊小影霸TNT2 M64的顯卡,起初都很正常,後來我發現只要運行了3D游戲後,不管時間長短,退出遊戲後如果馬上關機,肯定失敗,非要重新啟動一次後才能正常關機。於是我在關機失敗後查看了Bootlog.txt文件,在文件的最後,我發現了這樣幾條記錄:Terminate=Reset Display EndTerminate=Reset Display EndTerminate=User 從記錄上看,好像關機失敗和顯卡有一些關系,於是我安裝了驅動光碟上的TNT2新版的驅動程序,故障依然存在。又安裝了最新的DirectX 8.1,仍然沒有解決問題。最後在一次運行DirectX診斷工具「DxDiag」(該程序在C:\\Program Files\\DirectX\\Setup目錄中)後,在「顯示」頁面中提示「文件Nvdisp.drv未經數字簽名……」看來我之前所安裝的TNT2驅動程序沒有通過微軟認證,於是我又上網下載了TNT2的NVIDIA_WHQL(即通過微軟認證)最新驅動28.32 WHQL版For Windows 9X,安裝之後重新啟動,再次運行「DxDiag」程序,在「顯示」頁面中提示「沒有找到任何問題」,此時運行各種3D游戲後均可順利關機。經過多次試驗,發現一般關機失敗,只要不是硬體本身的故障,都可以檢查Bootlog.txt文件查找原因。下面所列出的記錄都可能造成電腦關機失敗,大家可根據自己電腦的Bootlog.txt所顯示的情況找出原因:Terminate=Query Drivers 內存管理程序有問題Terminate=Unload Network Network與Config.sys中的實模式網路驅動程序沖突Terminate=Reset Display 顯卡設置或驅動程序有問題Terminate=RIT 音效卡或某些舊的滑鼠驅動程序存在與計時器有關的問題Terminate=Win32 某些32位程序鎖定了線程大家可以根據自己電腦的情況,通過對比以上幾點原因,查找並解決電腦的關機故障。
三、軟體難退出有時候關機失敗並不是電腦系統本身的原因,而是因為關機時某些程序無法正常退出。很多朋友在關機之前並不將所有正在運行的程序或軟體全部關閉,而是讓Windows關機時自動關閉它們。的確,大部分的軟體或程序都可在電腦執行關機程序時自動關閉,但也有少數無法自動退出,所以當電腦關機時我們有必要檢查一下,還有什麼軟體或程序正在運行。我發現電腦經常無法正常關機,禁用了「快速關機」還是不行。後來才發現當電腦上運行了某個軟體(由於這個軟體是常駐內存的,運行後就自動出現在系統托盤中),如果我在關閉電腦時沒有將它從系統托盤中退出,那肯定會出現無法關機的現象。而在關機之前自己動手把正在運行的軟體關閉,就可以正常關機了。所以關機時最好首先退出各種正在執行的程序,再執行關機命令。
四、欲速則不達Windows 98的關機程序本身就存在一個Bug,這就是「快速關機」,在很多時候就是它讓我們無法正常關機,正所謂「欲速則不達」。解決方法很簡單,就是「禁用快速關機」。點擊「開始」→「運行」,輸入「msconfig」後點擊「確定」。出現「系統配置實用程序」窗口,點擊「常規」頁面,再點擊「高級」選項,在此時出現的「高級疑難解答設置」窗口中,將「禁用快速關機」選擇前面打上勾(如圖2),這樣就完成了整個操作。
希望我能幫助你解疑釋惑。
C. 你的電腦上的操作系統無法正常關閉,需要對其進行修復
重裝系統解決。
網路搜索「莫回首」下載純凈的系統安裝包。
然後根據情況選擇硬碟安裝系統或者u盤安裝系統即可。
望採納!
D. 電腦無法關機
建議長按開機鍵直到斷電,然後再重新開機,看下是否可以正常使用。
若還有無法關機的情況。可以嘗試以下解決方案。
解決方案:
提示:修改注冊表有風險,請提前備份數據並在專業人士指導下慎重操作。
該情況可以看一下注冊表項,作如下修改後基本可以解決無法關機或者關機慢的問題。如果依舊無法關機,要考慮系統問題。
方法如下:
1、不載入DLL文件。在[開始]-->[運行]-->鍵入[Regedit]- HKEY_LOCAL_ ,建立一個名為AlwaysUnloadDLL,值為1的雙位元組值。如果想要去除這項優化,只需把該鍵值設為0。
2、禁用「NVIDIA Driver Helper Service服務,該服務我們一般是不需要的,而且它會佔用不少系統資源。關閉的方法是打開「控制面板→管理工具→服務」,在彈出的窗口中找到並右擊NVIDIA Driver Helper Service項,選擇「屬性」,在已啟動的下拉列表框中,選擇「已禁用」。
3、修改注冊表開關機:在[開始]-->[運行]-->鍵入[Regedit]-->[HKEY_CURRENT_USER]-->[ControlPanel]-->[Desktop],將字元串值[HungAppTimeout]的數值數據更改為[200],將字元串值[WaitToKillAppTimeout]的數值數據更改為1000.另外在[HKEY_LOCAL_MACHINE]-->[System]-->[CurrentControlSet]-->[Control],將字元串值[HungAppTimeout]的數值數據更改為[200],將字元串值[WaitToKillServiceTimeout]的數值數據更改1000。
4、單擊「開始」,並運行「regedit」,然後在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon中找到PowerdownAfterShutdown,並將值設為1。
E. 電腦無法系統,系統無法正常關閉
系統受損了吧,重裝一次試試,如果不行再來考慮硬體問題。到可以正常上網的電腦製作u啟動盤,然後下載一個系統鏡像,就可以安裝了:
1、將u盤製作成【u深度u盤啟動盤】,接著前往相關網站下載win系統存到u盤啟動盤,重啟電腦等待出現開機畫面按下啟動快捷鍵,選擇u盤啟動進入到u深度主菜單,選取「【02】u深度WIN8 PE標准版(新機器)」選項,按下回車鍵確認
2、在pe裝機工具中選擇win鏡像放在c盤中,點擊確定
3、此時在彈出的提示窗口直接點擊「確定」按鈕
4、隨後安裝工具開始工作,我們需要耐心等待幾分鍾
5、完成後,彈跳出的提示框會提示是否立即重啟,這個時候我們直接點擊立即重啟就即可。
6、此時就可以拔除u盤了,重啟系統開始進行安裝,我們無需進行操作,等待安裝完成即可。
F. 強制關機後,再開機說無法正常關閉電腦,出現錯誤代碼0xc0000001
在多次嘗試後,你的電腦上的操作系統仍無法啟動,因此需要對其進行修復。
錯誤代碼:0xc0000001
你需要使用恢復工具,如果沒有任何安裝介質(口如磁碟或USB設備),請聯系你的系統管理員或電腦/設備製造商。
按F8 以指定啟動設置
有壞道的部分,單獨分一個區,然後隱藏起來,不使用。
錯誤代碼:0xc0000001一般是驅動兼容的問題或系統文件異常丟失,或者系統自動更新過程中自動幫你安裝了微軟推薦的顯卡驅動,導致兼容問題藍屏
如果重裝驅動解決不了,最終重裝系統都能解決問題。
重新安裝習題也要注意,首先請確保您格式化硬碟正確,請您把硬碟上的其他數據先轉移掉之後把整個硬碟格式化
在bios設置為兼容模式。操作方法如下:
1、首先開機按F12或F2,每個筆記本或主板有差別。進入bios調試界面。在startup窗口,將boot選項下的uefi模式設置為legacyonly模式
2、然後再restart選項將load setup defaults 設置為disable。找到EDB(Excute Disable Bit) 這個選項,通常在security裡面,把Disable改成Enabled
3、然後開機按f12,然後進入bios快速啟動,然後選中usb設備就可以第一項啟動。
4、使用USB啟動工具,進入pe系統,重置主引導記錄未果,就格式化C盤,下載ISO win10系統,重新安裝系統。
G. Windows未成功關閉。如果這是由於系統無響應,或者是為保護數據而關閉系統...這怎麼辦
適用於 Linux 的 Windows 子系統中的 Visual Studio Code 伺服器使用本地 WebSocket WebSocket 連接與遠程 WSL 擴展進行通信。網站中的 JavaScript 可以連接到該伺服器並在目標系統上執行任意命令。目前該漏洞被命名為CVE-2021-43907。
這些漏洞可以被用於:
本地 WebSocket 伺服器正在監控所有介面。如果允許通過 Windows 防火牆,外部應用程序可能會連接到此伺服器。
本地 WebSocket 伺服器不檢查 WebSocket 握手中的 Origin 標頭或具有任何身份驗證模式。瀏覽器中的 JavaScript 可以連接到該伺服器。即使伺服器正在監控本地主機,也是如此。
我們可以在特定埠上生成一個Node Inspector示例,它還監控所有介面。外部應用程序可以連接到它。
如果外部應用程序或本地網站可以連接到這些伺服器中的任何一個,它們就可以在目標計算機上運行任意代碼。
Visual Studio Code 庫是不斷更新的。我將使用一個特定的提交 ()。
$ git clone https://github.com/microsoft/vscode $ git reset --hard
我們可以使用 Code (lol) 來導航源代碼。事實上,我已經在 WSL 中為這個漏洞創建了具有相同擴展名的概念驗證。
Visual Studio Code在 WSL 內以伺服器模式運行,並與 Windows 上的代碼示例對話(我稱之為代碼客戶端)。這使我們可以在 WSL 中編輯文件和運行應用程序,而不需要運行其中的所有內容。
遠程開發架構
可以通過 SSH 和容器在遠程計算機上進行遠程開發。GitHub Codespaces 使用相同的技術(很可能通過容器)。
在 Windows 上使用它的方法:
1.打開一個WSL終端示例,在Windows上的代碼中應該可以看到遠程WSL擴展;
2.在 WSL 中運行code /path/to/something;
3.如果未安裝代碼伺服器或已過時,則會下載它;
4.VS Code 在 Windows 上運行;
5.你可能會收到一個 Windows 防火牆彈出窗口,用於執行如下所示的可執行文件:
伺服器的防火牆對話框
這個防火牆對話框是我執行失敗的原因。出現該對話框是因為 VS Code 伺服器想要監控所有介面。
從我信任的Process Monitor開始:
1.運行進程監控器;
2.在WSL中運行code .;
3.Tools > Process Tree;
4.我運行代碼(例如,Windows Terminal.exe)的終端示例中運行Add process and children to Include filte。
Procmon 的進程樹
經過一番挖掘,我發現了 VSCODE_WSL_DEBUG_INFO 環境變數。我只是在 WSL 中將 export VSCODE_WSL_DEBUG_INFO=true 添加到 ~/.profile 。運行伺服器後我們會得到額外的信息。
VSCODE_WSL_DEBUG_INFO=true
輸出被清理。
檢查命令行參數。
可以看到出現了WebSocket詞彙。
運行 Wireshark 並捕獲loopback介面上的流量。然後我再次在 WSL 中運行代碼。這次可以看到兩個 WebSocket 握手。
在 Wireshark 中捕獲的 WebSocket 連接
該運行中的伺服器埠是63574,我們也可以從日誌中看到。在 Windows 上的代碼客戶端中打開命令面板 (ctrl+shift+p) 並運行 > Remote-WSL: Show Log。
遠程 WSL:顯示日誌
最後一行有埠:在 http://127.0.0.1:63574/version 上打開本地瀏覽器。我們還可以看到從 Windows 上的 Code 客戶端到伺服器的兩個單獨的 WebSocket 連接。
伺服器是位於 /src/vs/server/.ts#L207 的 的一個示例。
它被 createServer 在同一個文件中使用,我們可以使用 Code (lol) 找到它的引用並追蹤到 remoteExtensionHostAgent.ts(同一目錄)。
可以根據注釋查看 main.js 內部。
打開文件,看到伺服器可以從傳遞給main.js的參數中獲得主機和埠。
main.js 被 server.sh 調用:
沒有 IP 地址傳遞給腳本,我認為這就是為什麼伺服器監控所有有趣的事情。port=0 可能告訴伺服器使用臨時埠,此信息來自同一目錄中的 wslServer.sh。
每次看到本地 WebSocket 伺服器時,都應該檢查誰可以連接到它。
WebSocket 連接不受同源策略約束,瀏覽器中的 JavaScript 可以連接到本地伺服器。
WebSockets 從握手開始,在跨源資源共享或 CORS 的上下文中它始終是一個「簡單」的GET 請求,因此瀏覽器不需要預先請求就可以發送它。
可以快速創建一個嘗試連接到特定埠上的本地WebSocket伺服器的測試頁面,將它託管在某個遠程位置(例如,S3 存儲桶)並在計算機上打開它。如果連接成功,就可以繼續操作了。
我還檢查了 Burp,在 Burp Repeater 中創建了 WebSocket 握手。將 Origin 標頭修改為 https://example.net。如果響應具有 HTTP/1.1 101 交換協議,那麼就可以繼續了。
在 Burp 中測試
注意,這只對本地主機伺服器有影響。這里的伺服器也對外公開,攻擊者不受瀏覽器約束。它們可以直接連接到伺服器並提供任何 Origin 標頭。
接下來是查看 Wireshark 中的流量,右鍵點擊之前的WebSocket握手GET請求,然後選擇 Follow > TCP Stream。我們將看到一個帶有一些可讀文本的屏幕。關閉它,只會看到這個進程的數據包,這允許我們只關注這個進程。
你可能會問為什麼我關閉了僅包含消息內容的彈出窗口,因為沒有用。根據 RFC6455,從客戶端到伺服器的消息必須被屏蔽。這意味著它們與一個 4 位元組的密鑰(也隨消息一起提供)進行了異或運算。Wireshark 在選擇時取消屏蔽每個數據包,但有效載荷在初始進程彈出窗口中顯示為屏蔽。所以我們將看到純文本的伺服器消息,而客戶端消息被屏蔽並出現亂碼。如果你點擊單個消息,Wireshark 就會顯示有效載荷。
我花了幾天時間對協議進行逆向工程。後來,我意識到只能在/src/vs/base/parts/ipc/common/ipc.net.ts 中看到協議的源代碼。
來自伺服器的第一條消息是 KeepAlive 消息。
在協議定義中,我們可以看到不同的消息類型。
在 /src/vs/platform/remote/common/remoteAgentConnection.ts 中,它在代碼的其他部分被稱為 OKMessage 和heartbeat。
客戶端在/src/vs/platform/remote/common/remoteAgentConnection.ts的中處理此問題。客戶端(Windows上的代碼)發送這個包,它是一個KeepAlive和一個單獨的認證消息。
最初,我認為長度欄位是 12 個位元組而不是 4 個位元組,因為其餘的位元組總是空的。然後我意識到只有常規消息使用消息 ID 和 ACK 欄位,而且我只看到了不規則的握手消息。
在修復之前,沒有勾選此選項。
注意:在 2021-11-09 更新之前(commit )客戶端沒有發送數據。但是,使用此提交,我們仍然可以在沒有此密鑰的情況下發送消息並且它會起作用。這是我們給伺服器簽名的內容,以檢查連接到正確的伺服器。
伺服器響應一個簽名請求。
另一個 JSON 對象:
伺服器已經簽名了我們在前一條消息中發送的數據,並用它自己的數據請求進行了響應。
客戶端驗證簽名的數據,以檢查它是否是受支持的伺服器。當創建我們的客戶端時,可以簡單地跳過。
使用options.signService.validate 方法,然後就會得到/src/vs/platform/sign/node/signService.ts。
vsda 是一個用 C++ 編寫的 Node 原生插件,將 Node 原生插件視為共享庫或 DLL。該插件位於 https://github.com/microsoft/vsda 的私有存儲庫中,根據https://libraries.io/npm/vsda/的說法,直到2019年左右,它都是一個NPM包。
它與 VS Code 客戶端和伺服器捆綁在一起:
Windows系統:
C:\Program Files\Microsoft VS Code\resources\app\node_moles.asar.unpacked\vsda\build\Release\vsda.node
伺服器(WSL):~/.vscode-server/bin/{commit}/node_moles/vsda/build/Release/vsda.node。
我找到了https://github.com/kieferrm/vsda-example,並通過一些實驗找到了如何使用它創建和簽名消息。
1.用msg1 = validator.createNewMessage("1234")創建一個新消息,輸入至少4個字元。
2.使用signed1 = signer.sign(msg1)進行簽名。
3.使用 validator.validate(signed1) 對其進行驗證,響應為「ok」。
需要注意的是,如果你創建了新消息,則無法再驗證舊消息。在源代碼中,每條消息都有自己的驗證器。
Linux 版本有符號,大小約為 40 KB。把它放到 IDA/Ghidra 中,應該就可以開始了。
我花了一些時間,想出了這個偽代碼。可能不太正確,但可以讓你大致了解此簽名的工作原理。
1.用當前時間 + 2*(msg[0]) 初始化 srand,它只會創建 0 到 9(含)之間的隨機數;
2.從許可證數組中附加兩個隨機字元;
3.從 salt 數組中附加一個隨機字元;
4.SHA256;
5.Base64;
6.???;
7.Profit。
僅從許可證數組中選擇前 10 個位置的字元,它總是 rand() % 10 ,但salt 數組翻了一番。
許可證數組的字元串如下所示:
salt 數組的前 32 個位元組(查找 Handshake::CHandshakeImpl::s_saltArray)是:
我從來沒有真正檢查過我的分析是否正確,不過這無關緊要,知道如何使用插件簽名消息,這就足夠了。
接下來,客戶端需要簽名來自伺服器的數據並將其發送回來,以顯示它是一個「合法」的代碼客戶端。
伺服器響應如下:
客戶端發送了如下消息:
提交應該匹配伺服器的提交哈希。這不是秘密。這可能是最後一個穩定版本提交(或最後幾個之一)。這只是檢查客戶端和伺服器是否在同一版本上。它也可以在 http://localhost:{port}/version 上找到,你的瀏覽器 JavaScript 可能無法看到它,但外部客戶端沒有這樣的限制。
signedData是對我們在前面消息中從伺服器獲得的數據進行簽名的結果。
Args是此消息中最重要的部分,它可以告訴伺服器在特定埠上啟動一個 Node Inspector 示例。
break: 啟動 Inspector 示例後中斷。
埠:檢查器示例的埠。
Env:傳遞給檢查器示例進程的環境變數及其值的列表。
Node Inspector 示例可用於調試 Node 應用程序。如果攻擊者可以連接到你計算機上的此類示例,那麼攻擊就成功了。2019 年,Tavis 發現 VS Code 默認啟用了遠程調試器。
整個設置旨在允許 Windows 上的代碼客戶端在 WSL、容器或 GitHub 代碼空間中進行遠程開發。這意味著它可以在遠程計算機上做任何想做的事情。
因此,如果網站可以連接到你本地的 WebSocket 伺服器並繞過 DRM,它就可以模擬代碼客戶端。它可以在你的系統上遠程執行代碼,並且不需要 Node Inspector 示例。
到目前為止,我們已經找到了兩種利用該系統的方法:
生成並連接到 Node Inspector 示例;
模擬代碼客戶端並使用自定義協議與遠程計算機交互;
Node Inspector示例
讓我們看看前面消息中的參數, /src/vs/server/.ts 在伺服器上處理它們。
介面類似於我們之前看到的 JSON 對象:
_updateWithFreeDebugPort檢查埠是否空閑,如果沒有,它將嘗試接下來的10個埠。最後一個空閑埠存儲在startParams.port中。
選擇的埠被發送回客戶端,所以我們知道去哪裡:
最後,它在 /src/vs/server/extensionHostConnection.ts 中調用con.start(startParams);。
這看起來很復雜,讓我們來分析一下:
1.Node Inspector 示例將監聽 0.0.0.0:debugPort,這很危險,如果用戶接受 Windows 防火牆對話框,它將在外部可用;
2.我們也可以注入 Inspector 的環境變數;
3.removeDangerousEnvVariables 方法不是安全過濾器,只是刪除 DEBUG、DYLD_LIBRARY_PATH 和 LD_PRELOAD 環境變數(如果存在)以防止崩潰。
什麼是Node Inspector?
它可以用來調試Node進程。有一些客戶端和庫支持這一點,但通常,我使用Chromium內置的專用節點DevTools (chrome|edge://inspect)。
連接到 Inspector 示例後,我們可以打開控制台並運行 require('child_process').exec('calc.exe');。盡管我們使用的是wsdl,但它仍然有效。
瀏覽器中的 JavaScript 無法連接到 Inspector 示例,客戶端使用另一個 WebSocket 連接與示例對話。但是,我們需要知道調試器會話 ID。
/json/列表
瀏覽器中的 JavaScript 可以發送此 GET 請求,但由於 SOP(響應沒有 Access-Control-Allow-Origin 標頭)而無法看到響應。其他客戶端則沒有這個限制,因為檢查器在外部可用,我們可以從外部連接到它。
現在,我創建了一個簡單的概念驗證:
1.打開一個網站並輸入埠(我們可以掃描它,但手動輸入它會更快)。
2.網站中的 JavaScript 完成握手。
3.我使用 /sign API 創建了一個 Node 應用程序,這樣就可以使用 vsda 插件。
4.一旦生成Node Inspector 示例,第二個 API 就會被 debugPort 調用。
5.使用 chrome-remote-interface 庫的 Node 應用程序連接到 Inspector 示例並運行 calc。
你可以通過以下鏈接看到源代碼:
https://github.com/parsiya/code-wsl-rce https://github.com/parsiya/Parsia-Code/tree/master/code-wsl-rce
模擬代碼客戶端
創建客戶端並使用協議連接到伺服器的代碼位於 VS Code GitHub 存儲庫中,這需要大量的復制/粘貼和解析,我只花了幾個小時。
如果要創建一個快速的概念驗證,應該滿足一些假設:
1.找到本地的 WebSocket 埠;
2.從外部連接到Node Inspector示例;
查找本地 WebSocket 埠並不難,從瀏覽器掃描本地伺服器並不是什麼新鮮事。伺服器也可以從外部使用,因此我們不受那裡的瀏覽器約束。
Chrome 限制不起作用,因為 WebSocket 伺服器需要一個網路伺服器來處理握手。我也很好奇 WebSocket 節流是 Chrome 特定的保護還是 Chromium 的一部分。
有趣的是,Chrome 瀏覽器有一個保護機制,可以防止惡意行為者暴力破解 WebSocket 埠,它在第 10 次嘗試後開始節流。不幸的是,這種保護很容易被繞過,因為擴展的 HTTP 和 WebSocket 伺服器都在同一個埠上啟動。這可用於通過向 img 標簽添加 onload 處理程序來檢查特定本地主機埠上的圖片是否存在來強制所有可能的本地埠。
也就是說,這是一個開發環境,用戶可能整天都在 WSL 中開發並且從不關閉他們的瀏覽器選項卡,因此如果他們打開我們的網站,我們就有可能找到它。
連接到Node Inspector示例是另一回事,我們無法從瀏覽器執行此操作,因此我們需要我們的伺服器可以訪問受害者的計算機。
第二種利用方法(模擬代碼客戶端)沒有這些限制,因為瀏覽器可以與本地伺服器通信並執行所有操作。它只需要我們對協議進行逆向工程並找出要發送的正確消息。
當你收到 WebSocket 升級請求時,請根據許可名單檢查 Origin 標頭。代碼客戶端在該標頭中發送 vscode-file://vscode-app,以便我們可以使用它來操作。
參考及來源:https://parsiya.net/blog/2021-12-20-rce-in-visual-studio-codes-remote-wsl-for-fun-and-negative-profit/
H. 電腦一直顯示windows未能正常關閉 所有的辦法都試過了 關機後還是這樣
今天小編一朋友的電腦關不了機,遠程看了下發現確實關不了機。於是首先想到的是不是中病毒了,可是殺毒後發現沒有中毒,一切正常。
於是又看了任務管理器看是否有可疑的進程導致電腦無法關機。查看一切正常,而且他電腦保養的很好,也沒有亂下載軟體。都是我幫他下載的軟體,電腦也沒有存在垃圾軟體。此時小編真的是欲哭無淚,幫他安裝系統不到2個月就出現這樣的問題了,實在心裡愧疚。
沒辦法,小編是比較懶的人,先從最簡答的開始排查。一條命令下去直接遠程掉了,我知道命令起作用了,說明電腦肯定沒問題了。這時我大概知道什麼原因了,但還是沒有和他說已經搞定了,要他再次開機重啟或者關機試試看行不行。過了沒幾分鍾他說搞定了,他甚至都沒看到我做什麼操作電腦就好了。丈二和尚摸不著頭腦,問我原因以及做了什麼操作。我就發了下面這個截圖給他,他網上查了下說是關機命令。。。其實原因很簡單,可能的原因有以下幾個。第一:電腦中毒,這種情況很多的,中毒後系統後台一直在運行病毒沒法殺死進程,於是會一直報錯關機失敗。第二:系統響應延時,這種情況可能就是CPU處理任務過多,導致關機延時,延時後就死循環了,怎麼關也關不掉。其實此時也可以強制關機的。但是朋友硬是要等我幫他處理,結果好了,等了一天沒關機(實在是最近太忙了,天天出差沒法遠程)。如果他強制關機的話再開機就可以關機了。第三可能的原因就是配置文件損壞,這種情況可以用軟體修復,也可以修改注冊表,修改策略表。第四可能就是聲音文件損壞。下面就簡單介紹下三四點,怎麼修改系統設置。
第三點:1、點擊電腦左下方「開始」圖標,然後在「搜索」,輸入 「「regedit」,看到出來的結果點擊「確定」,打開注冊表編輯器。
2、在打開的注冊表編輯器中,展開到以下注冊項HKEY-LOCAL-MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies,點擊「system」文件夾, 然後右側雙擊「shutdownwithoutlogon」項。
3、此時會彈出一個設置窗口,把基數改成十六進制,把數值改成」1「。
4、點擊電腦左下方「開始」圖標,在「搜索」裡面輸入「gpedit.msc」,然後在搜索結果點擊「確定」按鈕。
5、在本地組策略設置窗口中,找到」用戶配置——管理模板——「開始」菜單和任務欄,然後在右側窗口中找到並雙擊:刪除並阻止「關機」、「重新啟動」、「睡眠」和「休眠」命令在「開始」菜單可用。在彈出的設置窗口中,設置為「已禁用。
第四點:點擊「開始——控制面板——硬體和聲音——聲音——程序事件裡面的關閉程序」,在下方修改,聲音為無,點擊確定。
如果還是關不了機就試試重啟看可以不,因為有些配置要重啟才能生效。重啟無效就試試關機命令吧,如果關機命令還不行就拔掉鍵盤,筆記本就強制關機把鍵盤的排線拔掉。因為鍵盤如果按鍵有問題也是關不了機的哦。