分析ShellCode hash获取api函数
字数 1520 2025-08-22 18:37:22

ShellCode Hash解析与API函数获取技术详解

一、前言

Windows API函数名哈希化是一种常见的安全技术,主要用于:

  • 隐藏或保护程序中调用的真实函数名
  • 增加逆向分析的难度
  • 规避简单的静态分析攻击

在分析恶意ShellCode时,理解其哈希解析机制至关重要,这能帮助我们揭示其真实的恶意行为。

二、分析工具准备

1. 反汇编工具

  • Ghidra:开源逆向工程工具,支持多种架构
  • 对于无文件头的ShellCode,需手动操作:
    • 使用快捷键d进行反汇编
    • 若无函数显示,使用f手动定义函数

2. 调试工具

  • SpeakEasy:ShellCode仿真工具
  • blobrunner:用于在运行时配置和触发调试器
    • 创建挂起线程进行ShellCode调试
    • 命令:blobrunner.exe shellcode.bin

三、ShellCode分析流程

1. 定位关键函数

  1. 从入口函数FUN_00000000开始分析
  2. 跟进到FUN_0000008f函数
  3. 观察函数指针unaff_retaddr传递的hash值

2. 识别调用模式

  • 典型调用模式:
    • PUSH指令包含哈希值
    • 紧接着CALL RBP指令调用寄存器执行
    • 这是Cobalt Strike和Meterpreter ShellCode的常见写法

3. 哈希解析技术

使用ROR 13散列算法(Cobalt Strike和Meterpreter常用):

  1. 参考解析方法:哈希解析技术
  2. 示例哈希值:
    • 0xa779563aInternetOpenA
    • 0xC69F8957InternetConnectA

4. 动态调试步骤

  1. 运行blobrunner加载ShellCode到内存(如0x011a0000
  2. 附加调试器到blobrunner进程
  3. 设置断点:
    • bp 0x011a0000 + 0x86(基于jmp eax偏移量)
  4. 跟踪执行:
    • 使用F7进入函数
    • 跟踪call ebp指令理解执行流程
    • 使用F9继续执行

5. 关键API识别流程

  1. Call EBP处观察堆栈中的哈希值(如0x726774c
  2. 通过哈希解析确定API(如LoadLibraryA
  3. 观察堆栈窗口和函数参数(如wininet字符串)
  4. 重复过程解析后续API:
    • InternetOpenA
    • InternetConnectA(用于建立远程连接)

四、常见API哈希对应表

哈希值 API函数 功能描述
0x726774c LoadLibraryA 加载DLL
0xa779563a InternetOpenA 初始化WinINet
0xC69F8957 InternetConnectA 建立Internet连接

五、技术要点总结

  1. 哈希算法:ROR 13是常见算法,但可能被修改以规避检测
  2. 调用模式PUSH hash + CALL RBP是典型模式
  3. 动态分析:必须结合静态分析和动态调试
  4. WinINet相关:常用于恶意网络通信功能
  5. 对抗技术:可通过修改散列算法绕过安全设备检测

六、扩展思路

  1. 可以构建自动化工具来:
    • 识别常见哈希算法
    • 自动解析API函数
    • 重建调用关系图
  2. 针对变种:
    • 收集不同样本的哈希值
    • 建立哈希数据库
    • 开发特征检测规则

通过系统化的分析方法,可以有效揭示ShellCode的真实功能,为安全分析和防御提供有力支持。

ShellCode Hash解析与API函数获取技术详解 一、前言 Windows API函数名哈希化是一种常见的安全技术,主要用于: 隐藏或保护程序中调用的真实函数名 增加逆向分析的难度 规避简单的静态分析攻击 在分析恶意ShellCode时,理解其哈希解析机制至关重要,这能帮助我们揭示其真实的恶意行为。 二、分析工具准备 1. 反汇编工具 Ghidra :开源逆向工程工具,支持多种架构 对于无文件头的ShellCode,需手动操作: 使用快捷键 d 进行反汇编 若无函数显示,使用 f 手动定义函数 2. 调试工具 SpeakEasy :ShellCode仿真工具 blobrunner :用于在运行时配置和触发调试器 创建挂起线程进行ShellCode调试 命令: blobrunner.exe shellcode.bin 三、ShellCode分析流程 1. 定位关键函数 从入口函数 FUN_00000000 开始分析 跟进到 FUN_0000008f 函数 观察函数指针 unaff_retaddr 传递的hash值 2. 识别调用模式 典型调用模式: PUSH 指令包含哈希值 紧接着 CALL RBP 指令调用寄存器执行 这是Cobalt Strike和Meterpreter ShellCode的常见写法 3. 哈希解析技术 使用ROR 13散列算法(Cobalt Strike和Meterpreter常用): 参考解析方法: 哈希解析技术 示例哈希值: 0xa779563a → InternetOpenA 0xC69F8957 → InternetConnectA 4. 动态调试步骤 运行 blobrunner 加载ShellCode到内存(如 0x011a0000 ) 附加调试器到blobrunner进程 设置断点: bp 0x011a0000 + 0x86 (基于jmp eax偏移量) 跟踪执行: 使用 F7 进入函数 跟踪 call ebp 指令理解执行流程 使用 F9 继续执行 5. 关键API识别流程 在 Call EBP 处观察堆栈中的哈希值(如 0x726774c ) 通过哈希解析确定API(如 LoadLibraryA ) 观察堆栈窗口和函数参数(如 wininet 字符串) 重复过程解析后续API: InternetOpenA InternetConnectA (用于建立远程连接) 四、常见API哈希对应表 | 哈希值 | API函数 | 功能描述 | |------------|----------------|----------| | 0x726774c | LoadLibraryA | 加载DLL | | 0xa779563a | InternetOpenA | 初始化WinINet | | 0xC69F8957 | InternetConnectA | 建立Internet连接 | 五、技术要点总结 哈希算法 :ROR 13是常见算法,但可能被修改以规避检测 调用模式 : PUSH hash + CALL RBP 是典型模式 动态分析 :必须结合静态分析和动态调试 WinINet相关 :常用于恶意网络通信功能 对抗技术 :可通过修改散列算法绕过安全设备检测 六、扩展思路 可以构建自动化工具来: 识别常见哈希算法 自动解析API函数 重建调用关系图 针对变种: 收集不同样本的哈希值 建立哈希数据库 开发特征检测规则 通过系统化的分析方法,可以有效揭示ShellCode的真实功能,为安全分析和防御提供有力支持。