这一节对应 05.2 - 05.9,主题是 x64 ShellCode 的基础能力。这里不整理可执行实现,而是把它拆成几个可复盘概念:调用约定、模块定位、PE 结构、字符串匹配、哈希匹配和动态 API 解析。
1、内容范围
| 小节 |
主题 |
| 05.2 |
x64 ShellCode 通用 C 语言思路 |
| 05.3 |
x64 汇编定位模块特征及数据比对 |
| 05.4 |
x64 汇编解析 PE 结构及数据关联 |
| 05.5 |
x64 汇编字符串匹配通用模板 |
| 05.6 |
x64 汇编框架远程执行测试 |
| 05.7 |
通用 ShellCode 框架 |
| 05.8 |
双版本兼容与特征混淆 |
| 05.9 |
字符串哈希处理及快速匹配 |
1.1、逐节复盘
| 小节 |
主要内容 |
复盘点 |
| 05.2 |
认识 x64 ShellCode 的限制:调用约定、栈对齐、寄存器保存 |
重点理解结构,不写可直接执行的字节序列 |
| 05.3 |
通过汇编定位模块基址和关键结构 |
复盘 PEB、模块链、地址范围和架构差异 |
| 05.4 |
从 PE 结构理解导出表、名称表和函数地址解析 |
关联前面 PE 学习,记录 RVA/VA 换算 |
| 05.5 |
使用字符串匹配理解 API 名称定位 |
关注编码、大小写、终止符和误匹配 |
| 05.6 |
在实验环境观察远程执行测试的现象 |
记录进程、线程、异常、模块和日志,不展开执行流程 |
| 05.7 |
把 ShellCode 结构整理成可复盘框架 |
分清初始化、定位、解析、调用和清理阶段 |
| 05.8 |
比较 x86/x64 或不同系统下的兼容问题 |
观察调用约定、指针宽度和结构偏移差异 |
| 05.9 |
理解字符串哈希用于快速匹配和隐藏语义 |
复盘哈希算法、冲突、大小写和检测痕迹 |
2、核心概念
| 概念 |
复盘重点 |
| x64 调用约定 |
参数寄存器、栈空间、返回值和对齐要求影响执行稳定性 |
| 模块定位 |
需要理解 PEB、模块链表和模块基址的正常结构 |
| PE 解析 |
导出表、函数名、序号和地址换算是动态解析基础 |
| 字符串匹配 |
明文字符串便于调试,也容易成为检测特征 |
| 哈希匹配 |
哈希降低明文暴露,但行为上仍会出现遍历和解析痕迹 |
3、防护观察点
| 观察点 |
说明 |
| PEB 遍历 |
异常访问 PEB、模块链表和导出表需要关联上下文 |
| 动态解析 |
运行时解析 API 名称或哈希可能是可疑特征 |
| 字符串特征 |
明文 API、DLL、路径和错误信息都可用于静态检测 |
| 内存区域 |
代码是否来自非模块区域,页属性是否异常 |
| 调用栈 |
调用链是否缺少正常模块上下文 |
4、复盘方式
| 视角 |
内容 |
| 结构视角 |
PEB、LDR、模块、导出表 |
| 汇编视角 |
参数传递、栈对齐、跳转和返回 |
| 检测视角 |
内存属性、字符串、API 解析行为、调用栈 |
| 稳定性视角 |
架构差异、地址换算、寄存器保存和异常处理 |
5、学习检查清单
| 检查项 |
状态 |
| 能说明 x64 调用约定对执行稳定性的影响 |
待复盘 |
| 能解释模块定位和 PE 导出表解析之间的关系 |
待复盘 |
| 能说出字符串匹配和哈希匹配各自的检测痕迹 |
待复盘 |
| 能把 ShellCode 复盘限定在授权样本和防护分析中 |
待复盘 |
本节只保留 x64 机制和检测复盘,不提供可直接运行的 ShellCode。