☰
makin自定义开发指南:如何扩展检测新的反调试和反虚拟机技术
2026/10/16 6:18:43 网站建设 项目流程

makin自定义开发指南:如何扩展检测新的反调试和反虚拟机技术

【免费下载链接】makinmakin - reveal anti-debugging and anti-VM tricks [This project is not maintained anymore]项目地址: https://gitcode.com/gh_mirrors/ma/makin

makin是一款强大的反调试与反虚拟机技术检测工具,能够帮助开发者识别和应对各种恶意软件和保护机制。本指南将详细介绍如何扩展makin的功能,以检测新的反调试和反虚拟机技术,让你的安全分析能力更上一层楼。

快速了解makin的核心检测机制

在开始扩展之前,我们先来了解一下makin的核心检测机制。makin主要通过两种方式实现检测功能:基于JSON配置文件的静态检测规则和基于钩子函数的动态行为监控。

JSON配置文件:静态检测规则的核心

makin的静态检测规则主要定义在makin/checks.json文件中。这个文件包含了各种用于检测虚拟机和调试环境的特征值,如注册表项、文件系统路径、进程名等。

例如,在Registry部分,定义了用于检测VMware和VirtualBox的注册表关键词:

"Registry": { "KeyChecks": { "VMware": [ "vmware" ], "VirtualBox": [ "virtualbox", "vbox" ] } }

文件系统检测部分则列出了常见的虚拟机相关文件:

"FileSystem": { "Files": [ "virtualbox", "vmware", "vmbox", "vmmouse.sys", "vmhgfs.sys" ] }

钩子函数:动态行为监控的关键

除了静态规则,makin还通过钩子函数监控各种系统调用,以检测程序的反调试行为。这些钩子函数定义在asho/hookFunctions.h文件中,涵盖了从进程创建到注册表操作的各种系统函数。

例如,HookNtQueryInformationProcess函数用于监控进程信息查询,当检测到程序试图查询调试端口时,会输出警告信息并修改返回结果:

