Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Shinigami — 一个动态脱壳工具 | Kitploit
工具/GitHubGitHub/buzzer-re/shinigami
动态分析 (沙盒)逆向工程Shellcode恶意软件分析二进制分析
GitHubbuzzer-re/shinigami

Shinigami

一个动态脱壳工具

查看仓库
1521262年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Shinigami

Build Release

图片描述

Shinigami 是一款实验性工具,旨在检测并解包通过进程镂空(process hollowing)或通用加壳例程注入的恶意软件植入体。

工作原理

该工具通过挂钩与进程镂空相关的 NT 函数,并利用页保护位(page guard bit)标记新近变为可执行的内存页。此技术使 Shinigami 能够检测通常由 shellcode 或解包代码引起的间接流程变更,而这些变更往往表明存在恶意软件。 Shinigami 以挂起状态创建目标可执行文件,并注入一个名为 "Ichigo" 的 DLL 库。该库会自动挂钩所有必要函数,以检测并提取植入体。一旦工件被完整提取,工具将终止该进程。

Shinigami 的实际效果可能因其所针对的特定恶意软件而异。然而,它是任何恶意软件分析工具包中的宝贵补充,在检测和分析使用进程镂空或通用加壳例程的恶意软件方面可能会非常有用。

重要提示:这是一个动态解包工具,不应在个人机器或静态分析实验室中运行

当前解包方法

进程镂空(Process Hollowing)

Shinigami 提取通过进程镂空注入的植入体的核心方法涉及挂钩两个 NT 函数:NtResumeThread 和 NtWriteVirtualMemory。其工作原理如下:

  • NtResumeThread 挂钩

    • Shinigami 会遍历所有先前通过 NtAllocateVirtualMemory 分配的内存,检查其中是否包含 DOS 头签名。如果找到,它会提取远程 PE 文件,对其进行修补以使节区对齐,并以 filename_dumped.bin 的格式保存到磁盘。
  • NtWriteVirtualMemory 挂钩

    • Shinigami 通过挂钩 NtWriteVirtualMemory 来检测可执行文件是否试图在远程进程中写入 PE 文件。如果发现 PE 文件,它将使用 Buffer 指针提取并以 filename_before_written.bin 的名称保存到磁盘,此选项仅在传递 --stop-at-write 标志时使用。

通用解包器

Shinigami 的通用解包器模块会为新分配的内存区域设置 PAGE_GUARD 位,如果任何现有内存区域的保护属性被替换为可执行属性,它也会应用该位。通过使用守卫页,它可以跟踪哪个内存区域将被用于分配 shellcode 或 PE 映像。

对于检测到的每个 shellcode,Shinigami 会将原始 shellcode 本身保存到磁盘。它还会扫描该内存区域以查找任何 PE 文件并将其一并保存。Shinigami 将每次不同的 shellcode 执行视为一个新的阶段,因此最终你的工作目录中将包含名为 filename_shellcode_STAGENUM.bin or .exe 的文件。

使用方法

该工具提供以下几个选项:

root@kitploit:~
Usage: Shinigami [--help] [--version] [--output VAR] [--stop-at-write] [--verbose] [--only-executables] [--exported VAR] program_name

Positional arguments:
  program_name                  Name of the program to execute

Optional arguments:
  -h, --help                    shows help message and exits
  -v, --version                 prints version information and exits
  -o, --output                  Directory to dump artefacts
  --stop-at-write               Unhollow: Stop the execution when the PE file is being to be written
  --verbose                     Display a verbose output
  -p, --only-executables        Only extract PE artefacts
  -e, --exported                Exported Function: Choose a exported function to execute if the target is a DLL (rundll will be used)

一些重要的选项如下:

-o, --output:指定转储提取工件的目录。默认情况下,提取的工件将保存到当前工作目录中名为 output 的目录。你可以通过传递路径参数来指定其他目录。

--stop-at-write:此参数用于解包被镂空进程的过程中。当 Shinigami 检测到 PE 文件正在写入被镂空的进程时,它会停止执行并保存提取的 PE 文件。如果你希望避免执行整个被镂空的进程,而只需提取解包后的代码,此选项会很有用。

--verbose:显示详细的输出信息。这对于调试或理解 Shinigami 的内部工作原理非常有用。

使用示例:

反镂空(Unhollow)

针对 Dridex 进行测试

提取完成后,进程会被终止,你将得到(希望如此)提取出的 PE 文件:

转储的植入体

检测到的植入体将按照检测方法一节中描述的格式进行转储

解包

解包一个随机加载器,详见此处

在上面的示例中,Shinigami 自动检测到了通用加载器的行为,并提取了其中所有已执行的 shellcode 和映像,无需任何特定开关来启用或禁用解包例程。这之所以成为可能,是因为 Shinigami 与反镂空模块共享一些函数,使用由 Gancho 库提供的共享钩子。

Emotet

解包 Emotet DLL

Shinigami 还支持 DLL,并能够使用分离的 DOS 头重建注入的二进制文件。值得注意的是,像 Emotet 这样的恶意软件样本会利用此技术来逃避内存中的 PE 扫描器。Shinigami 会检测此类缺失部分(DOS 头),并采用启发式方法对其进行重建。

安装

请到发布页获取适合你的版本。

构建与修改

如果你能帮助这个项目,那就太棒了。如果你愿意,以下是依赖项和步骤:

  • 安装 Visual Studio >= 2019,并包含 C++ 工作负载。
  • 安装 Zydis,一个快速轻量的 x86/x86-64 反汇编器,我建议使用 vcpkg 方法。
    • Zydis 用于确保 API 挂钩更加精确,并确保在复制过程中不丢失任何操作码。
  • 在 Visual Studio 中打开 Shinigami.sln 解决方案文件,然后构建/编写项目代码。

如果你希望进行任何更改,请提交 issue 或拉取请求(pull request)。

结语

这个酷炫的吉祥物形象灵感来自《死神》(Bleach),由 Dall-E 生成。

下载工具