混淆 cmd 中的运算符和引用优先级

Operators and quote precedence in obfuscated cmd

我无法理解这将如何评估,它来自我正在剖析的一个恶意软件,所以要小心。

我已经删除了 foor 循环中可能包含恶意指令的 ascii 乱码和整数。所以应该可以,有需要我可以提供

如果我在我的基本理解允许的范围内剥离代码,它试图通过这个:

cmd.exe /c CmD /V/C"set foo=ASCIIgibberish bazz=moreASCIIgibberish&&for %f in (BunchOfIntegers)do set bar=!bar!!foo:~%f,1!&&if %f == 88 powershell.exe "!bar:~6!""

收件人:

Interaction.Shell(`here`,0)

因此,我不确定 cmd 和 powershell 如何解析引号或变量名,因为我并不真正熟悉 powershell 和 cmd 优先级。

我想知道的是

cmd 会将 ! 解释为逻辑非吗?

如果是这样,cmd 或 powershell 如何评估文字值的否定?,我想假设它看到 ascii 值并在逻辑上否定它,(0001 变成 1110)但不确定。

我是否正确地假设这只是 powershell.exe barSubstringStartingAt6 的一种混淆方式,因为在我看来 bar 只是从 foo 中分配了字符 88,即 79字符很长,所以不可能知道 bar[6] 会是什么。

他们只是想将溢出的地址发送到 powershell 吗?

正如@MC ND 和@lit 所解释的那样,!var! 不是逻辑运算符,而是延迟扩展语法的 shorthand。因此,该语句只是通过使用 for 循环中的 int 作为索引重新排列变量中的字符