Перейти к содержанию
A.Kudrjashov

PS2EXE. Запуск скриптов с административными правами

Рекомендуемые сообщения

Периодически возникает необходимость выполнить какой-то скрипт не раскрывая пользователям содержимое алгоритма, либо выполнить его с повышенными (административными) правами. Помочь в этом может нижеприведенная оболочка, которая превращает скрипты Powershell в исполняемые EXE файлы.

 

Правда, при этом необходимо понимать следующее:

  1. Данная оболочка скрывает содержимое скрипта, облегчает его запуск на стороне пользователя, позволяет выполнить скрипт в фоновом режиме, но не обеспечивает большей производительности или скорости исполнения.
  2. Для исполнения скрипта требуется наличие Powershell и .Net версии 2.0
  3. При помощи данной оболочки можно скрытно повысить административные права. Но, при этом, если пользователь знает каким образом был сформирован исполняемый файл, то в ней заложена возможность распаковки при помощи опции "-extract" .EXE обратно в текстовый .PS1. Поэтому повышать административные права необходимо крайне аккуратно.
    Как вариант, можно разобраться с исходным кодом и принципиально исключить подобную возможность.

 

Исходники расположены здесь:
https://gallery.technet.microsoft.com/scriptcenter/PS2EXE-GUI-Convert-e7cb69d5

Частичное описание работы оболочки есть здесь:

https://windowsnotes.ru/powershell-2/kak-skonvertirovat-powershell-v-exe/

 

С учетом вышесказанного и при условии внимательного отношения к требованиям информационной безопасности, для запуска скрипта с правами другого пользователя можно воспользоваться следующими конструкциями:

 

Сохранение пароля для использования на локальной машине.

Спойлер

 

$passFile = "D:\Work\Script\UserLogin_pass.txt"

# Сохраняем параметры текущей учетной записи во внешнем файле
$Credentials = Get-Credential UserLogin
$Credentials.Password | ConvertFrom-SecureString | Set-Content $passFile

 

# Читаем сохраненный пароль для применения в скрипте
$user = "UserLogin"
$password = Get-Content $passFile | ConvertTo-SecureString
$Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user $password

 

 

Сохранение пароля для использования в сети.

Спойлер

 

$passKeyFile = "D:\Work\Script\UserLogin_passKey.txt"

# Сохраняем параметры текущей учетной записи во внешнем файле
$Credentials = Get-Credential UserLogin

# Ключ шифрования может быть задан произвольным размерностью 16, 24, 32 байт (128, 192, 256 бит)

$key = @(1..24)
$Credentials.Password | ConvertFrom-SecureString -Key $key | Set-Content $passKeyFile
# Запоминаем ключ шифрования пароля (Export-Clixml не принимает в качестве аргумента переменные, только строки !)
$key | Export-Clixml "D:\Work\Script\UserLogin_key.xml"

 

# Читаем сохраненный пароль для применения в скрипте
$key = Import-Clixml "D:\Work\Script\UserLogin_key.xml"
$user = "UserLogin"
$password = Get-Content $passKeyFile | ConvertTo-SecureString -Key $key
$Credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user $password

 

 

Изменено пользователем A.Kudrjashov
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

×
×
  • Создать...