反混淆Emotet powershell payload
字数 1198 2025-08-29 08:32:19

Emotet PowerShell Payload反混淆技术详解

一、Emotet概述

Emotet是2014年发现的银行木马,主要通过以下感染链传播:

  1. 用户收到钓鱼邮件并点击其中的链接
  2. 下载武器化的Word文档
  3. 文档诱使用户启用内容和宏
  4. 执行混淆的VBA代码
  5. VBA代码最终加载混淆的PowerShell命令

二、混淆技术原理

混淆技术主要有两个目的:

  1. 规避反病毒软件的签名检测
  2. 增加人工分析的时间和难度

三、Emotet使用的三种混淆方法

方法1:字符串替换

特征

  • 使用多个PowerShell的replace功能交换无用字符串和关键字
  • 最终生成有效的PowerShell代码

示例代码

('S'+'y'+'s'+'t'+'e'+'m').replace('S','I').replace('y','n').replace('s','v').replace('t','o').replace('e','k').replace('m','e')

反混淆方法

  1. 在文本编辑器中进行字符串替换
  2. 使用正则表达式加速处理
  3. 编写Python脚本自动化处理

Python反混淆注意事项

  • 处理字符串连接符+
  • 处理字符类型映射(如int转char)
  • 使用循环处理嵌套替换

方法2:字符串压缩

特征

  • 使用PowerShell内置的DeflateStream类解压缩和执行压缩流

示例代码

[IO.Compression.CompressionMode]::Decompress);$s.Read($b,0,$b.Length)|Out-Null;$d=(New-Object Text.UTF8Encoding).GetString($b);Invoke-Expression $d

反混淆方法

  1. 使用PowerShell解压缩字符串
  2. 手动移除前两个括号中的命令(通常是混淆的Invoke-Expression)
  3. 使用zlib库处理(需注意DeflateStream不需要zlib文件头)

Python实现

import zlib
# 使用zlib.MAX_WBITS负值跳过header位
decompressed = zlib.decompress(compressed_data, -zlib.MAX_WBITS)

方法3:ASCII码数组

特征

  • 使用数字数组表示ASCII字符
  • 通过切割函数分割字符串进行混淆

示例代码

$s=('73,110,118,111,107,101,45,69,120,112,114,101,115,115,105,111,110').split(',')
$d='';foreach($c in $s){$d+=[char][int]$c};Invoke-Expression $d

反混淆方法

  1. 使用split方法分割字符串
  2. 使用chr()函数将数字映射为字符

Python实现

ascii_array = '73,110,118,111,107,101,45,69,120,112,114,101,115,115,105,111,110'
decoded = ''.join([chr(int(c)) for c in ascii_array.split(',')])
# 结果为"Invoke-Expression"

四、Invoke-Expression的混淆技巧

PowerShell中常见的Invoke-Expression混淆方法:

  1. 使用缩写

    • 完整命令:Invoke-Expression
    • 标准缩写:iex
  2. 字符串拼接

    $vERBOsepreFErEncE.tOStRIng()[1,3]+'X'-JoIn''
    
    • $verbosepreference默认值为"SilentlyContinue"
    • 取第2和第4个字符(i和e)加上X组成"iex"
  3. 变量存储

    $a='Inv';$b='oke';$c='-Exp';$d='ression';$cmd=$a+$b+$c+$d
    

五、真实Payload分析

解混淆后的典型Emotet PowerShell payload功能:

  1. 使用WebClient类连接硬编码域名
  2. %TEMP%目录下载二进制文件
  3. 加载下载的文件
  4. 使用breaktry-catch确保下载完成前能连接到域名

六、分析建议

  1. 安全环境:始终在隔离的虚拟环境中分析恶意代码
  2. 分步处理:先识别混淆类型,再针对性解混淆
  3. 工具辅助:结合文本编辑器、正则表达式和脚本语言提高效率
  4. 关注IoC:解混淆后重点关注硬编码域名、URL和文件路径等指标

