RDPCredentialStealer 是一个利用 Detours 库在 C++ 中实现 API 挂钩来窃取用户在 RDP 中提供的凭据的植入工具。
让我们试试:
首先,我将 GitHub 仓库中的 DLL 转移到路径 C:\Users\Public\Music:

现在,我打开一个 RDP 连接器 Windows 应用程序:

然后,我执行 GitHub 仓库中的 EXE 文件:

当我尝试访问一个 RDP 服务器时:

我输入用户:s12User 和密码:passwdtest
现在,我检查文件: C:\Users\Public\Music\RDPCreds.txt

RDPCredStealerDLL:
这段代码是使用 Detours 库在 C++ 中实现的挂钩技术。它专门针对 credui.dll 库中的 CredUnPackAuthenticationBufferW 函数,该函数负责解包用于凭据操作的身份验证缓冲区。 让我们逐步分解代码: 包含了必要的头文件,如 windows.h、wincred.h、detours.h 等。 定义了一个函数指针类型 CredUnPackAuthenticationBufferW_t,表示原始 CredUnPackAuthenticationBufferW 函数的签名。 声明了函数指针 pCredUnPackAuthenticationBufferW,用于存储原始函数的地址。
实现了 MyCredUnPackAuthenticationBufferW 函数,作为原始函数的钩子。当被挂钩的函数被调用时,会调用此函数。该函数首先使用存储的函数指针 pCredUnPackAuthenticationBufferW 调用原始函数。然后,它将检索到的用户名和密码从宽字符串(LPWSTR)转换为 UTF-8 编码的字符串(std::string)。
最后,它打开一个文件以追加模式写入用户名和密码。 DllMain 函数作为挂钩 DLL 的入口点。当 DLL 被加载或卸载时被调用。当 ul_reason_for_call 为 DLL_PROCESS_ATTACH(表示 DLL 正在被加载)时,它使用 LoadLibraryA 加载 credui.dll 库。
然后,它使用 GetProcAddress 获取原始函数 CredUnPackAuthenticationBufferW 的地址。如果成功,则通过调用 DetourTransactionBegin、DetourUpdateThread 和 DetourAttach 开始挂钩过程。 当 ul_reason_for_call 为 DLL_PROCESS_DETACH(表示 DLL 正在被卸载)时,它通过调用 DetourTransactionBegin、DetourUpdateThread 和 DetourDetach 反转挂钩过程。
此代码的目的是挂钩 CredUnPackAuthenticationBufferW 函数并拦截传递给它的凭据,使挂钩代码能够提取用户名和密码并将其记录到文件中。这种技术可能被恶意用于捕获敏感信息,例如 RDP 凭据,这是一个重大的安全问题。
Inject.h
这段代码提供了在 Windows 操作系统上将 DLL(动态链接库)注入到目标进程中的函数。让我们分解代码并理解其功能:
包含了必要的头文件,如 windows.h、stdio.h 和 tlhelp32.h。这些头文件提供了与 Windows API 交互所需的函数和数据类型。
getPIDbyProcName 函数接收一个进程名称作为输入,并返回相应的进程 ID(PID)。它使用 CreateToolhelp32Snapshot 函数创建当前进程的快照,然后使用 Process32FirstW 和 Process32NextW 函数遍历快照以查找名称匹配的进程。如果找到,则返回进程 ID;否则返回 0。
DLLinjector 函数接收进程 ID(pid)和 DLL 路径作为输入。它将指定的 DLL 注入到目标进程中。其工作方式如下:a. 使用 OpenProcess 以 PROCESS_ALL_ACCESS 标志打开目标进程。b. 使用 GetModuleHandleW 获取 Kernel32 模块的句柄。c. 使用 GetProcAddress 获取 Kernel32 中 LoadLibraryW 函数的地址。d. 使用 VirtualAllocEx 在目标进程中分配内存。e. 使用 WriteProcessMemory 将 DLL 路径写入目标进程中分配的内存。f. 使用 CreateRemoteThread 在目标进程中创建远程线程,并将 LoadLibraryW 的地址和分配的内存作为参数传递。g. 如果线程创建成功,则返回 true 表示 DLL 注入成功。 此代码片段中未提供 main 函数。您可以在自己的应用程序中使用这些函数,通过提供进程名称和 DLL 路径作为输入,将 DLL 注入到目标进程中。
请注意,DLL 注入是一种具有多种应用的技术,包括合法用例(例如调试和扩展功能)和恶意目的(例如注入恶意软件或未经授权修改进程的行为)。在使用此类技术之前,请务必确保您拥有适当的权限和合法权利。