利用Ghidra分析恶意软件Emotet
字数 1563 2025-08-05 11:39:26

使用Ghidra分析恶意软件Emotet的详细教学文档

1. 工具和恶意软件简介

1.1 Ghidra简介

Ghidra是由美国国家安全局(NSA)开发的开源逆向工程工具套件,提供反汇编、反编译、脚本编写等功能。主要特点包括:

  • 完全免费开源
  • 支持多种处理器架构
  • 提供Python和Java API
  • 内置脚本管理器
  • 具有强大的反编译能力

1.2 Emotet简介

Emotet是一种高度复杂的银行木马恶意软件,特点包括:

  • 最初于2014年被发现
  • 主要通过垃圾邮件传播
  • 具有模块化结构
  • 使用多种反分析技术
  • 不断更新进化

2. 分析准备工作

2.1 创建Ghidra项目

  1. 启动Ghidra
  2. 选择"File" > "New Project"
  3. 创建名为"Emotet"的项目
  4. 通过"File" > "Import File"导入样本文件

2.2 初始分析设置

  1. 双击文件名在CodeBrowser中打开
  2. 在Symbol Tree窗口(Window > Symbol Tree)中过滤"entry"找到入口点
  3. 熟悉Ghidra界面:
    • 左侧:符号树、函数列表
    • 中间:反汇编视图(Listing)
    • 右侧:反编译视图(Decompile)

3. 分析加密字符串

3.1 识别字符串解密函数

  1. 在反汇编视图中查找可疑函数调用
  2. 识别出位于0x00401b70的字符串解密函数
  3. 重命名函数为"decode_strings"(右键 > Edit Label)

3.2 解密函数分析

函数特征:

  • 参数1(ECX):加密字符串偏移量
  • 参数2(EDX):XOR密钥
  • 返回值(EAX):解密后字符串的堆内存地址

解密算法:

  1. 第一个DWORD与密钥异或得到字符串长度
  2. 后续DWORD与密钥异或得到实际字符串内容

3.3 自动化解密脚本

使用Ghidra Python脚本自动解密字符串:

from ghidra.program.model.symbol import SourceType
from ghidra.program.model.listing import CodeUnit

# 查找所有引用decode_strings的地方
refs = getReferencesTo(toAddr(0x00401b70))

for ref in refs:
    # 获取引用位置
    from_addr = ref.getFromAddress()
    
    # 向前查找MOV ECX和MOV EDX指令
    # 这里需要实现查找逻辑...
    
    # 获取加密字符串和密钥
    # 实现解密逻辑...
    
    # 添加注释
    cu = currentProgram.getListing().getCodeUnitAt(from_addr)
    cu.setComment(CodeUnit.EOL_COMMENT, decrypted_str)
    
    # 修补二进制
    # 实现修补逻辑...

完整脚本见:ghidra_emotet_decode_strings.py

4. 分析API哈希解析

4.1 识别API解析函数

  1. 查找处理API哈希的函数(位于0x401230)
  2. 重命名为"decodeAPINames"

4.2 解析机制分析

  1. 获取DLL句柄:
    • kernel32.dll和ntdll.dll通过PEB枚举获取
    • 其他DLL通过LoadLibraryW加载(名称已加密)
  2. 读取DLL导出表
  3. 计算每个API名称的哈希值
  4. 与传入哈希比较,匹配则保存API地址

4.3 自动化解析脚本

  1. 准备DLL导出函数列表:

    • 为每个DLL创建导出函数列表文件
    • 如kernel32.list、ntdll.list等
  2. 使用Python脚本解析哈希:

# 查找所有引用decodeAPINames的地方
refs = getReferencesTo(toAddr(0x00401230))

for ref in refs:
    from_addr = ref.getFromAddress()
    
    # 确定处理的是哪个DLL
    # 实现DLL识别逻辑...
    
    # 加载对应的API列表文件
    with open(dll_name + ".list") as f:
        apis = f.read().splitlines()
    
    # 计算每个API的哈希并比较
    # 实现哈希计算和比较逻辑...
    
    # 标记解析出的API名称
    # 实现标记逻辑...

完整脚本见:ghidra_emotet_decode_hash.py

5. 实用技巧

5.1 使用脚本管理器

  • 通过工具栏图标或Window > Script Manager打开
  • 可以运行、管理和创建脚本
  • 提供大量示例脚本

