SHELLSILO 是一款尖端工具,可将 C 语法转换为系统调用汇编及其对应的 shellcode。它简化了构造和使用结构、分配变量以及进行系统调用的过程。使用此工具,将字符串集成到 shellcode 中并初始化 Unicode 字符串从未如此简单。
SHELLSILO 已经在两种不同的 Windows 10 型号和 Windows 11 上进行了测试。
SHELLSILO 如何获取系统调用号?
-
SHELLSILO 从https://j00ru.vexillium.org/syscalls/nt/64/导入了系统调用编号表,并将每个 Windows 版本转换为其对应的型号。通过检查 PEB(进程环境块),SHELLSILO 可以轻松获取系统的型号,并将其与“syscallslist.txt”表中的自身型号进行比较。
-
SHELLSILO 仅比较代码中使用的系统调用 API。
安装
-
pip3 安装 keystone 引擎
SHELLSILO 支持以下内容:
-
读取和解析结构
-
结构体实例
-
结构成员分配
-
无限 while 循环
-
If 语句
-
变量定义和赋值
-
函数调用
-
初始化 unicode 字符串
-
一些 C 常量,例如 MEM_COMMIT 和 MEM_RESERVE
实例:
所提供文件中最实用的模板是 ntwrt.c 文件。
ntwrt.c 文件中发生了什么?
-
代码首先循环遍历两个系统调用 API NtAllocateVirtualMemory 和 NtQuerySystemInformation,以查找您将在代码中定义的特定运行进程。将代码中的进程名称从“Calculator.exe”更改为您想要的任何进程,例如:“CalculatorApp.exe”(Windows 10)。您更改的进程名称将使用 ShellSilo 的内置函数 InitUnicodeStr 自动初始化为 unicode 字符串,您无需担心该部分。
-
下一步是使用 NtOpenProcess 和 NtAllocateVirtualMemory 在该进程中分配足够的内存
-
接下来是将第 108 行的缓冲区(即“h”)作为占位符复制到远程进程。这是一个占位符,生成程序集后,请使用实际的有效载荷缓冲区行更改此行,请参考我的 Defcon 示例 https://github.com/nixpal/ProcInjectSyscall/blob/main/shellcode.c#L222
-
最后,代码将使用 NtCreateThreadEx 创建该复制缓冲区的新线程。
原文始发于微信公众号(Ots安全):SHELLSILO 是一款尖端工具,可将 C 语法转换为系统调用汇编及其对应的 shellcode
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论