Кибор » Кибор - Интегрированная среда разработки ботов » Связка Кибор с другими программами » Использование Powershell

Страниц (2): [1] 2 »
 

1. Zireael - 08 Января, 2025 - 12:32:41 - перейти к сообщению
Длл позволяет выполнять команды 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.
2. neba2101 - 10 Августа, 2025 - 04:17:19 - перейти к сообщению
Приветствую! Можно пример как должен выглядеть код ниже в GetProcess.ps1 и в Кибор вывести значение decrypted? Спасибо!

Просто в PowerShell код работает как надо, но не пойму как получить значение decrypted в Кибор.

CODE:
Add-Type -AssemblyName System.Security
$encrypted = "AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAASyDqgb2CE24Rv3n9c7toAAAAAACAAAAAAAQZgAAAAEAACAAAAAGMhJknBN0yub6l/vHQwiPQj9QkmiVnP0ccGytg7bmrgAAAAAOgAAAAAIAACAAAADLCYtB9IBWNzJjrh18cGNb964GKLEmyY1+axY2GUgx6yAAAAAbfyOLx3rZqkt97T1NzuLvC2iyZwNR8+2fv32xhdJVwEAAAAATHTjxsekAf15NE2/YQivXAlFn+GaUWl63FOfpMe/z7asyNLj2hOTNJWz8v4Wz3Fw4DqyGWTyseOiclZEhXwCY"
$bytes = [Convert]::FromBase64String($encrypted)
$decrypted = [System.Security.Cryptography.ProtectedData]::Unprotect($bytes, $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser)
[System.Text.Encoding]::UTF8.GetString($decrypted)


И, если нетрудно, как зашифровать строку таким способом. Спасибо!
3. Zireael - 10 Августа, 2025 - 05:13:46 - перейти к сообщению
 Цитата:
как должен выглядеть код ниже в 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
}
4. neba2101 - 12 Августа, 2025 - 15:23:39 - перейти к сообщению
 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 норм отрабатывает.
Как должен выглядеть код в Кибор или что я не так делаю?
5. Zireael - 13 Августа, 2025 - 05:29:00 - перейти к сообщению
 Цитата:
Возвращает res = 0

А любой другой код из файла вообще работает?
6. konctantin777 - 13 Августа, 2025 - 06:07:04 - перейти к сообщению
День добрый.
Приведённые примеры работают. Правильно ли понимаю, что можно вставлять любой код в
CODE:
int res = PS_Command(тут код)

Пытаюсь вставить большой типа: (часть кода)
CODE:
Преобразуем строку в хеш-таблицу
$ownershipMap = @{}
if (-not [string]::IsNullOrEmpty($ownershipMapStr)) {
$pairs = $ownershipMapStr -split ';'
foreach ($pair in $pairs) {
if (-not [string]::IsNullOrEmpty($pair)) {
$key, $value = $pair -split ':', 2
$ownershipMap[$key] = $value
}
}
}

# Проверяем возможность
function Test-PropertyPurchase {
param(
[string]$playerName,
[string]$propertyToBuy,
[hashtable]$ownershipMap,
[hashtable]$boardDefinition
)

Пока не получается...
(Добавление)
Кибор воспринимает код как "свой". Надо как то делать через string, чтобы весь код в кавычках был ?
7. Zireael - 13 Августа, 2025 - 06:23:43 - перейти к сообщению
 Цитата:
Надо как то делать через string, чтобы весь код в кавычках был ?

Да, все спец. символы придётся экранировать.
Большой код проще выполнить из файла.
8. neba2101 - 13 Августа, 2025 - 09:54:36 - перейти к сообщению
 Zireael пишет:
 Цитата:
Возвращает res = 0

А любой другой код из файла вообще работает?


Нет, возвращает res = 0
9. sedoi - 13 Августа, 2025 - 10:05:24 - перейти к сообщению
 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");
10. neba2101 - 14 Августа, 2025 - 14:19:10 - перейти к сообщению
Из файла не получилось.

Вот так выдаёт только первый символ декодированного текста
CODE:
external(INT, "PS_Command", "PS_Command", "PowerShell.dll");
char Result[99999];
string rn=formatic(13)+formatic(10);

string MyTextProtected = "AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAASyDqgb2"+
"CE24Rv3n9c7toAAAAAACAAAAAAAQZgAAAAE"+
"AACAAAAAGMhJknBN0yub6l/vHQwiPQj9Qkm"+
"iVnP0ccGytg7bmrgAAAAAOgAAAAAIAACAAA"+
"ADLCYtB9IBWNzJjrh18cGNb964GKLEmyY1+"+
"axY2GUgx6yAAAAAbfyOLx3rZqkt97T1NzuL"+
"vC2iyZwNR8+2fv32xhdJVwEAAAAATHTjxse"+
"kAf15NE2/YQivXAlFn+GaUWl63FOfpMe/z7"+
"asyNLj2hOTNJWz8v4Wz3Fw4DqyGWTyseOiclZEhXwCY";

string sss ="Add-Type -AssemblyName System.Security"+rn+
"$scope = [System.Security.Cryptography.DataProtectionScope]::CurrentUser"+rn+
"$bytes = [Convert]::FromBase64String(^"" + MyTextProtected + "^")"+rn+
"$unprotected = [System.Security.Cryptography.ProtectedData]::Unprotect($bytes, $null, $scope)"+rn+
"[System.Text.Encoding]::UTF8.GetString($unprotected)";

int res = PS_Command(sss, address(#Result[0]), sizearray(Result));
if(res) messagebox(format(#Result[0]));
else messagebox("res = 0");


Как вывести весь декодированный текст? Спасибо!

Powered by ExBB FM 1.0 Final