5.2 常用操作

  1. 重命名符号:右键 > Edit Label 或按L
  2. 添加注释:右键 > Comments 或按;
  3. 查看交叉引用:右键 > References
  4. 创建可重复注释:右键 > Comments > Set Repeatable Comment

5.3 调试技巧

  • 结合Ollydbg或WinDbg动态分析
  • 使用Ghidra的静态分析与动态调试互补
  • 对复杂函数先在调试器中运行理解功能

6. 总结

本教程详细介绍了使用Ghidra分析Emotet恶意软件的关键技术:

  1. 识别并自动化解密XOR加密的字符串
  2. 解析API名称哈希并还原实际API调用
  3. 利用Ghidra脚本提高分析效率
  4. 结合静态和动态分析技术

通过掌握这些技术,分析人员可以更高效地分析Emotet及其他使用类似混淆技术的恶意软件。

使用Ghidra分析恶意软件Emotet的详细教学文档 1. 工具和恶意软件简介 1.1 Ghidra简介 Ghidra是由美国国家安全局(NSA)开发的开源逆向工程工具套件,提供反汇编、反编译、脚本编写等功能。主要特点包括: 完全免费开源 支持多种处理器架构 提供Python和Java API 内置脚本管理器 具有强大的反编译能力 1.2 Emotet简介 Emotet是一种高度复杂的银行木马恶意软件,特点包括: 最初于2014年被发现 主要通过垃圾邮件传播 具有模块化结构 使用多种反分析技术 不断更新进化 2. 分析准备工作 2.1 创建Ghidra项目 启动Ghidra 选择"File" > "New Project" 创建名为"Emotet"的项目 通过"File" > "Import File"导入样本文件 2.2 初始分析设置 双击文件名在CodeBrowser中打开 在Symbol Tree窗口(Window > Symbol Tree)中过滤"entry"找到入口点 熟悉Ghidra界面: 左侧:符号树、函数列表 中间:反汇编视图(Listing) 右侧:反编译视图(Decompile) 3. 分析加密字符串 3.1 识别字符串解密函数 在反汇编视图中查找可疑函数调用 识别出位于0x00401b70的字符串解密函数 重命名函数为"decode_ strings"(右键 > Edit Label) 3.2 解密函数分析 函数特征: 参数1(ECX):加密字符串偏移量 参数2(EDX):XOR密钥 返回值(EAX):解密后字符串的堆内存地址 解密算法: 第一个DWORD与密钥异或得到字符串长度 后续DWORD与密钥异或得到实际字符串内容 3.3 自动化解密脚本 使用Ghidra Python脚本自动解密字符串: 完整脚本见: ghidra_ emotet_ decode_ strings.py 4. 分析API哈希解析 4.1 识别API解析函数 查找处理API哈希的函数(位于0x401230) 重命名为"decodeAPINames" 4.2 解析机制分析 获取DLL句柄: kernel32.dll和ntdll.dll通过PEB枚举获取 其他DLL通过LoadLibraryW加载(名称已加密) 读取DLL导出表 计算每个API名称的哈希值 与传入哈希比较,匹配则保存API地址 4.3 自动化解析脚本 准备DLL导出函数列表: 为每个DLL创建导出函数列表文件 如kernel32.list、ntdll.list等 使用Python脚本解析哈希: 完整脚本见: ghidra_ emotet_ decode_ hash.py 5. 实用技巧 5.1 使用脚本管理器 通过工具栏图标或Window > Script Manager打开 可以运行、管理和创建脚本 提供大量示例脚本 5.2 常用操作 重命名符号:右键 > Edit Label 或按L 添加注释:右键 > Comments 或按; 查看交叉引用:右键 > References 创建可重复注释:右键 > Comments > Set Repeatable Comment 5.3 调试技巧 结合Ollydbg或WinDbg动态分析 使用Ghidra的静态分析与动态调试互补 对复杂函数先在调试器中运行理解功能 6. 总结 本教程详细介绍了使用Ghidra分析Emotet恶意软件的关键技术: 识别并自动化解密XOR加密的字符串 解析API名称哈希并还原实际API调用 利用Ghidra脚本提高分析效率 结合静态和动态分析技术 通过掌握这些技术,分析人员可以更高效地分析Emotet及其他使用类似混淆技术的恶意软件。