七、自动化反混淆脚本示例

import re
import zlib

def deobfuscate_replace(code):
    # 处理字符串替换型混淆
    while True:
        new_code = re.sub(r"\.replace$'(.)','(.)'$", lambda m: 
                         code.replace(m.group(1), m.group(2)), code)
        if new_code == code:
            break
        code = new_code
    return code

def deobfuscate_ascii(code):
    # 处理ASCII数组型混淆
    matches = re.findall(r"$(.*?)$\.split$'(.*?)'$", code)
    for match in matches:
        nums, sep = match
        decoded = ''.join([chr(int(c)) for c in nums.split(sep)])
        code = code.replace(f"({nums}).split('{sep}')", f"'{decoded}'")
    return code

def deobfuscate_deflate(code):
    # 处理Deflate压缩型混淆
    matches = re.findall(r"FromBase64String$'(.*?)'$", code)
    for match in matches:
        compressed = base64.b64decode(match)
        decompressed = zlib.decompress(compressed, -zlib.MAX_WBITS)
        code = code.replace(f"FromBase64String('{match}')", f"'{decompressed.decode()}'")
    return code

通过系统性地应用这些技术,可以有效分析Emotet等恶意软件使用的混淆PowerShell payload。

Emotet PowerShell Payload反混淆技术详解 一、Emotet概述 Emotet是2014年发现的银行木马,主要通过以下感染链传播: 用户收到钓鱼邮件并点击其中的链接 下载武器化的Word文档 文档诱使用户启用内容和宏 执行混淆的VBA代码 VBA代码最终加载混淆的PowerShell命令 二、混淆技术原理 混淆技术主要有两个目的: 规避反病毒软件的签名检测 增加人工分析的时间和难度 三、Emotet使用的三种混淆方法 方法1:字符串替换 特征 : 使用多个PowerShell的replace功能交换无用字符串和关键字 最终生成有效的PowerShell代码 示例代码 : 反混淆方法 : 在文本编辑器中进行字符串替换 使用正则表达式加速处理 编写Python脚本自动化处理 Python反混淆注意事项 : 处理字符串连接符 + 处理字符类型映射(如int转char) 使用循环处理嵌套替换 方法2:字符串压缩 特征 : 使用PowerShell内置的 DeflateStream 类解压缩和执行压缩流 示例代码 : 反混淆方法 : 使用PowerShell解压缩字符串 手动移除前两个括号中的命令(通常是混淆的Invoke-Expression) 使用zlib库处理(需注意DeflateStream不需要zlib文件头) Python实现 : 方法3:ASCII码数组 特征 : 使用数字数组表示ASCII字符 通过切割函数分割字符串进行混淆 示例代码 : 反混淆方法 : 使用split方法分割字符串 使用chr()函数将数字映射为字符 Python实现 : 四、Invoke-Expression的混淆技巧 PowerShell中常见的Invoke-Expression混淆方法: 使用缩写 : 完整命令: Invoke-Expression 标准缩写: iex 字符串拼接 : $verbosepreference 默认值为"SilentlyContinue" 取第2和第4个字符(i和e)加上X组成"iex" 变量存储 : 五、真实Payload分析 解混淆后的典型Emotet PowerShell payload功能: 使用 WebClient 类连接硬编码域名 在 %TEMP% 目录下载二进制文件 加载下载的文件 使用 break 和 try-catch 确保下载完成前能连接到域名 六、分析建议 安全环境 :始终在隔离的虚拟环境中分析恶意代码 分步处理 :先识别混淆类型,再针对性解混淆 工具辅助 :结合文本编辑器、正则表达式和脚本语言提高效率 关注IoC :解混淆后重点关注硬编码域名、URL和文件路径等指标 七、自动化反混淆脚本示例 通过系统性地应用这些技术,可以有效分析Emotet等恶意软件使用的混淆PowerShell payload。