专栏名称: FreeBuf
国内关注度最高的全球互联网安全新媒体
目录
相关文章推荐
看雪学苑  ·  SDC2024议题聚焦 | ... ·  昨天  
FreeBuf  ·  可绕过安全防护!EDR ... ·  2 天前  
金融八卦女频道  ·  听泉鉴宝还没翻车?被捧上神坛的“文玩大师”, ... ·  2 天前  
金融八卦女频道  ·  听泉鉴宝还没翻车?被捧上神坛的“文玩大师”, ... ·  2 天前  
商学院  ·  又一里程碑事件!微信鸿蒙版上架内测! ·  4 天前  
商学院  ·  又一里程碑事件!微信鸿蒙版上架内测! ·  4 天前  
瑞恩资本RyanbenCapital  ·  字节跳动CFO 高准Julie ... ·  6 天前  
瑞恩资本RyanbenCapital  ·  字节跳动CFO 高准Julie ... ·  6 天前  
51好读  ›  专栏  ›  FreeBuf

psobf:一款针对PowerShell的代码混淆处理工具

FreeBuf  · 公众号  · 互联网安全  · 2024-10-14 19:07

正文


关于psobf


psobf是一款针对PowerShell的代码混淆处理工具,广大安全研究人员可以轻松使用该工具完成对PowerShell代码的安全加固和混淆处理。



psobf基于Go语言开发,是一款PowerShell脚本工具。该工具的主要目的是混淆 PowerShell 代码,增强代码的安全性。该脚本提供 5 个级别的混淆,从基本混淆到脚本碎片化。这允许用户根据自己的特定需求定制混淆级别。


功能介绍


1、混淆级别:四个混淆级别,每个级别都比前一个更复杂。

2、通过将脚本拆分成单个字符来进行 1 级混淆。

3、脚本的 2 级为 Base64 编码。

4、级别 3 使用不同的 PowerShell 解码方法替代 Base64 编码。

5、脚本的 4 级压缩和 Base64 编码将在运行时解码和解压缩。

5、级别 5 将脚本分割成多个部分并在运行时重建。

6、压缩和编码:级别 4 包括在以 base64 编码之前对脚本进行压缩。

7、变量混淆:添加了一个函数来混淆 PowerShell 脚本中的变量名称。

8、随机字符串生成:生成随机字符串以混淆变量名。


工具要求


Go


工具安装


由于该工具基于Go开发,因此我们首先需要在本地设备上安装并配置好最新版本的Go环境。


源码获取


接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/TaurusOmar/psobf.git

Go安装


go install github.com/TaurusOmar/psobf@latest


工具使用


混淆级别示例


混淆级别分为5个选项,首先你需要有一个需要混淆的PowerShell文件,假设你有一个文件,文件名称script.ps1如下:

Write-Host "Hello, World!"

级别 1:基本混淆


使用 1 级混淆运行脚本:

./obfuscator -i script.ps1 -o obfuscated_level1.ps1 -level 1

这将生成一个obfuscated_level1.ps1以模糊化内容命名的文件。结果将是你的脚本的一个版本,其中每个字符都用逗号分隔并在运行时组合。


结果(级别 1):

$obfuscated = $([char[]]("`W`,`r`,`i`,`t`,`e`,`-`,`H`,`o`,`s`,`t`,` `,`"`,`H`,`e`,`l`,`l`,`o`,`,` `,`W`,`o`,`r`,`l`,`d`,`!`,`"`") -join ''); Invoke-Expression $obfuscated

第 2 级:Base64 编码


使用 2 级混淆运行脚本:

./obfuscator -i script.ps1 -o obfuscated_level2.ps1 -level 2


这将生成一个obfuscated_level2.ps1以 base64 编码的内容命名的文件。执行此脚本时,它将在运行时解码并运行。


结果(级别 2):

$obfuscated = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI=')); Invoke-Expression $obfuscated


第 3 级:替代 Base64 编码


使用 3 级混淆执行脚本:

./obfuscator -i script.ps1 -o obfuscated_level3.ps1 -level 3

此级别使用 PowerShell 中略有不同的 base64 编码和解码形式,添加了额外的混淆层。


结果(级别 3):

$e = [System.Convert]::FromBase64String('V3JpdGUtSG9zdCAiSGVsbG8sIFdvcmxkISI='); $obfuscated = [System.Text.Encoding]::UTF8.GetString($e); Invoke-Expression $obfuscated


级别 4:压缩和 Base64 编码


使用4级混淆执行脚本:

./obfuscator -i script.ps1 -o obfuscated_level4.ps1 -level 4

此级别在对脚本进行 base64 编码之前对其进行压缩,使分析更加复杂。结果将在运行时解码和解压。


结果(级别 4):

$compressed = 'H4sIAAAAAAAAC+NIzcnJVyjPL8pJUQQAlRmFGwwAAAA='; $bytes = [System.Convert]::FromBase64String($compressed); $stream = New-Object IO.MemoryStream(, $bytes); $decompressed = New-Object IO.Compression.GzipStream($stream, [IO.Compression.CompressionMode]::Decompress); $reader = New-Object IO.StreamReader($decompressed); $obfuscated = $reader.ReadToEnd(); Invoke-Expression $obfuscated


第五级:脚本碎片化


使用 5 级混淆运行脚本:

./obfuscator -i script.ps1 -o obfuscated_level5.ps1 -level 5


此级别将脚本分割成多个部分,并在运行时重新构建。


结果(级别 5):

$fragments = @(
'Write-',
'Output "',
'Hello,',
' Wo',
'rld!',
'"'
);
$script = $fragments -join '';
Invoke-Expression $script


工具使用演示




项目地址


psobf

https://github.com/TaurusOmar/psobf


FreeBuf粉丝交流群招新啦!
在这里,拓宽网安边界
甲方安全建设干货;
乙方最新技术理念;
全球最新的网络安全资讯;
群内不定期开启各种抽奖活动;
FreeBuf盲盒、大象公仔......
扫码添加小蜜蜂微信回复「加群」,申请加入群聊