azsec324/win64-calc-shellcode
GitHub: azsec324/win64-calc-shellcode
一段用于学习目的的 Windows x64 无 NULL 字节 shellcode,通过动态解析 WinExec 启动 calc.exe 以验证 shellcode 执行流程。
Stars: 0 | Forks: 0
# win64-calc-shellcode
## *免责声明*
*本仓库及托管的代码仅供教育、安全研究和授权测试使用。作者不鼓励或支持任何未经授权或恶意使用此代码的行为。*
*使用或引用本仓库即表示您同意,您需对自己的行为以及因滥用这些材料而产生的任何后果自行承担全部责任。*
## 描述
此 shellcode 适用于 Windows/x64。
它动态解析并调用 WinExec 来启动 calc.exe,并以退出代码 0 退出原始进程。
它不包含 NULL 字节 (0x00),总长度为 188 字节。
这是我的第一个学习项目,我仍在不断学习中。请指出任何问题,我在汇编源码中留下了注释,记录了我的一些试验和错误。
## 详细信息
`binary_win64_calc.txt` 提供了 Python 和 C 兼容格式的已编译二进制文件。
汇编源码兼容 MASM。为了生成二进制文件,请运行:
```
ml64 /c win64_calc.asm
dumpbin /rawdata /section:.text$mn win64_calc.obj
```
上次使用的是 Visual Studio 2026 的 MASM 版本 14.51.36248.0
在 Windows 11 25H2 (26200.8875) 上通过 x64dbg 直接进行二进制编辑进行了测试。确认在以下不确定的情况下均能正常工作:
- 无论是否设置了 DF (Direction Flag)
- 用于 Windows API 调用的堆栈可能未对齐
- 不需要任何先前的寄存器或堆栈设置
*注意*:此 shellcode 假设 MemoryOrderList 中呈现的第 3 个模块是 kernel32.dll。尽管在 90% 的情况下这可能是正确的,但在*某些*环境设置下(例如当存在某些 AV 时),情况可能并非如此。
## 补充说明
您可能还会好奇为什么这个仓库还托管了一个 html。
这是我在编写代码时用来跟踪所有 x86-64 寄存器使用情况的简单辅助工具。确实非常简单,但很有效。
如果您想尽可能缩小二进制文件的大小,了解何时可以重用寄存器是至关重要的。
现在您也可以使用它了 :)
标签:Shellcode, 多模态安全, 安全报告生成, 技术调研, 汇编, 逆向工具