分析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. 定位关键函数
- 从入口函数
FUN_00000000开始分析 - 跟进到
FUN_0000008f函数 - 观察函数指针
unaff_retaddr传递的hash值
2. 识别调用模式
- 典型调用模式:
PUSH指令包含哈希值- 紧接着
CALL RBP指令调用寄存器执行 - 这是Cobalt Strike和Meterpreter ShellCode的常见写法
3. 哈希解析技术
使用ROR 13散列算法(Cobalt Strike和Meterpreter常用):
- 参考解析方法:哈希解析技术
- 示例哈希值:
0xa779563a→InternetOpenA0xC69F8957→InternetConnectA
4. 动态调试步骤
- 运行
blobrunner加载ShellCode到内存(如0x011a0000) - 附加调试器到blobrunner进程
- 设置断点:
bp 0x011a0000 + 0x86(基于jmp eax偏移量)
- 跟踪执行:
- 使用
F7进入函数 - 跟踪
call ebp指令理解执行流程 - 使用
F9继续执行
- 使用
5. 关键API识别流程
- 在
Call EBP处观察堆栈中的哈希值(如0x726774c) - 通过哈希解析确定API(如
LoadLibraryA) - 观察堆栈窗口和函数参数(如
wininet字符串) - 重复过程解析后续API:
InternetOpenAInternetConnectA(用于建立远程连接)
四、常见API哈希对应表
| 哈希值 | API函数 | 功能描述 |
|---|---|---|
| 0x726774c | LoadLibraryA | 加载DLL |
| 0xa779563a | InternetOpenA | 初始化WinINet |
| 0xC69F8957 | InternetConnectA | 建立Internet连接 |
五、技术要点总结
- 哈希算法:ROR 13是常见算法,但可能被修改以规避检测
- 调用模式:
PUSH hash + CALL RBP是典型模式 - 动态分析:必须结合静态分析和动态调试
- WinINet相关:常用于恶意网络通信功能
- 对抗技术:可通过修改散列算法绕过安全设备检测
六、扩展思路
- 可以构建自动化工具来:
- 识别常见哈希算法
- 自动解析API函数
- 重建调用关系图
- 针对变种:
- 收集不同样本的哈希值
- 建立哈希数据库
- 开发特征检测规则
通过系统化的分析方法,可以有效揭示ShellCode的真实功能,为安全分析和防御提供有力支持。