Comments 11
Львиная доля возможностей и команд powershell, применимых для работы с удалёнными компьютерами, требуют открытых smb портов (135, 445). Но для ряда функций есть обходные решения, позволяющие выполнить то же самое, но в разы быстрее и без необходимости открытых портов.
Где-нибудь есть сводная информация, какие функции и методы какие порты используют для работы, и какие сервисы нужны на удалённом компе? (например, RPC, WMI, RemoteRegistry, etc.)
Приходится разбираться индивидуально с каждым случаем и искать обходные пути.
Где-нибудь есть сводная информация, какие функции и методы какие порты используют для работы, и какие сервисы нужны на удалённом компе? (например, RPC, WMI, RemoteRegistry, etc.)
Приходится разбираться индивидуально с каждым случаем и искать обходные пути.
Сводной информации не встречал, но для универсальности и минимизации открытия доступов можно заворачивать как отдельные команды, так и целые скрипты, в Invoke-Command (в том числе фоново, флагом AsJob). Ему, в свою очередь, необходимо указывать сеанс удалённого компьютера, через аргумент SessionName. Тогда потребуется открывать только порт WinRM (или два, если нужны и http, и https), потому что работа с сервисами будет выполняться локально на удалённой станции. А ещё с какой-то версии PowerShell можно поменять «транспорт» на SSH.
А как в powershell поправить несколько байт в бинарном файле (например контрольную сумму в PE файле)?
Get-FileHash <filepath> -Algorithm MD5
# Запускать ярлык командной строки в меню "Пуск" от имени Администратора
[byte[]]$bytes = Get-Content -Path "$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk" -Encoding Byte -Raw
$bytes[0x15] = $bytes[0x15] -bor 0x20
Set-Content -Path "$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk" -Value $bytes -Encoding Byte -Force
А есть возможность оформить это в виде подпрограммы?
То есть?
Типа такого:
Что бы не писать "$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk" много раз.
#!/usr/bin/lua
function patch(filename)
local f,err=io.open(filename,"wb")
if not f then error(err) end
return function(body)
body:gsub("%s*(%x+)%s+(%x+)",function(ofs,val)
ofs=tonumber(ofs,16)
val=tonumber(val,16)
print(string.format("write 0x%08X %02X",ofs,val))
f:seek("set",ofs) f:write(string.char(val))
end)
f:close()
end
end
patch "a.txt" [[
00000010 0A
000001FE A5
000001FF 5A
]]
patch "b.txt" [[
00000200 FF
00000201 C8
]]
Что бы не писать "$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk" много раз.
# Запускать ярлык командной строки в меню "Пуск" от имени Администратора
function bytes
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory = $True)]
$Path
)
[byte[]]$bytes = Get-Content -Path $Path -Encoding Byte -Raw
$bytes[0x15] = $bytes[0x15] -bor 0x20
Set-Content -Path $Path -Value $bytes -Encoding Byte -Force
}
# bytes -Path "$env:APPDATA\Microsoft\Windows\Start menu\Programs\System Tools\Command Prompt.lnk"
Sign up to leave a comment.
Что такое Windows PowerShell и с чем его едят? Часть 5: Доступ к внешним объектам