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安全, 云资产清单, 反射式注入, 安全报告生成, 安全报告生成, 恶意软件分析, 文件系统模拟, 沙箱逃逸检测, 端点可见性, 行为追踪, 进程注入, 逆向工程, 静态分析辅助