• XSS.stack #1 – первый литературный журнал от юзеров форума

Обфусцирую ваш Power Shell скрипт

$x = ‘hello, xss’
Write-Host $x
Write-Host [Math]::Pow(2,2)

Давай для примера это.
Bash:
$aJjbuqEmipohvTexRGW = $(rsXWaBJpB $([char]$([int]::Parse("97")) + "" + [char]$([int]::Parse("71")) + "" + [char]$([int]::Parse("86")) + "" + [char]$([int]::Parse("115")) + "" + [char]$([int]::Parse("98")) + "" + [char]$([int]::Parse("71")) + "" + [char]$([int]::Parse("56")) + "" + [char]$([int]::Parse("115")) + "" + [char]$([int]::Parse("73")) + "" + [char]$([int]::Parse("72")) + "" + [char]$([int]::Parse("104")) + "" + [char]$([int]::Parse("122")) + "" + [char]$([int]::Parse("99")) + "" + [char]$([int]::Parse("119")) + "" + [char]$([int]::Parse("61")) + "" + [char]$([int]::Parse("61")) + ""))
W'r'ite-'H'o's't $aJjbuqEmipohvTexRGW
W'r'i't'e-H'o'st $aJjbuqEmip([Math]::Pow(2,2))

Function rsXWaBJpB([string]$aJjbuqEmipText)
{
$aJjbuqEmipsDecodedString=[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($aJjbuqEmipText))
return $aJjbuqEmipsDecodedString
}
 
[Math]::Pow(2,2)
[Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($aJjbuqEmipText))

Апи вызовы дотнета не морфит. И аргументы вызовов не трогает тоже, как я понял.
2) что это за переменная во втором Write-Host не совсем понятно
$aJjbuqEmip([Math]::Pow(2,2))
Странная конструкция. Откуда она берётся и зачем ты так пишешь. Поясни плз.
3) ренейм переменных. Как он у тебя работает? Рандомные префиксы приписываются? Или все имя рандомное?
В шаблоне функции оригинальные имена полагаю те, что идут после рандомного префикса $aJjbuqEmipsDecodedString. Такая тема сигнатурится.
4) можешь пожалуйста выдать несколько билдов с обфускатора скрипта выше? Насколько они будут уникальны? Код полиморфен или выдаёт каждый раз одно и то же при одном и том же исходнике?
 
Апи вызовы дотнета не морфит.
Над этим ещё работаю.
И аргументы вызовов не трогает тоже
Морфит только строки, мат. операции с числами ещё пишу
3) ренейм переменных. Как он у тебя работает? Рандомные префиксы приписываются? Или все имя рандомное?
Все имена рандомные
Насколько они будут уникальны?
Разные имена переменных, функций, разные числа(при конкатенации строк), рандом удаление префикса "System.",
дут после рандомного префикса $aJjbuqEmipsDecodedString. Такая тема сигнатурится.
Вот тут кстати баг, имя должно быть рандомное.
Насколько они будут уникальны? Код полиморфен или выдаёт каждый раз одно и то же при одном и том же исходнике?
Это уже будет зависеть от кол-ва вызовов дотнет методов. Сверю, как только допишу морф для вызовов.
 
Рандомизация имён не такая простая в пш как может показаться.
например, обфусцируй этот кусок кода(сделай ренейминг переменных) своим движком. На 99% уверен, что найдёшь у себя баги на этом кейсе.
Код:
function foo{
param($x, $y)
return $X + $Y
}
$(foo -x 6 -y 6) | Out-File -FilePath "here.result"
 
Рандомизация имён не такая простая в пш как может показаться.
например, обфусцируй этот кусок кода(сделай ренейминг переменных) своим движком. На 99% уверен, что найдёшь у себя баги на этом кейсе.
Код:
function foo{
param($x, $y)
return $X + $Y
}
$(foo -x 6 -y 6) | Out-File -FilePath "here.result"
Ты прав, нашёл баги, спасибо. Всё потому-что код считает, что $x и $X разные переменные, иду фиксить ;)
 
Не только по этому. Я не зря кинул именно такой пример. Ты не заметил аргументы у функции foo -x -y. Твой движок ведь найдёт и изменит название переменных в param($x, $y), но чтобы ничего не сломалось, надо менять и при вызове аргументы у foo. А если у твоего foo аргумент будет называться так же, как и у популярного cmdlet, как в примере у Out-File -FilePath например? Как понять, что -FilePath менять не нужно в Out-File, а если будет в коде определение функции foo с аргументом -FilePath, то ее менять нужно? Для этого надо делать трекинг функций и ее аргументов, потом отслеживать, какие функции объявлены в коде, а какие по сути импорт с пш. В иных случаях твой ренейминг будет работать через жопу.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх