| Zireael |
Отправлено: 08 Января, 2025 - 20:32:41
|


Эксперт

Покинул форум
Сообщений всего: 4597
Дата рег-ции: Нояб. 2017
Репутация: 595

|
Длл позволяет выполнять команды PowerShell.
https://drive.google.com/file/d/...view?usp=sharing
Пароль на архив: 1111. Длл закинуть в папку с кибор.
Работает в Win10, Win11. В системе должен быть разрешён запуск сценариев PoweShell.
Для этого можно запустить Windows PowerShell или Windows PowerShell ISE от администратора, выполнить эти строки:
CODE:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine -Force
Длл возвращает 1 если какие-то данные были возвращены, иначе 0.
Пример использования:
CODE:external(INT, "PS_Command", "PS_Command", "PowerShell.dll");
char Result[99999];
// получить список папок на диске C:
int res = PS_Command("(Get-ChildItem -Path C:\ -Directory).Name", address(#Result[0]), sizearray(Result));
if(res) messagebox(format(#Result[0]));
else messagebox("res = 0");
CODE:external(INT, "PS_Command", "PS_Command", "PowerShell.dll");
char Result[99999];
// узнать количество дней между датами
int res = PS_Command("([DateTime]::Parse(^"25.02.2025^") - [DateTime]::Parse(^"10.01.2025^")).Days", address(#Result[0]), sizearray(Result));
if(res) messagebox(format(#Result[0]));
else messagebox("res = 0");
Можно выполнить код из файла.
Сохранить этот код в файл с именем и расширением: GetProcess.ps1, закинуть файл в папку с кибор.
CODE:try{
$prc = Get-Process Kibor
}
catch [Microsoft.PowerShell.Commands.ProcessCommandException]{
$PSItem.Exception
return
}
@{
'Handle' = $prc[0].MainWindowHandle
'StartTime' = $prc[0].StartTime.ToString("dd.MM.yy HH:mm:ss")
'PID' = $prc[0].Id
}|ConvertTo-Json
Запустить код в кибор:
CODE:external(INT, "PS_File", "PS_File", "PowerShell.dll");
char Result[99999];
// выполнить код из файла
int res = PS_File(pathfolder()+"GetProcess.ps1", address(#Result[0]), sizearray(Result));
if(res)
{
messagebox(format(#Result[0]));
parserjson(Json, format(#Result[0]));
messagebox("Хендл: " + Json.Handle);
messagebox("Время запуска: " + Json.StartTime);
messagebox("PID: " + Json.PID);
}
else messagebox("res = 0");
Данный скрипт найдёт процесс кибор и вернёт его хендл, время запуска и pid в виде json. |
| |
|
| Zireael |
Отправлено: 10 Августа, 2025 - 13:13:46
|


Эксперт

Покинул форум
Сообщений всего: 4597
Дата рег-ции: Нояб. 2017
Репутация: 595

|
Цитата: как должен выглядеть код ниже в GetProcess.ps1
CODE:try{
Add-Type -AssemblyName System.Security
$scope = [System.Security.Cryptography.DataProtectionScope]::CurrentUser
$text = [System.Text.Encoding]::UTF8.GetBytes("Text to encrypt")
$protected = [System.Security.Cryptography.ProtectedData]::Protect($text, $null, $scope)
$protectedBase64 = [Convert]::ToBase64String($protected)
$textProtected = [Convert]::FromBase64String($protectedBase64)
$unprotected = [System.Security.Cryptography.ProtectedData]::Unprotect($textProtected, $null, $scope)
$protectedBase64 # зашифрованный текст в формате base64
[System.Text.Encoding]::UTF8.GetString($unprotected) # расшифрованный текст
}
catch [Microsoft.PowerShell.Commands.ProcessCommandException]{
$PSItem.Exception
return
} |
| |
|
| neba2101 |
Отправлено: 12 Августа, 2025 - 23:23:39
|


Мастер

Покинул форум
Сообщений всего: 199
Дата рег-ции: Февр. 2017
Репутация: 4

|
Zireael пишет: Цитата: как должен выглядеть код ниже в GetProcess.ps1
CODE:try{
Add-Type -AssemblyName System.Security
$scope = [System.Security.Cryptography.DataProtectionScope]::CurrentUser
$text = [System.Text.Encoding]::UTF8.GetBytes("Text to encrypt")
$protected = [System.Security.Cryptography.ProtectedData]::Protect($text, $null, $scope)
$protectedBase64 = [Convert]::ToBase64String($protected)
$textProtected = [Convert]::FromBase64String($protectedBase64)
$unprotected = [System.Security.Cryptography.ProtectedData]::Unprotect($textProtected, $null, $scope)
$protectedBase64 # зашифрованный текст в формате base64
[System.Text.Encoding]::UTF8.GetString($unprotected) # расшифрованный текст
}
catch [Microsoft.PowerShell.Commands.ProcessCommandException]{
$PSItem.Exception
return
}
При вызове
CODE:external(INT, "PS_File", "PS_File", "PowerShell.dll");
char Result[99999];
int res = PS_File(pathfolder()+"GetProcess.ps1", address(#Result[0]), sizearray(Result));
if(res)
{
messagebox(format(#Result[0]));
}
else messagebox("res = 0");
Возвращает res = 0
При запуске в PowerShell норм отрабатывает.
Как должен выглядеть код в Кибор или что я не так делаю? |
| |
|
| neba2101 |
Отправлено: 13 Августа, 2025 - 17:54:36
|


Мастер

Покинул форум
Сообщений всего: 199
Дата рег-ции: Февр. 2017
Репутация: 4

|
Zireael пишет: Цитата: Возвращает res = 0
А любой другой код из файла вообще работает?
Нет, возвращает res = 0 |
| |
|
| sedoi |
Отправлено: 13 Августа, 2025 - 18:05:24
|


Участник

Покинул форум
Сообщений всего: 85
Дата рег-ции: Апр. 2016
Репутация: 5

|
neba2101 пишет: Zireael пишет: Цитата: Возвращает res = 0
А любой другой код из файла вообще работает?
Нет, возвращает res = 0
Вот этот код работает CODE:external(INT, "PS_Command", "PS_Command", "PowerShell.dll");
char Result[99999];
// получить список папок на диске C:
int res = PS_Command("(Get-ChildItem -Path C:\ -Directory).Name", address(#Result[0]), sizearray(Result));
if(res) messagebox(format(#Result[0]));
else messagebox("res = 0");
|
| |
|
|