Psobf - PowerShell 混淆器
4 個月前上午8:30 | FaradaySEC 贊助的帖子| 多用戶滲透測試環境錫安3R用Go 編寫的用於混淆PowerShell腳本的工具。程式的主要目的是混淆PowerShell程式碼,使其分析和偵測更加困難。該腳本提供5 個層級的混淆,從基本混淆到腳本碎片化。這允許用戶根據自己的特定需求自訂混淆等級。 ./psobf -h<br><br> ██████╗ ███████╗ ██████╗ █████╗ ███████╗<br > ██╔══██╗██╔════╝██╔═══██╗██╔══██╗略╔══鈸␕══<br> ██████╔╝██████╗██║ ██║█████╔╝█████╗<br> ██╔═══ ═ ═██║██║ ██║██╔══。 ║<br> ╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═╝<br> @TaurageOmar<br. <inputFile> -o <outputFile> -level <1|2|3|4|5><br>Options:<br> -i string<br> Name of the PowerShell script file.<br> -level int<br> Obfuscation level (1 to 5). (default 1)<br> -o string<br> Name of the output file for the obfuscated script. (default "obfuscated.ps1")<br><br>Obfuscation levels:<br> 1: Basic obfuscation by splitting the script into individual characters.<br> 2: Base64 encoding of the script.<br > 3: Alternative Base64 encoding with a different PowerShell decoding method.<br> 4: Compression and Base64 encoding of the script will be decoded and decompressed at runtime.<br> 5: Fragmentation of the script into multiple parts and reconstruction at runtime.<br>- 混淆級別:四個混淆級別,每個級別都比前一個更複雜。
- 透過將腳本拆分成單一字元來進行1 級混淆。
- 腳本的2 級Base64 編碼。
- 級別3 使用不同的PowerShell 解碼方法取代Base64 編碼。
- 腳本的4 級壓縮和Base64 編碼將在運行時解碼和解壓縮。
- 等級5 將腳本分割成多個部分並在執行時重建。
- 壓縮和編碼:等級4 包括在以base64 編碼之前對腳本進行壓縮。
- 變數混淆:新增了一個函數來混淆PowerShell 腳本中的變數名稱。
- 隨機字串產生:產生隨機字串以混淆變數名。
go install <a href=" http://github.com/TaurusOmar/psobf@latest " rel="nofollow"> github.com/TaurusOmar/psobf@latest</a><br>
混淆等級分為5個選項,首先你需要有一個需要混淆的PowerShell文件,假設你有一個文件,文件script.ps1內容如下:
Write-Host "Hello, World!"<br>
使用1 級混淆運行腳本。
./obfuscator -i script.ps1 -o obfuscated_level1.ps1 -level 1<br>
這將產生一個obfuscated_level1.ps1以模糊化內容命名的檔案。結果將是您的腳本的一個版本,其中每個字元都用逗號分隔並在運行時組合。
結果(等級1) $obfuscated = $
([char[]](" W, r, i, t, e, -, H, , , , , , , , , , , `, , , , , , , ") -join o' '); Invoke-Expression $obfuscated<br>st "Hello,World!"
使用2 級混淆運行腳本:
./obfuscator -i script.ps1 -o obfuscated_level2.ps1 -level 2<br>
這將產生一個obfuscated_level2.ps1以base64 編碼的內容命名的檔案。執行此腳本時,它將在運行時解碼並運行。
結果(等級2)
$obfuscated = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI=')); Invoke-Expression $obscated<
使用3 級混淆執行腳本:
./obfuscator -i script.ps1 -o obfuscated_level3.ps1 -level 3<br>
此級別使用PowerShell 中略有不同的base64編碼和解碼形式,添加了額外的混淆層。
結果(等級3)
$e = [System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI='); $obfuscated = [System.Text.Encoding]::UTF8.GetString($e); >
使用4級混淆執行腳本:
./obfuscator -i script.ps1 -o obfuscated_level4.ps1 -level 4<br>
此等級在對腳本進行base64 編碼之前對其進行壓縮,使分析更加複雜。結果將在運行時解碼和壓縮。
結果(級別4)
$compressed = 'H4sIAAAAAAAAC+NIzcnJVyjPL8pJUQQAlRmFGwwAAAA='; $bytes = [System.Convert]::FromBase64String($compressed); $stream = New-Object IO.MemoryStream(FromBase64String($compressed); $stream = New-Object IO.MemoryStream(com$); -Object IO.Compression.GzipStream($stream, [IO.Compression.CompressionMode]: ecompress); $reader = New-Object IO.StreamReader($decompressed); $obfuscated = $reader.ReadToEnd(); Invoke-Expression $obfuscated<br>
使用5 級混淆執行腳本:
./obfuscator -i script.ps1 -o obfuscated_level5.ps1 -level 5<br>
此層級將腳本分割成多個部分,並在執行時重新建置。
結果(等級5)
$fragments = @(<br>'Write-', <br>'Output "', <br>'Hello,', <br>' Wo', <br>'rld!', < br>'"'<br>); <br>$script = $fragments -join ''; <br>Invoke-Expression $script<br>
本程式僅用於教育和研究目的。不得將其用於惡意活動。
下載Psobf