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通过一个巧妙的设计来检测反调试技术:它打开目标样本作为调试对象,然后注入asho.dll动态链接库。这个DLL会钩住ntdll.dll和kernelbase.dll中的关键函数,当检测到参数检查时,它会发送相应的消息给调试器(makin.exe)。
主要检测技术覆盖范围
makin能够检测多种反调试技术,包括但不限于:
- ntdll.dll相关检测:
NtClose、NtOpenProcess、NtCreateFile等系统调用 - kernelbase.dll相关检测:
IsDebuggerPresent、CheckRemoteDebuggerPresent等函数 - PEB结构检查:
BeingDebugged标志、NtGlobalFlag标志 - 虚拟机检测:通过注册表、文件系统和进程检查VM环境
🛠️ 项目结构与关键文件解析
要有效维护makin项目,首先需要了解其代码结构:
核心源代码文件
- makin/makin.cpp - 主调试器实现文件,包含调试逻辑和消息处理
- asho/asho.cpp - 注入DLL的主要实现文件
- asho/hook.h - 函数钩子定义和声明
- asho/utils.h - 工具函数和辅助功能
配置文件
- makin/checks.json - 虚拟机检测配置,无需修改可执行文件即可扩展检测能力
第三方依赖
- external/zydis/ - Zydis反汇编引擎(MIT许可证)
- external/json/ - JSON for Modern C++库(MIT许可证)
🔧 如何为makin添加新的反调试检测功能
步骤1:识别新的反调试技术
首先,研究最新的反调试技术。可以参考以下资源:
- 《The "Ultimate" Anti-Debugging Reference》文档
- al-khaser项目中的反调试实现
- 最新的恶意软件分析报告
步骤2:修改asho.dll的钩子函数
在asho/hookFunctions.h中添加新的函数钩子。例如,要检测新的API调用:
// 示例:添加对新API的钩子 HOOK_DEFINE(NtNewDebugFunction, NTSTATUS, WINAPI, ( _In_ HANDLE ProcessHandle, _In_ PROCESSINFOCLASS ProcessInformationClass, _Out_writes_bytes_(ProcessInformationLength) PVOID ProcessInformation, _In_ ULONG ProcessInformationLength, _Out_opt_ PULONG ReturnLength )) { // 检测逻辑实现 if (某些反调试条件) { SendDetectionMessage("新的反调试技术检测"); } return Original_NtNewDebugFunction(ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength); }步骤3:更新makin的消息处理
在makin/makin.cpp中,找到ProcessOutputString函数,添加对新检测消息的处理:
auto newDetection = strstr(pMsg.get(), "NEW_DETECTION:"); if (newDetection != nullptr) { printf_s("[检测到] 新的反调试技术\n"); // 记录到日志或生成报告 }步骤4:扩展虚拟机检测配置
无需重新编译,直接编辑makin/checks.json文件即可添加新的VM检测规则:
{ "Registry": { "KeyChecks": { "NewVM": [ "newvm", "customvm" ] }, "ValueChecks": [ "CustomVMIdentifier", "HypervisorType" ] }, "FileSystem": { "Files": [ "newvmdriver.sys", "customvm.sys" ] }, "Processes": [ "newvm_service.exe", "customvm_tool.exe" ] }🐛 常见问题修复与调试技巧
问题1:注入失败或DLL加载错误
解决方案:
- 检查目标进程的架构(32位/64位)
- 验证DLL依赖项是否完整
- 查看调试器输出中的错误信息
问题2:函数钩子不生效
调试步骤:
- 在asho/hook.h中增加调试日志
- 使用Process Monitor监控API调用
- 检查函数签名是否匹配
问题3:IDAPython脚本生成错误
修复方法:
- 检查makin/makin.cpp中的脚本生成逻辑
- 确保Python语法正确
- 验证断点地址计算准确性
📈 性能优化建议
内存使用优化
在makin/makin.cpp中,可以优化内存分配:
// 使用智能指针管理资源 std::unique_ptr<CHAR[]> pMsg{new CHAR[out_info.nDebugStringLength * sizeof(CHAR)]};多线程支持
考虑为大型样本分析添加多线程支持:
// 示例:线程池实现 std::vector<std::thread> analysisThreads; for (auto& sample : samples) { analysisThreads.emplace_back([&sample]() { AnalyzeSample(sample); }); }🧪 测试新功能的完整流程
测试环境搭建
- 准备测试样本:收集已知使用反调试技术的恶意软件
- 设置虚拟机环境:配置VMware、VirtualBox等不同虚拟机
- 安装调试工具:准备WinDbg、x64dbg等调试器
测试步骤
- 编译修改后的makin和asho
- 运行makin并加载测试样本
- 观察检测输出是否包含新功能
- 验证IDAPython脚本正确性
- 在不同Windows版本上测试兼容性
测试用例设计
| 测试类型 | 测试内容 | 预期结果 |
|---|---|---|
| 功能测试 | 新API钩子检测 | 正确识别并报告 |
| 兼容性测试 | Windows 7/10/11 | 所有版本正常工作 |
| 性能测试 | 大型样本分析 | 内存使用稳定 |
| 回归测试 | 原有功能 | 不受新代码影响 |
📚 学习资源与社区贡献
推荐学习资料
- Windows内部原理:理解PEB、TEB等结构
- 反调试技术文档:Pafish、al-khaser等项目
- 调试器开发:《Windows via C/C++》相关章节
贡献代码的最佳实践
- 保持向后兼容:新功能不应破坏现有检测
- 添加详细注释:说明技术原理和实现方法
- 编写测试用例:确保代码质量
- 遵循代码风格:保持与现有代码一致
🎯 总结:让停止维护的项目重获新生
维护已停止维护的项目如makin不仅是对个人技术能力的挑战,也是对开源社区的宝贵贡献。通过:
- 深入理解原有架构- 掌握核心设计思想
- 渐进式添加功能- 从小改动开始,逐步扩展
- 全面测试验证- 确保稳定性和兼容性
- 文档化修改- 帮助其他开发者理解变化
您可以让这个优秀的反调试检测工具继续发挥作用,甚至比原作者维护时更加完善。记住,每个停止维护的项目都可能因为您的贡献而焕发新生!🚀
💡小贴士:开始维护前,建议先熟悉项目现有的Issue和Pull Request,了解社区已经讨论过的问题和需求。
【免费下载链接】makinmakin - reveal anti-debugging and anti-VM tricks [This project is not maintained anymore]项目地址: https://gitcode.com/gh_mirrors/ma/makin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考