if (ProcessInformationClass == ProcessDebugPort) { OutputDebugString( L"[ProcessDebugPort] The debuggee attempts to detect a debugger\n\tref: The \"Ultimate\" Anti-Debugging Reference: 7.D.viii.a\n"); *static_cast<DWORD_PTR*>(ProcessInformation) = 0; // fake it ;) }

扩展静态检测规则:编辑checks.json文件

扩展makin的静态检测能力最简单的方法就是编辑checks.json文件,添加新的检测规则。下面我们将详细介绍如何添加不同类型的检测规则。

添加新的注册表检测规则

注册表是检测虚拟机环境的重要依据。要添加新的注册表检测规则,你需要在Registry部分添加新的关键词或路径。

例如,如果你发现某个新的虚拟机软件会创建特定的注册表项SOFTWARE\NewVM\Config,你可以这样添加:

"Registry": { "KeyChecks": { "NewVM": [ "SOFTWARE\\NewVM\\Config" ], // 其他现有项... } }

添加新的文件系统检测规则

恶意软件和虚拟机软件 often 在文件系统中留下特征文件。要添加新的文件系统检测规则,只需在FileSystem的Files数组中添加新的文件名或路径。

例如,添加新的虚拟机驱动文件名:

"FileSystem": { "Files": [ // 现有项... "newvmdriver.sys", "newvmtools.exe" ] }

添加新的进程检测规则

进程名也是识别虚拟机环境和调试工具的重要依据。要添加新的进程检测规则,在Processes数组中添加新的进程名:

"Processes": [ // 现有项... "newvmprocess.exe", "newdebugger.exe" ]

扩展动态检测能力:编写新的钩子函数

对于更复杂的反调试技术,我们需要编写新的钩子函数来监控和干扰其行为。下面我们将以添加一个新的钩子函数为例,展示如何扩展makin的动态检测能力。

了解钩子函数的结构

在asho/hookFunctions.h中,每个钩子函数都遵循相似的结构:

  1. 定义原始函数的类型
  2. 获取原始函数的地址
  3. 实现钩子逻辑
  4. 调用原始函数(可选)

例如,HookNtOpenProcess函数的结构如下:

LONG WINAPI HookNtOpenProcess(_Out_ PHANDLE ProcessHandle, _In_ ACCESS_MASK DesiredAccess, _In_ LPVOID ObjectAttributes, _In_opt_ PCLIENT_ID ClientId) { // 定义原始函数类型 typedef LONG WINAPI xZwOpenProcess(...); // 获取原始函数地址 const auto xOP = reinterpret_cast<xZwOpenProcess*>(GetProcAddress(ntdllCopyModule, "NtOpenProcess")); // 实现钩子逻辑 // ... 检测和日志记录代码 ... // 调用原始函数 return xOP(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId); }

添加新的钩子函数

假设我们要添加一个钩子来监控NtQueryVirtualMemory函数,该函数常被用于检测调试器。我们可以按照以下步骤进行:

  1. 在hookFunctions.h中添加新的钩子函数声明和实现:
LONG WINAPI HookNtQueryVirtualMemory( _In_ HANDLE ProcessHandle, _In_opt_ PVOID BaseAddress, _In_ MEMORY_INFORMATION_CLASS MemoryInformationClass, _Out_ PVOID Buffer, _In_ SIZE_T Length, _Out_ PSIZE_T ReturnLength ) { // 定义原始函数类型 typedef LONG WINAPI xNtQueryVirtualMemory( _In_ HANDLE xProcessHandle, _In_opt_ PVOID xBaseAddress, _In_ MEMORY_INFORMATION_CLASS xMemoryInformationClass, _Out_ PVOID xBuffer, _In_ SIZE_T xLength, _Out_ PSIZE_T xReturnLength ); // 获取原始函数地址 const auto xQVM = reinterpret_cast<xNtQueryVirtualMemory*>(GetProcAddress(ntdllCopyModule, "NtQueryVirtualMemory")); // 检测是否在查询调试相关的内存信息 if (MemoryInformationClass == MemoryProtection) { OutputDebugString(L"[NtQueryVirtualMemory] The debuggee attempts to query memory protection\n\tref: Custom Anti-Debug Reference"); // 可以选择修改返回结果 } // 调用原始函数 return xQVM(ProcessHandle, BaseAddress, MemoryInformationClass, Buffer, Length, ReturnLength); }
  1. 在钩子安装代码中注册新的钩子(通常在asho.cpp或类似文件中):
// 假设存在一个钩子安装函数 InstallHook("ntdll.dll", "NtQueryVirtualMemory", HookNtQueryVirtualMemory);

编译和测试你的扩展

完成上述修改后,你需要重新编译makin项目来应用这些扩展。编译步骤如下:

  1. 确保你已经安装了Visual Studio或其他兼容的C++编译器
  2. 打开makin.sln解决方案文件
  3. 在解决方案资源管理器中,右键点击解决方案并选择"生成"
  4. 编译成功后,你将在输出目录中获得更新后的可执行文件

测试你的扩展时,可以使用已知的反调试样本或虚拟机环境,验证新添加的检测规则是否生效。你可以通过查看调试输出或日志文件来确认检测结果。

总结与进阶提示

通过编辑checks.json文件和编写新的钩子函数,你可以轻松扩展makin的检测能力,使其能够应对不断涌现的新反调试和反虚拟机技术。以下是一些进阶提示:

  • 定期查看最新的反调试技术研究,及时更新你的检测规则
  • 考虑添加自定义的日志记录功能,以便更好地分析检测结果
  • 探索使用机器学习技术来识别新的恶意行为模式
  • 参与makin社区,分享你的扩展和发现

希望本指南能帮助你更好地理解和扩展makin的功能。记住,安全是一场持续的猫鼠游戏,不断学习和适应新的挑战是保持领先的关键!

【免费下载链接】makinmakin - reveal anti-debugging and anti-VM tricks [This project is not maintained anymore]项目地址: https://gitcode.com/gh_mirrors/ma/makin

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询