enkomio/thematrix

GitHub: enkomio/thematrix

一个轻量级的 PE 加载器和 Windows API 追踪工具,通过 Hook 技术监控目标二进制的执行行为并记录 API 调用数据。

Stars: 143 | Forks: 19

# TheMatrix 此项目旨在简化恶意软件分析流程。其目标是创建一个加载器(activator)二进制文件,用于加载用户指定的二进制文件,并通过 Win32 API hooks 监控其执行过程。相关数据随后会被保存到磁盘。该代码同时支持 x86 和 x64 二进制文件。 # 文档 我写了一篇博文解释其工作原理:http://antonioparata.blogspot.com/2022/06/thematrix-process-inspection-tool-aimed.html # 用法 要监控一个新的二进制文件,需要创建一个 **activator**。该 activator 将加载并监控用户输入的二进制文件。要创建 activator,请使用 **-add** 选项。使用示例如下: ``` c:\>TheMatrix.exe -add c:\path\to\my\binary.dll Activator file created c:\>regsvr32.exe TheMatrix.build.dll ``` 此命令将创建一个新的 PE 文件作为 activator。该 activator 将具有与输入二进制文件相同的格式(DLL 或 EXE)。 创建完成后,您可以按您喜欢的方式运行它(对于 DLL,建议使用 *rundll32.exe* 工具)。 在执行期间,被监控函数生成的数据将保存到 **./Desktop/thematrix/[process ID]/**(这取决于 **utility.c** 中实现的 **log_data** 函数)。 **局限性**: * 该项目修改了 _PEB.Ldr_ 结构,以便特定 API(如 _GetModuleHandle_ 等)能正常工作。如果在 WOW64 系统上运行 activator(即在 x64 OS 上运行 x86 二进制文件),则只会修改 x86 的 _PEB.Ldr_(WOW64 进程同时拥有 x86 和 x64 PEB)。当 CPU 切换到 x64 模式时,Windows Native APIs (ntdll.dll) 将使用 x64 版本的 _PEB.Ldr_。这意味着 activator 可能无法正常工作。为确保 x86 程序正常运行,请在 x86 OS 上运行该二进制文件。 * 新创建的文件并未导出所有方法,也不包含原始文件的资源。这可能会导致潜在错误,例如,如果某个 DLL 调用了 _GetModuleFileName_ -> _LoadLibrary_ -> _FindResource_。此代码路径将加载原始的 _TheMatrix_ DLL,而该 DLL 不包含所需的资源。 # 自定义 向监控器添加新函数是一项简单的任务,请查看 *hooks.c* 文件以获取 *Kernel32.dll* 和 *bcrypt.dll* hooks 的示例。要添加新的 hook,只需调用 **hook_add** 函数。下方展示了一个创建 hook 的示例: ``` LPVOID __stdcall hook_BCryptEncrypt(BCRYPT_KEY_HANDLE hKey, PUCHAR pbInput, ULONG cbInput, VOID* pPaddingInfo, PUCHAR pbIV, ULONG cbIV, PUCHAR pbOutput, ULONG cbOutput, ULONG* pcbResult, ULONG dwFlags) { // save plain data if (cbInput) { char name[MAX_PATH] = { 0 }; snprintf(name, sizeof(name), "BCryptEncrypt_%llx_%d", (uint64_t)pbInput, cbInput); log_data(cbInput, pbInput, name); } LPVOID ret = call_original( hKey, pbInput, cbInput, pPaddingInfo, pbIV, cbIV, pbOutput, cbOutput, pcbResult, dwFlags ); return ret; } hook_add("Bcrypt.dll", "BCryptEncrypt", hook_BCryptEncrypt); ``` 该函数必须与被 hook 的函数具有相同的签名。**call_original** 函数用于调用原始函数。只需使用原始函数的输入参数调用此函数,框架将为您处理所有繁重的工作以调用正确的函数 ;) 对 call_original 函数的调用必须在执行 hook 的同一线程中进行,否则进程将崩溃。 # 待办事项 * Hook _CreateProcessInternalW_ 而非 _CreateProcessW_ * 当进程在 WOW64 中执行时修改 PEB64
标签:API Hook, API监控, Conpot, DAST, Dionaea, PE加载器, Shellcode执行, SSH蜜罐, UML, Win32 API, Windows安全, 云资产清单, 反射式注入, 安全报告生成, 安全报告生成, 恶意软件分析, 文件系统模拟, 沙箱逃逸检测, 端点可见性, 行为追踪, 进程注入, 逆向工程, 静态分析辅助