前言
之前我们生成的shellcode都是C的格式的,今天说一下对Powershell格式的shellcode进行免杀。Powershell过火绒和360可能还行,但是想要过WD是比较难的,因为WD是微软研发的,Powershell也是微软开发的语言,自家的东西自家最清楚嘛。
实验环境
360、火绒、WD、VT。
Powershell上线CS
CS生成Powershell有两种模式,一种是命令模式,一种是文件模式。
命令模式生成的打开是一串命令。
复制到powershell执行即可上线
而文件模式生成的是一个可执行的文件,里面代码啥的都封装好的了。
直接执行PS文件即可上线。
原生态的无论是哪个杀软,肯定都会被杀掉的,所以就不测试了。
Powershell混淆
手工混淆
因为Powershell这个语言太小众的,我也没系统学过这个玩意,只能大致看懂一点。网上公开的加密的脚本也比较少,所以可能选择不是很多。我们利用Windows自带的PowerShell ISE对它进行编辑。
我们来测试一下杀软究竟是对那一部分代码进行检测,当我们删除了$DoIt 变量里面的代码之后再去检测,发现是没有检测到风险的,那就说明是$Dolt变量里面的代码的问题。
$DoIt = @'
...... //删除变量里面的代码
'@
如此一来我们的目标就很明确了,就是对$Dolt变量里面的代码做文章即可,我们直接对其进行base64编码。然后再替换回去,变成如下。
再在执行的前,对$DoIt这个变量进行解码即可,解码语句网上搜一下就行,我也不会写。
$bb=[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($x))
保存去测试一下,火绒没过。
WD没过。
360也没过
VT报17个。