尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

应用安全 --- vmp流程

应用安全 --- vmp流程
📅 发布时间:2026/6/22 3:42:06

应用安全 --- vmp流程

VMP (2.0.3-2.13) 寻找OEP详细教程

📋 前置准备

  • 工具: OllyDbg / x64dbg / IDA Pro
  • 插件: OllyDumpEx、Scylla(用于后续dump)
  • 目标: 被VMP保护的程序

🎯 方法一:VirtualProtect断点法(经典方法)

第一步:设置VirtualProtect断点

text
1. 打开调试器,加载目标程序
2. Ctrl+G 跳转到 VirtualProtect 函数
3. 在VirtualProtect入口处下断点(F2)

第二步:分析区段保护修改

assembly
运行程序(F9),每次断在VirtualProtect时:
- 查看堆栈参数:
  参数1: lpAddress (要修改的内存地址)
  参数2: dwSize (大小)
  参数3: flNewProtect (新保护属性)
  参数4: lpflOldProtect (旧保护属性指针)

- 记录修改的是哪个区段:
  .text   - 代码段
  .data   - 数据段
  .rdata  - 只读数据段

关键点:当VirtualProtect修改 .text段 的属性为可执行(如PAGE_EXECUTE_READ)时,说明即将执行原始代码!

第三步:寻找VM_RETN

text
1. 最后一次VirtualProtect后,不要按F9
2. 单步跟踪(F8),寻找特征:
   - PUSHAD/PUSHFD (保存寄存器)
   - 大量垃圾代码
   - 寻找RETN指令
   
3. 在关键RETN处下断点
4. F9运行到RETN

第四步:.text段内存断点

text
1. 查看内存映射(M键或View->Memory)
2. 找到.text段基址
3. 右键 -> Breakpoint -> Memory, on access(访问断点)
4. F9运行
5. 断下时查看EIP,可能已在OEP或附近

🎯 方法二:ESP定律法(更简单)

完整步骤:

assembly
1. 程序停在入口点
2. 记录ESP的值(例如:0012FFA4)
3. 右键ESP寄存器 -> Follow in Dump
4. 在数据窗口,选中前4字节 -> Breakpoint -> Hardware, on access -> DWORD
5. F9运行
6. 断下后,单步几下(F8),通常会到达OEP

特征识别:
- 看到PUSH ebp / MOV ebp, esp
- 或 PUSH ebx / PUSH esi / PUSH edi
- 标准的函数序言 = OEP!

🎯 方法三:内存镜像法(针对2.0x版本)

text
步骤:
1. Ctrl+G -> ImageBase(程序基址,如00400000)
2. 右键 -> Follow in Dump
3. 在数据窗口,右键 -> Breakpoint -> Memory, on execution
4. F9运行
5. 第一次断下继续F9
6. 第二/三次断下,查看附近代码,可能是OEP

🎯 方法四:StrongOD插件自动化

text
使用OllyDbg + StrongOD插件:

1. 加载程序
2. 插件 -> StrongOD -> VMP
3. 选择版本(2.0x)
4. 点击"查找OEP"
5. 自动停在OEP或附近

手动验证:
- 查看代码是否正常
- 是否有标准函数序言
- 交叉引用是否合理

✅ OEP识别特征

真正的OEP通常有这些特征:

assembly
典型C/C++程序:
00401000  PUSH EBP
00401001  MOV EBP, ESP
00401003  SUB ESP, XXX

或Delphi程序:
00401000  PUSH EBX
00401001  PUSH ESI
00401002  PUSH EDI

或简单程序:
00401000  CALL XXXXXXXX  ; 调用初始化函数
00401005  MOV EAX, XXX

错误的位置特征:

  • 大量垃圾指令
  • 不正常的跳转
  • 没有函数调用
  • 全是NOP或重复指令

📊 调试示例(实战)

assembly
假设目标:test.exe (VMP 2.08)

1. OD加载,停在: 00D51000
2. 下VirtualProtect断点
3. F9运行,第1次断下:修改.data段
4. F9运行,第2次断下:修改.rsrc段
5. F9运行,第3次断下:修改.text段 ← 关键!
   
   堆栈参数显示:
   00401000  ; lpAddress (.text段基址)
   00003000  ; dwSize
   00000020  ; PAGE_EXECUTE_READ

6. F8单步几下,看到:
   00D52341  POPAD
   00D52342  POPFD
   00D52343  RETN
   
7. F8执行RETN后,跳到:00401000

8. 查看00401000处代码:
   00401000  55           PUSH EBP
   00401001  8BEC         MOV EBP, ESP
   00401003  6AFF         PUSH -1
   
   ✅ 这就是OEP!

⚠️ 注意事项

  1. 不同版本差异:

    • VMP 2.0x 相对简单
    • VMP 2.13 可能有多层虚拟化
  2. 多次虚拟机嵌套:

    • 可能需要多次使用方法
    • 注意识别真假OEP
  3. STOLEN BYTES:

    • OEP前几个字节可能被偷取
    • 需要从虚拟机中提取还原
  4. 后续工作:

    • 找到OEP只是第一步
    • 还需Dump内存、修复IAT
    • 使用Scylla或ImportREC修复导入表

🔧 完整脱壳流程

text
1. 找OEP (上述方法)
2. Dump内存 (OllyDumpEx)
3. 修复IAT (Scylla)
4. 测试脱壳后程序
5. 如有问题,检查Stolen Bytes

需要具体某个样本的详细演示吗?

相关新闻

  • 语言-地图slam ConceptGraphs: Open-vocabulary 3D scene graphs for perception and planning, - MKT
  • 点云配准 GeoTransformer - MKT
  • tryhackme-网络安全基础-命令行- Windows PowerShell-22

最新新闻

  • 新手电商开店一站式工具推荐:抖掌柜支持全平台运营软件抖店 微信小店 - 抖掌柜
  • firewalld区域服务模型原理与Docker兼容配置实战
  • 2026年当前济南精密钣金加工供应商几家选择与深度解析 - 品牌鉴赏官2026
  • BGU8052 LNA输入回波损耗优化:从匹配原理到1900MHz实战调试
  • 心理学驱动的AI越狱攻击:PRJA框架原理与防御实战
  • 2026遵义本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号