《VMP源码分析:反调试与绕过方法》PDF电子书文档

《VMP源码分析:反调试与绕过方法》PDF电子书文档

这篇电子书文章主要围绕 VMP(虚拟机保护壳)展开,深入分析了其反调试机制并给出纯 R3(用户模式)下的绕过方法,具体内容如下:

  1. VMP 反调试相关源码部分
    • 如何检索反调试源码:当 VMP 检测到被调试时会弹出报错信息,通过该信息在源码中定位,利用其消息传递机制,查找 “mtDebuggerFound” 的引用,即可找到各处反调试相关源码。
    • 源码阅读:反调试手段
      • 系统版本号的判断:获取系统版本号的方式有从 PEB(进程环境块)中获取或从 ntdll.dll 头部获取文件版本号。VMP 通过判断系统版本号确定系统调用号,若版本不在适配范围,会重新映射 ntdll 并寻找所需 NT 函数的系统调用号。《VMP源码分析:反调试与绕过方法》PDF电子书文档
      • PEB->BeingDebugged 标记:检查 PEB 中的 “BeingDebugged” 位,若该位被设置,说明程序被调试。
      • ProcessDebugPort:查询 ProcessDebugPort,若查到则表明程序被调试。
      • ProcessDebugObjectHandle:检查是否存在调试对象句柄,若存在则程序被调试。
      • SystemKernelDebuggerInformation:针对内核调试器的监测,若相关信息表明内核调试器启用,则判定程序被调试。
      • 针对驱动模块名的匹配:检测常见内核级调试器的驱动名,若匹配则判定程序被调试。
      • 线程隐藏:对调试器隐藏当前线程。
      • 函数头 0xCC 断点检测:检测要调用的函数是否被下 0xCC 断点。
      • 内存断点检测:检测内存是否存在断点。
      • 假句柄:通过关闭无效句柄判断是否中陷阱,若成功关闭则表明程序被调试。
      • TrapFlag 与硬件断点检测:设置 TrapFlag 触发异常,在异常处理中检查硬件断点寄存器是否设置。
    • 源码部分总结:VMP 使用了 10 多种常见反调试手段,涵盖普通调试器和内核调试器的检测,部分查询 API 使用 syscall,难以从 R3 直接突破。
  2. VMP 反调试的 Bypass(纯 R3)
    • bypass 关键点:VMP 为兼容 wine 环境,会检查 ntdll.dll 导出表中是否存在 wine_get_version 函数,若存在则关闭系统调用特性。因此,通过修改 ntdll.dll 的导出表,添加 wine_get_version 导出项,即可关闭系统调用,进而实现绕过反调试。
    • bypass 代码:以 x64dbg 官方插件 ScyllaHide 为例,在其 InjectorCLI\ApplyHooking.cpp 文件中插入代码,复制 ntdll.dll 的导出表,添加 wine_get_version 导出项(实际调用 NtCurrentProcess)。编译后将产物放入 x64dbg 插件目录,即可从纯 R3 绕过 VMP 反调试。
  3. 结语:VMP 因想要兼容 wine 环境但校验简单且源码泄露,给了绕过反调试的机会。此外,VMP 源码还有其他值得学习之处,有待后续探讨。作者本次实验使用的 VMP 版本为 3.8.4。
下载权限
查看
  • 免费下载
    评论并刷新后下载
    登录后下载
  • {{attr.name}}:
您当前的等级为
登录后免费下载登录 小黑屋反思中,不准下载! 评论后刷新页面下载评论 支付以后下载 请先登录 您今天的下载次数(次)用完了,请明天再来 支付积分以后下载立即支付 支付以后下载立即支付 您当前的用户组不允许下载升级会员
您已获得下载权限 您可以每天下载资源次,今日剩余
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。E-mail:ziyuanhe6@qq.com

给TA打赏
共{{data.count}}人
人已打赏
上传下载

KeepStreamsv1.2.2.6:多平台视频下载工具

2024-6-17 7:00:00

媒体播放

方格音乐_V1.6.1PC版下载免费高颜值无损音乐下载和播放器

2024-7-31 22:28:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索