fennek11
Goto Top

Powershell: De-Obsfuccation

Hallo,

wenn dieser Code ausgeführt wird:

('{2}{0}{1}{3}'-f 'ar','IA','seT-v','blE')  

ist das Ergebnis 'seT-varIAblE'

Nun sollen in einem komplexen Code diese Formate durch den Klartext ersetzt werden:

$Tx = "qwe.('{2}{0}{1}{3}'-f 'ar','IA','seT-v','blE')  
 tJ4 ('{0}{3}{1}{2}' -f 'sys','C','onvERt','tem.') asd ) ;"  

$re = $Tx | select-string -Pattern '\(.*?-f.*?\)' -AllMatches  

foreach ($rr in $re.Matches) {
    invoke-command -scriptblock { $rr.value }
}

Der Regex findet die Format-Ausdrücke in Klammern, aber es wird nicht in den Klartext gewandelt.

Danach sollte ein Replace-Befehl ausgeführt werden:

$Tx = $Tx.replace("('{2}{0}{1}{3}'-f 'ar','IA','seT-v','blE')", "set-variable")  

Wie könnte das gehen?

Content-ID: 579418

Url: https://administrator.de/contentid/579418

Ausgedruckt am: 25.11.2024 um 00:11 Uhr

144260
Lösung 144260 15.06.2020 aktualisiert um 13:31:50 Uhr
Goto Top
Wie könnte das gehen?
Mit Invoke-Expression face-wink
$Tx = "qwe.('{2}{0}{1}{3}'-f 'ar','IA','seT-v','blE')
 tJ4 ('{0}{3}{1}{2}' -f 'sys','C','onvERt','tem.') asd ) ;"

$result = [regex]::replace($Tx,'(?is)\(.*?-f.*?\)',{param($m) iex $m.Value})
$result
Fennek11
Fennek11 15.06.2020 um 13:34:27 Uhr
Goto Top
Vielen Dank,

auch der erste Ansatz geht (weniger elegant)

$Tx = "qwe.('{2}{0}{1}{3}'-f 'ar','IA','seT-v','blE')  
 tJ4 ('{0}{3}{1}{2}' -f 'sys','C','onvERt','tem.') asd ) ;"  

$re = $Tx.ToLower() | select-string -Pattern '\(.*?-f.*?\)' -AllMatches  

foreach ($rr in $re.Matches) {
    $neu =  invoke-expression  $rr.value
    $Tx = $Tx.tolower().Replace($rr.Value, $neu)
}
$Tx