現在、Windows 10 20H2 OS へのすべてのハックを 1 回の実行で実行するスクリプトを作成中です。
PowerShell 7.0.4 x64 を使用しており、スクリプトを管理者で実行したいのですpwsh
が、いくつかのレジストリ キーでは TrustedInstaller 権限を変更する必要があることがわかりました。解決策を見つけました: を使用してプロセスpsexec -S
を開始しpwsh
、権限でコマンドを実行しますが、残念ながら、新しいプロセスに変数を渡す方法や、自動的に終了してスクリプトの実行を続行する方法TrustedInstaller
がわかりません。psexec
これを例として挙げます:
$TiSvc=@(
"PrintWorkflowUserSvc"
"RmSvc"
"SCardSvr"
"SecurityHealthService"
"Sense"
"SgrmBroker"
"wscsvc"
)
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
権限がない場合TrustedInstaller
、コマンドはアクセス拒否エラーで失敗します。
さて、これを解決するには、 を使用してpsexec
コマンドを実行します (SysInternals
フォルダーを に入れましたpath
)。
$PwSh=(Get-Process -Id $pid).path
PsExec -S $PwSh ???
[array]
現在のセッションで変数を設定したいのですが、新しいセッションに渡してこのコマンドを実行する$TiSvc
方法がわかりません。$TiSvc
pwsh
$TiSvc | %{Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\$_" -Name Start -Type DWord -Value 4}
コマンドが実行された後、新しいpwsh
セッションを終了して終了し、psexec
スクリプトの実行を続行します。
どうすればそれができるでしょうか?どんな助けでもありがたいです。
答え1
実行したいコマンドをTrustedInstaller
スクリプト ファイルと同じパスのテキスト ファイルに配置し、PsExec.exe
が にあることを確認してPath
から、次のコマンドを使用します。
$PwSh=(Get-Process -Id $pid).path
psexec -S $pwsh -file $psscriptroot\tiworker.txt
TrustedInstaller 権限を必要とするコマンドを別のPowerShell
プロセスで実行すると、実行が完了するとプロセスが自動的に終了し、メイン スクリプトの実行が続行されます。
PowerShell プロセスが TrustedInstaller 権限なしで開始される原因となっていた小さなミスを修正しました。
上記の方法は、以下のコマンドを実行しようとしたときに、何らかの理由で正しく機能しませんでした。
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WinDefend" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdBoot" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdFilter" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdNisDrv" -Name "Start" -Type DWord -Value 4
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Services\WdNisSvc" -Name "Start" -Type DWord -Value 4
次のエラーが発生しました:
Set-ItemProperty: Attempted to perform an unauthorized operation.
もし私がreg add
ERROR: Access is denied.
しかし、それら以前のコマンドはすべて返されました:
The operation completed successfully.
具体的には以下のコマンドです:
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "DisableAntiSpyware" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "DisableRoutinelyTakingAction" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender" -Name "ProductStatus" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Real-Time Protection" -Name "DisableAntiSpywareRealtimeProtection" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Real-Time Protection" -Name "DisableRealtimeMonitoring" -Type DWord -Value 1
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Scan" -Name "AutomaticallyCleanAfterScan" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\Scan" -Name "ScheduleDay" -Type DWord -Value 8
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\UX Configuration" -Name "AllowNonAdminFunctionality" -Type DWord -Value 0
Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows Defender\UX Configuration" -Name "DisablePrivacyMode" -Type DWord -Value 1
TrustedInstaller ではなく管理者として実行すると、それぞれ次のエラーが返されます。
Set-ItemProperty: Requested registry access is not allowed.
を使用して実行するとPsExec
、このエラーは生成されません。
しかし、このエラー:
Set-ItemProperty: Attempted to perform an unauthorized operation.
引き続き生成されます。
PsExec
これは、リモートのものに依存しており、「リモート アシスタンス」、「リモート デスクトップ」、および「リモート レジストリ」を無効にしているためだと思います。
使用したところNSudoLC.exe
、エラーなしで Windows Defender を正常に無効にできました。
NSudoLC.exe -U:T -P:E $pwsh -file $home\desktop\tisvc.txt
両方を使用すると、NSudo
上記のエラーは生成されません。