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中,每个钩子函数都遵循相似的结构:
- 定义原始函数的类型
- 获取原始函数的地址
- 实现钩子逻辑
- 调用原始函数(可选)
例如,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函数,该函数常被用于检测调试器。我们可以按照以下步骤进行:
- 在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); }- 在钩子安装代码中注册新的钩子(通常在asho.cpp或类似文件中):
// 假设存在一个钩子安装函数 InstallHook("ntdll.dll", "NtQueryVirtualMemory", HookNtQueryVirtualMemory);编译和测试你的扩展
完成上述修改后,你需要重新编译makin项目来应用这些扩展。编译步骤如下:
- 确保你已经安装了Visual Studio或其他兼容的C++编译器
- 打开makin.sln解决方案文件
- 在解决方案资源管理器中,右键点击解决方案并选择"生成"
- 编译成功后,你将在输出目录中获得更新后的可执行文件
测试你的扩展时,可以使用已知的反调试样本或虚拟机环境,验证新添加的检测规则是否生效。你可以通过查看调试输出或日志文件来确认检测结果。
总结与进阶提示
通过编辑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),仅供参考