The result of tag: (1 results)

一种解密混淆PowerShell脚本的方法

by LauCyun May 14 11:06:30 5,464 views

最近在病毒样本分析时,遇到了不少使用PowerShell脚本的病毒程序,这些脚本基本都是经过混淆处理过的,给分析过程带来了一些麻烦。

PowerShell是运行在Windows操作系统上实现对系统以及应用程序进行管理自动化的命令行脚本环境,PowerShell需要.NET环境的支持,借助.NET Framework平台强大的类库,几乎让一切都成为可能。微软起“PowerShell”这个名字并不是夸夸其谈,它完全支持对象,其可读性,易用性,毫不夸张的说可以居所有Shell之首。

本文基于在分析PowerShell病毒过程中的经验,总结了解密被混淆过的PowerShell脚本的一些方法。

0x0 背景

如果想要去混淆,首先得了解有哪些混淆的方法。

在2017年的黑帽大会上,Daniel Bohannon、Lee Holmes专门对此做过演讲,PPT传送门:https://git.laucyun.com/myweb/blog-files/blob/master/ppt/us-17-Bohannon-Revoke-Obfuscation-PowerShell-Obfuscation-Detection-And%20Evasion-Using-Science.pdf

其方法主要包括:转义符(反引号)、简写与通配符*、脚本块、字符串处理、编码、自构造关键字替换等。

0x1 解密过程

脚本传送门:https://git.laucyun.com/myweb/blog-files/blob/master/ipc_ps1/ipc.ps1

1 解密ipc.ps1

首先,看一个已混淆的PowerShell脚本,如下图所示:


图1 已混淆PowerShell脚本

如图1所示,该PowerShell脚本已混淆的面目全非,所以只能先从头尾分析。可以发现混淆后其实只有一行代码,是一条Invoke-Expression命令,其官方文档的相关介绍如下:

The Invoke-Expression cmdlet evaluates or runs a specified string as a command and returns the results of the expression or command. Without Invoke-Expression, a string submitted at the command line would be returned (echoed) unchanged.

Runs commands or expressions on the local computer.

Invoke-Expression
      [-Command] <String>
      [<CommonParameters>]

只需将脚本开头的Invoke-Expression即可去混淆,然后执行如下命令:


图2 解密混淆代码

脚本ipc.ps1解密后的结果,如下图所示:


图3 PowerShell脚本ipc1.ps1

2 解密ipc1.ps1

脚本ipc1.ps1的内容可分为两部分:一是字符串拼接,二是拼接执行字符串命令,重点关注后者,它这里做了一点小小的混淆,正如图3选中部分所示,命令( $ENV:COmSPEc[4,15,25]-jOiN'')解密的结果是iex命令,如下图所示:


图4 解密IEX命令

同理,将脚本末尾|. ( $ENV:COmSPEc[4,15,25]-jOiN'')去除即可去混淆,并执行如下命令:


图5 解密PowerShell脚本ipc1.ps1

脚本ipc1.ps1解密后的结果如下图所示:


图6 PowerShell脚本ipc2.ps1

3 解密ipc2.ps1

脚本ipc2.ps1的原理同ipc1.ps1基本上都一致,它也分为两部分:一是字符串拼接,二是拼接执行字符串命令,命令( $eNV:ComSPeC[4,26,25]-jOiN'')解密的结果是iex命令。

同理,将脚本末尾|& ( $eNV:ComSPeC[4,26,25]-jOiN'')去除即可去混淆,并执行如下命令:


图7 解密PowerShell脚本ipc2.ps1

脚本ipc2.ps1解密后的结果如下图所示:


图8 PowerShell脚本ipc3.ps1

3 解密ipc3.ps1

脚本ipc3.ps1也可分为两部分:一是拼接执行字符串命令,二是字符串拼接,命令$vErboSEPrefErENCe.TOSTriNg()[1,3]+'X'-JOIN'')解密的结果是ieX命令,如下图所示:


图9 解密IEX命令

同理,将脚本末尾& ( $vErboSEPrefErENCe.TOSTriNg()[1,3]+'X'-JOIN'')去除即可去混淆,并执行如下命令:


图10 解密PowerShell脚本ipc3.ps1

解密结果如下图所示:


图11 PowerShell脚本ipc4.ps1

至此,脚本解密已完成。

0x2 参考

...

Tags Read More