参考文章:Understanding Invoke- “X” Special Character Encoding
首先根据分号将文档分为两部分,先看第一部分的内容:
可以根据大括号分一下行,并且先去掉前面的'[%' |%
:
在powershell中,可以使用${变量名}
的格式定义任意变量。
先看第一行,$()
是一个空的子表达式,等价于$null
,如果在前面添加上一个+
,就会发生格式转换,整个值变成0。所以第一行定义了一个变量${[[[[[[[}
,其值为0。
第二行定义了另一个变量${[[[[[[[[}
,它的值和${[[[[[[[}
一样,也是0。之后通过递增符号不断执行+1操作,从而用特殊符号表达了0~9十个数字。
我们可以把这里表达数字的十个变量替换成对应的数字了,此时上述代码的后三行变成了(去除了多余的空格):
然后看倒数第三行,@{}
是一个空的哈希表,如果把它放在子表达式符号$()
中,并转换为字符串,即"$(@{})"
,就会得到字符串“System.Collections.Hashtable
”,可以按照下面的索引做替换了
也就是说第7个索引是“C”,第19个索引是“H”,第20个索引是“a”。
$?
是一个自动变量,表示上一句指令的执行情况,如果执行成功,就表示True
。所以它的第1个索引就是”r”。
由此得到变量${[[[[[}
,值为[CHar]
根据上一小节的替换规则,可以得到倒数第二行等号右侧的值为"".inSert
。
Insert()
是System.String中的一个方法名,原型为:
使用
就可以得到上述一个方法对象。
倒数第二行做了一个格式转换,将方法对象转换成对应的字符串表达:
至此,就可以对最后一行做一个替换,得到变量${[[[[[[[}
,值为iex
目前得到的完整替换规则:
可以使用上述规则替换文档下半部分的脚本了。截取其中的部分内容(“CHar”换成了“Char”,不影响最终结果):
可以把iex后面的部分复制出来,用Notepad++做一下处理,去除[Char],删除空格,把+替换成空格。结果截取:
然后使用CyberChef的From CharCode做一下转换,得到脚本:
到这里其实已经得到了正常的Powershell脚本了。
还可以对其中的base64编码字符串进行一个解码,并根据代码进行一个异或处理,得到:
可以看到其中的C2地址42.192.152.182
(
'[%'
|
%
{ ${[[[[[[[}
=
+
$() }{ ${[[[[[[[[}
=
${[[[[[[[}} {${[[[[[[[[[[[}
=
+
+
${[[[[[[[} }{${[[[}
=
+
+
${[[[[[[[} } {${[[[[[[}
=
+
+
${[[[[[[[} }{${[[}
=
+
+
${[[[[[[[}} { ${[[[[[[[[[[[[}
=
+
+
${[[[[[[[} }{${[[[[[[[[[[}
=
+
+
${[[[[[[[} }{${[[[[[[[[[}
=
+
+
${[[[[[[[} } {${[[[[}
=
+
+
${[[[[[[[}} {${[}
=
+
+
${[[[[[[[} } {${[[[[[}
=
"["
+
"$( @{ })"
[ ${[[[[[[[[[}]
+
"$(@{ })"
[
"${[[[[[[[[[[[}"
+
"${[}"
]
+
"$( @{ } ) "
[
"${[[[}"
+
"${[[[[[[[[}"
]
+
"$? "
[ ${[[[[[[[[[[[} ]
+
"]"
}{${[[[[[[[}
=
"
".("
$(@{} )
"["
${[[[[[[[[[[[}${[[}
"] +"
$(@{})
"["
${[[[[[[[[[[[}${[[[[[[[[[[}
"]+"
$(@{} )
"[ ${[[[[[[[[} ] +"
$(@{ } )
"[ ${[[}] +"
$?
"[ ${[[[[[[[[[[[} ] + "
$(@{ } )
"[ ${[[[[[[} ] ) } {${[[[[[[[} ="
$( @{})
"["
${[[[[[[[[[[[}${[[}
"] +"
$( @{ } )
"[${[[} ]+"
${[[[[[[[}
"[ "
${[[[}${[[[[[[[[[}"] } ) ;
(
'[%'
|
%
{ ${[[[[[[[}
=
+
$() }{ ${[[[[[[[[}
=
${[[[[[[[}} {${[[[[[[[[[[[}
=
+
+
${[[[[[[[} }{${[[[}
=
+
+
${[[[[[[[} } {${[[[[[[}
=
+
+
${[[[[[[[} }{${[[}
=
+
+
${[[[[[[[}} { ${[[[[[[[[[[[[}
=
+
+
${[[[[[[[} }{${[[[[[[[[[[}
=
+
+
${[[[[[[[} }{${[[[[[[[[[}
=
+
+
${[[[[[[[} } {${[[[[}
=
+
+
${[[[[[[[}} {${[}
=
+
+
${[[[[[[[} } {${[[[[[}
=
"["
+
"$( @{ })"
[ ${[[[[[[[[[}]
+
"$(@{ })"
[
"${[[[[[[[[[[[}"
+
"${[}"
]
+
"$( @{ } ) "
[
"${[[[}"
+
"${[[[[[[[[}"
]
+
"$? "
[ ${[[[[[[[[[[[} ]
+
"]"
}{${[[[[[[[}
=
"
".("
$(@{} )
"["
${[[[[[[[[[[[}${[[}
"] +"
$(@{})
"["
${[[[[[[[[[[[}${[[[[[[[[[[}
"]+"
$(@{} )
"[ ${[[[[[[[[} ] +"
$(@{ } )
"[ ${[[}] +"
$?
"[ ${[[[[[[[[[[[} ] + "
$(@{ } )
"[ ${[[[[[[} ] ) } {${[[[[[[[} ="
$( @{})
"["
${[[[[[[[[[[[}${[[}
"] +"
$( @{ } )
"[${[[} ]+"
${[[[[[[[}
"[ "
${[[[}${[[[[[[[[[}"] } ) ;
{ ${[[[[[[[}
=
+
$() }
{ ${[[[[[[[[}
=
${[[[[[[[} }
{ ${[[[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[}
=
+
+
${[[[[[[[} }
{ ${[}
=
+
+
${[[[[[[[} }
{ ${[[[[[}
=
"["
+
"$( @{ })"
[ ${[[[[[[[[[}]
+
"$(@{ })"
[
"${[[[[[[[[[[[}"
+
"${[}"
]
+
"$( @{ } ) "
[
"${[[[}"
+
"${[[[[[[[[}"
]
+
"$? "
[ ${[[[[[[[[[[[} ]
+
"]"
}
{ ${[[[[[[[}
=
"
".("
$(@{} )
"["
${[[[[[[[[[[[}${[[}
"] +"
$(@{})
"["
${[[[[[[[[[[[}${[[[[[[[[[[}
"]+"
$(@{} )
"[ ${[[[[[[[[} ] +"
$(@{ } )
"[ ${[[}] +"
$?
"[ ${[[[[[[[[[[[} ] + "
$(@{ } ) "[ ${[[[[[[} ] ) }
{ ${[[[[[[[}
=
"$( @{})"
[
"${[[[[[[[[[[[}${[[}"
]
+
"$( @{ } ) "
[${[[} ]
+
"${[[[[[[[}"
[
"${[[[}${[[[[[[[[[}"
] }
{ ${[[[[[[[}
=
+
$() }
{ ${[[[[[[[[}
=
${[[[[[[[} }
{ ${[[[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[[[[[[}
=
+
+
${[[[[[[[} }
{ ${[[[[}
=
+
+
${[[[[[[[} }
{ ${[}
=
+
+
${[[[[[[[} }
{ ${[[[[[}
=
"["
+
"$( @{ })"
[ ${[[[[[[[[[}]
+
"$(@{ })"
[
"${[[[[[[[[[[[}"
+
"${[}"
]
+
"$( @{ } ) "
[
"${[[[}"
+
"${[[[[[[[[}"
]
+
"$? "
[ ${[[[[[[[[[[[} ]
+
"]"
}
{ ${[[[[[[[}
=
"
".("
$(@{} )
"["
${[[[[[[[[[[[}${[[}
"] +"
$(@{})
"["
${[[[[[[[[[[[}${[[[[[[[[[[}
"]+"
$(@{} )
"[ ${[[[[[[[[} ] +"
$(@{ } )
"[ ${[[}] +"
$?
"[ ${[[[[[[[[[[[} ] + "
$(@{ } ) "[ ${[[[[[[} ] ) }
{ ${[[[[[[[}
=
"$( @{})"
[
"${[[[[[[[[[[[}${[[}"
]
+
"$( @{ } ) "
[${[[} ]
+
"${[[[[[[[}"
[
"${[[[}${[[[[[[[[[}"
] }
{ ${[[[[[}
=
"["
+
"$( @{ })"
[
7
]
+
"$(@{ })"
[
"1"
+
"9"
]
+
"$( @{ } ) "
[
"2"
+
"0"
]
+
"$? "
[
1
]
+
"]"
}
{ ${[[[[[[[}
=
"
".("
$(@{} )
"["
14
"] +"
$(@{})
"["
16
"]+"
$(@{} )
"[ 0 ] +"
$(@{ } )
"[ 4] +"
$?
"[ 1 ] + "
$(@{ } ) "[
3
] ) }
{ ${[[[[[[[}
=
"$( @{})"
[
"14"
]
+
"$( @{ } ) "
[
4
]
+
"${[[[[[[[}"
[
"27"
] }
{ ${[[[[[}
=
"["
+
"$( @{ })"
[
7
]
+
"$(@{ })"
[
"1"
+
"9"
]
+
"$( @{ } ) "
[
"2"
+
"0"
]
+
"$? "
[
1
]
+
"]"
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!