GH-Injector-Library:多架构DLL注入库,支持多种注入与shellcode执行方法

The BEST DLL Injector Library.

Branch1Tags8
FilesLast commitLast update
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
1 year ago
1 year ago

GuidedHacking DLL 注入器库

一个功能丰富的 DLL 注入库,支持 x86、WOW64 和 x64 注入。 由 Broihon 为 Guided Hacking 开发。 它具备五种注入方法、六种 shellcode 执行方法以及各种附加选项。 所有方法均可绕过会话隔离。

如果您想将此库与图形用户界面配合使用,请查看 GH Injector GUI

发布版下载:在此处下载 DLL 注入器

image imageimage


DLL 注入方法

  • LoadLibraryExW
  • LdrLoadDll
  • LdrpLoadDll
  • LdrpLoadDllInternal
  • ManualMapping(手动映射)

Shellcode 执行方法

  • NtCreateThreadEx
  • Thread hijacking(线程劫持)
  • SetWindowsHookEx
  • QueueUserAPC
  • KernelCallback(内核回调)
  • FakeVEH(伪造 VEH)

DLL 手动映射特性:

  • 节区映射
  • 基址重定位
  • 导入表
  • 延迟导入表
  • SEH 支持
  • TLS 初始化
  • 安全 Cookie 初始化
  • 加载器锁
  • 镜像偏移
  • 清理数据目录

附加特性:

  • 多种隐藏选项
    • PEB 解链
    • PE 头隐藏
    • 线程隐藏
  • 句柄劫持
  • 钩子扫描/恢复

官方 Guided Hacking 课程


在哪里下载已编译的二进制文件?

此仓库不包含已编译的二进制文件,仅提供该库的源代码。如果您想下载已编译的程序,必须成为我们网站的付费用户,方可在网站上进行下载。如果您能够自行编译并使其正常运行,那很好,尽情使用,但您无权/许可分发已编译的二进制文件或我们网站上的任何其他内容。

GH DLL 注入器入门

您可以通过在项目中包含已编译的二进制文件,轻松使用映射器。有关更多信息,请查看提供的 Injection.h 头文件。 确保您的程序工作目录中存在已编译的二进制文件。 首次运行时,注入模块必须下载 ntdll.dll 的原生版本(在 x64 系统上运行时还需下载 wow64 版本)的 PDB 文件,以解析符号地址。使用导出的 StartDownload 函数开始下载。 只有下载完成后,注入器才能正常运行。注入模块导出 GetSymbolState 和 GetImportState 函数,当 PDB 下载完成且所有所需地址解析完毕时,这两个函数将返回 INJ_ERROR_SUCCESS(0)。 此外,可使用 GetDownloadProgress 函数以百分比形式查看下载进度。如果要在下载过程中卸载注入模块,请调用 InterruptDownload,否则该 DLL 可能会导致您的进程死锁。


#include "Injection.h"

HINSTANCE hInjectionMod = LoadLibrary(GH_INJ_MOD_NAME);
	
auto InjectA = (f_InjectA)GetProcAddress(hInjectionMod, "InjectA");
auto GetSymbolState = (f_GetSymbolState)GetProcAddress(hInjectionMod, "GetSymbolState");
auto GetImportState = (f_GetSymbolState)GetProcAddress(hInjectionMod, "GetImportState");
auto StartDownload = (f_StartDownload)GetProcAddress(hInjectionMod, "StartDownload");
auto GetDownloadProgressEx = (f_GetDownloadProgressEx)GetProcAddress(hInjectionMod, "GetDownloadProgressEx");

//due to a minor bug in the current version you have to wait a bit before starting the download
	//will be fixed in version 4.7
Sleep(500);

StartDownload();

//since GetSymbolState and GetImportState only return after the downloads are finished 
	//checking the download progress is not necessary
while (GetDownloadProgressEx(PDB_DOWNLOAD_INDEX_NTDLL, false) != 1.0f)
{
	Sleep(10);
}

#ifdef _WIN64
while (GetDownloadProgressEx(PDB_DOWNLOAD_INDEX_NTDLL, true) != 1.0f)
{
	Sleep(10);
}
#endif

while (GetSymbolState() != 0)
{
	Sleep(10);
}

while (GetImportState() != 0)
{
	Sleep(10);
}

DWORD TargetProcessId;

INJECTIONDATAA data =
{
	"",
	TargetProcessId,
	INJECTION_MODE::IM_LoadLibraryExW,
	LAUNCH_METHOD::LM_NtCreateThreadEx,
	NULL,
	0,
	NULL,
	NULL,
	true
};

strcpy(data.szDllPath, DllPathToInject);

InjectA(&data);


什么是 DLL 注入器?

DLL 注入是一种通过强制另一个进程加载动态库,使其在该进程空间中运行代码的技术。外部程序通常会采用这种方式来以非预期的方式改变目标程序的行为。例如,注入的代码可以挂钩函数调用或复制数据变量。用于向进程中注入代码的程序称为 DLL 注入器。

如果您正在制作内部注入程序,则必须使用 DLL 注入器来注入它。

什么是 DLL?

DLL 是在运行时加载到进程中的代码库。大型代码库催生了像 SSL 和 cURL 这样的库,这些库被许多程序所使用。这些库是静态链接的,这意味着每个可执行文件都包含该库的代码。然而,如果多个程序都静态链接同一个库,这可能会导致大量磁盘空间的浪费。

动态链接库的创建是为了节省较小硬盘上的空间。使用 DLL,硬盘上只需要一份副本,数百个程序都可以在运行时动态加载并解析它们。

为什么 DLL 注入如此常见?

它之所以常见,是因为修改程序最简单的方法是通过挂钩,特别是当您想要在屏幕上显示内容或复制屏幕上的内容时。您可以不使用 DLL 进行挂钩,但导入一个能完成所有任务的文件是执行此任务的一种模块化且便捷的方式。此外,当您注入 DLL 时,其代码在目标进程内部运行,这比从外部程序执行相同任务要快得多。

出于同样的原因,DLL 注入在游戏外挂制作中也非常流行。您无需从外部修改程序,而是可以让您的代码在进程内部执行,从而可以轻松高效地进行挂钩和内存修改。

DLL 注入器致谢

特别感谢 Kage / Multikill 开发了 GH 注入器的 Qt GUI,这是一个巨大的改进。

首先,我要感谢 Joachim Bauch,他的 Memory Module Library 是一个很好的学习资源:
https://github.com/fancycode/MemoryModule

他还撰写了一篇很棒的文章,解释了映射模块的基础知识:
https://www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/

我还要感谢 Akaion/Dewera 帮助我实现 SEH 支持,以及他们的 C# 映射库,这也是另一个很好的学习资源:
C# Manual Map DLL Injection Library

非常感谢 mambda,他制作了这个 PDB 解析器,我可以从中借鉴代码来验证 GUID:
C++ Windows PDB Parser

GuidedHacking® - The Game Hacking Bible® - © 2025 Guided Hacking LLC. All Rights Reserved.