Некоторые картинки не загружаются из РФ и РК, используйте VPN.

суббота, 16 сентября 2023 г.

Posh Закодировать скрипт, заготовка


Понадобилось закодировать скрипт, но не ради обмана антивируса, а из-за нежелания возиться с экранированием символов при создании скрипта из батника. В итоге родилось вот такое чудо:

param ($CreateBatch=$False)

$CurrentDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Set-Location -Path $CurrentDir

if ($CreateBatch -eq $true) {
	$ps_file_name=(Get-Item $PSCommandPath).Name
	$cmd_file_name=((Get-Item $PSCommandPath).Basename+".bat")
	$encoded_script=[Convert]::ToBase64String( [System.Text.Encoding]::Unicode.GetBytes( $(Get-Content $ps_file_name -Raw)))
	$content=("@echo off`r`n"+
			"cd %~dp0`r`n"+
			"powershell -Command [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('$encoded_script'))>$ps_file_name`r`n"+
			"powershell -NoProfile -ExecutionPolicy Bypass -File $ps_file_name`r`n"+
			"pause")
			
	out-file -FilePath $CurrentDir\$cmd_file_name -InputObject $content -Encoding ASCII
	exit
}

Данная заготовка добавляет параметр (добавьте его, если блок с параметрами уже есть) и проверяет его, если он истин, то выполняется создание батника с закодированным скриптом. Батник будет иметь такое же имя с расширением bat и лежать в этой же директории.

Именно Get-Content -Raw позволяет закодировать и раскодировать потом скрипт со всеми переносами строк. Если в скрипте нет обращений к файлам с неизвестным расположением, то можно выполнить скрипт без разворачивания в отдельный файл командой powershell -enc "закодированная строка".

Комментариев нет:

Отправить комментарий