请求分析PowerShell脚本功能:是否解码Base64并收集系统IO?
没问题,我来帮你拆解这个PowerShell脚本的执行逻辑,一步一步扒清楚它到底在做什么:
脚本执行行为详细分析
我们把这个压缩的命令拆成几个核心步骤来看:
读取并解码文件内容
- 脚本先定义了两个变量:
$p指向目标txt文件路径C:\Users\user\6a54473f352d947ea77fc3e8c2637d39.txt,$xk是一串固定的密钥字符串tdVmiOyHNCDnRSPhuBblQTxFcaYUsZvXeIzAwEroJMKqjLGkpgfW。 - 接着用
[System.IO.File]::ReadAllText($p)读取该txt文件的全部内容,再通过[System.Convert]::FromBase64String()把读取到的内容转换成Base64解码后的字节数组,存到$xb变量里。
- 脚本先定义了两个变量:
销毁原始文件
- 执行
remove-item $p直接删除刚才读取的txt文件,这一步会销毁原始的输入载体,不留痕迹。
- 执行
XOR二次解密
- 这是核心的解密逻辑:用嵌套循环把Base64解码后的字节数组
$xb的每一个字节,依次和密钥字符串$xk的每个字符的ASCII值做异或(XOR)运算。 - 简单说就是:字节数组的每个元素按顺序和密钥的每个字符配对异或,如果字节数组长度比密钥长,密钥会循环重复使用,直到所有字节都处理完成。
- 这是核心的解密逻辑:用嵌套循环把Base64解码后的字节数组
执行解密后的代码
- 把异或解密后的字节数组通过
[System.Text.Encoding]::UTF8.GetString($xb)转换成UTF8编码的字符串,最后用iex $xb(Invoke-Expression的缩写)执行这个字符串里的PowerShell代码。
- 把异或解密后的字节数组通过
针对你疑问的解答
- 是否解码Base64内容? 是的,脚本第一步就明确对txt文件内容做了Base64解码,之后还做了XOR二次解密。
- 是否收集系统IO信息? 从当前这段脚本的逻辑来看,它本身没有直接收集系统IO信息的代码——它的核心是解密并执行隐藏的代码,至于解密后执行的代码会不会做这件事,我们没法从当前脚本判断,因为那部分内容是加密在txt文件里的。
- 上下文信息是否足够? 对于脚本本身的执行流程,我们已经能完全分析清楚,但对于它最终要执行的具体代码行为,因为txt文件的内容是加密的,我们没有足够信息判断,只能确定它会执行解密后的任意PowerShell代码。
内容的提问来源于stack exchange,提问作者Mysicksi




