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、在本地组策略设置窗口中,找到”用户配置——管理模板——“开始”菜单和任务栏,然后在右侧窗口中找到并双击:删除并阻止“关机”、“重新启动”、“睡眠”和“休眠”命令在“开始”菜单可用。在弹出的设置窗口中,设置为“已禁用。
第四点:点击“开始——控制面板——硬件和声音——声音——程序事件里面的关闭程序”,在下方修改,声音为无,点击确定。
如果还是关不了机就试试重启看可以不,因为有些配置要重启才能生效。重启无效就试试关机命令吧,如果关机命令还不行就拔掉键盘,笔记本就强制关机把键盘的排线拔掉。因为键盘如果按键有问题也是关不了机的哦。