其实我也是个菜鸟,只是看大家那么对人问VM,发表下自己的看法,大牛别笑
VM的还原,我个人呢,总结了集中方法
第一种方法:对比
比如说现在的过图第一个点97F660

0097F65E    CC              int3
0097F65F    CC              int3
0097F660    E9 61D2A501     jmp 023DC8C6
0097F665    68 48F76C01     push 0x16CF748
0097F66A    64:A1 00000000  mov eax,dword ptr fs:[0]
0097F670    50              push eax

一看就知道是一个CALL的头部,VM HOOK了5个字节,下一句是push 0x16CF748
这个好办多了,其实有好多CALL,头部都PUSH了一个像这样的一个数,看看上面是什么,就知道怎么还原了
在最近找个CALL看看,就可以还原.比如

004A89A0    55              push ebp
004A89A1    8BEC            mov ebp,esp
004A89A3    6A FF           push -0x1
004A89A5    68 10746801     push 0x1687410
004A89AA    64:A1 00000000  mov eax,dword ptr fs:[0]

一对比看就知道上面被HOOK的地方为
push ebp
mov ebp,esp
push -1
刚刚好5个字节,于是呢,还原就是

0097F660 = 55 8B EC 6A FF

但是呢,这种方法适用范围小

第二种方法,查找
现在过图CALL的第3个点是9F644D

009F644D   /E9 9C5C9E01     jmp 023DC0EE
009F6452   |90              nop
009F6453   |90              nop
009F6454   |59              pop ecx
009F6455   |5F              pop edi
009F6456   |5E              pop esi
009F6457   |5B              pop ebx
009F6458   |8BE5            mov esp,ebp
009F645A   |5D              pop ebp
009F645B   |C3              retn

大家看一下,009F644D处HOOK了5个字节,然后NOP填充了2个字节,意思就是一共HOOK了7个字节
那么他HOOK后跳回的地址就是00976454

然后我们CTRL+S查找命令 JMP 00976454
就找到一个点
02F4FF63    64:890D 0000000>mov dword ptr fs:[0],ecx
02F4FF6A    9C              pushfd
02F4FF6B    66:892424       mov word ptr ss:[esp],sp
02F4FF6F    9C              pushfd
02F4FF70    9C              pushfd
02F4FF71    8D6424 4C       lea esp,dword ptr ss:[esp+0x4C]
02F4FF75  ^ E9 DA64AAFD     jmp 009F6454

然后大家往上走,就看到一句
02F4FF63    64:890D 0000000>mov dword ptr fs:[0],ecx

刚刚好7个字节,
于是还原了就是
009F644D = 64 89 0D 00 00 00 00
如果实在不放心,大家可以测试下崩溃不,或者找最几个相同的地方去看看

第三种,跟踪返回点
现在过图的第二个点97F91D

0097F91D    E8 B7CFA501     call 023DC8D9
0097F922    85C0            test eax,eax
0097F924    0F84 93000000   je 0097F9BD
0097F92A    8B4D CC         mov ecx,dword ptr ss:[ebp-0x34]
0097F92D    8B81 24060000   mov eax,dword ptr ds:[ecx+0x624]
0097F933    50              push eax

这种VM不是JMP跳转的,他是CALL一个地址
CALL呢有一个返回地址,返回地址其实就是RETN时ESP的值
知道这个就好办了
我们看他是HOOK了5个字节,那么他的返回点就是0097F922
我们在0097F91D处下断,断下后,CTRL+T(设置条件断点)
我们在 条件为真 的前面打勾 在后面输入
[ESP]==0097F922
然后确定,CTRL+F7(自动步入)
他就会自动一直往下跑,一直跑到ESP的值是0097F922的时候才会暂停
大家等一会就会断下了,最后呢断在
02F50B52    C74424 24 22F99>mov dword ptr ss:[esp+0x24],0x97F922
02F50B5A    883424          mov byte ptr ss:[esp],dh
02F50B5D    894424 14       mov dword ptr ss:[esp+0x14],eax
02F50B61    60              pushad
02F50B62    53              push ebx
02F50B63    FF7424 48       push dword ptr ss:[esp+0x48]
02F50B67    C2 4C00         retn 0x4C
跳回去后,执行的第一条指令是 test eax,eax,那被HOOK的地方一定跟EAX有关,我们往上看
找不到我们要的数据,那怎么办呢,我们继续网上找
查找所有常量  02F50B52
我们就会找到一句
02F53B5E  ^\E9 EFCFFFFF     jmp 02F50B52
我们条过去看看

02F53B34    66:0FBEC1       movsx ax,cl
02F53B38    66:0FB6D2       movzx dx,dl
02F53B3C    66:0FC9         bswap cx
02F53B3F    FD              std
02F53B40    9D              popfd
02F53B41    2F              das
02F53B42    61              popad
02F53B43    9C              pushfd
02F53B44    F8              clc
02F53B45    881C24          mov byte ptr ss:[esp],bl
02F53B48    9C              pushfd
02F53B49    83C4 0C         add esp,0xC
02F53B4C    60              pushad
02F53B4D    54              push esp
02F53B4E    C60424 E0       mov byte ptr ss:[esp],0xE0
02F53B52    8D6424 24       lea esp,dword ptr ss:[esp+0x24]
02F53B56    E8 754763FD     call 005882D0
02F53B5B    57              push edi
02F53B5C    9C              pushfd
02F53B5D    60              pushad
02F53B5E  ^ E9 EFCFFFFF     jmp 02F50B52

大家注意到没.红色这条就是我们要的指令了
复制下来,跳回到0097F91D,把他改为 call 005882D0
然后我们二进制复制下来就OK了
那么还原了就是
0097F91D = E8 AE 89 C0 FF

到这呢,我的方法也就结束了,本人仅仅发表个人观点,大家交流下,大牛勿喷!!

关于DNF还原VM的一些个人观点相关推荐

  1. php opcode逆向还原,[原创]VM代码的还原-插件篇

    首先,先给出几个工具.大概都是伪码类的.之前也介绍过.首先推荐的是zdhysd 师傅的VMP分析插件 1.4 之前介绍过了.. 下载地址:http://bbs.pediy.com/thread-154 ...

  2. VEEAM 7 tape还原的各类小麻烦

    这两天用VEEAM 7还原VM文件,遇见了好几个小问题,跟大家分享一下. 最近一台Citrix的VM因为升级程序失败,导致不工作了,正好之前用Veeam 7进行了备份,豆子打算试试看能不能进行还原.升 ...

  3. PMP常考知识点核对单-10.沟通管理

    索引 沟通管理 10.1了解P359-P365的相关内容(⭐️⭐️⭐️⭐️) 10.1沟通技术(⭐️⭐️⭐️) 10.1沟通模型(⭐️⭐️⭐️) 10.1沟通方法(⭐️⭐️⭐️⭐️) 10.1沟通管理 ...

  4. 港科夜闻|香港科大汪扬教授、李泽湘教授受邀出席2022年粤港澳大湾区青少年公益年会创科大咖说,分享大湾区未来创新机遇...

    关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1.香港科大汪扬教授.李泽湘教授将于6月12日14:00受邀出席2022年粤港澳大湾区青少年公益年会"创科大咖说",分享大湾区 ...

  5. CentOS 7.4 安装 网易云音乐

    CentOS 7.4 安装 网易云音乐 本文包含: 安装dnf 编译gcc 5.4.0 安装各种包 安装网易云音乐贯穿全局; 安装环境: CentOS 7.4, kernel3.10.0, gcc4. ...

  6. 第十章:项目沟通管理 - (10.1 规划沟通管理)

    规划沟通管理是基于每个相关方或相关方群体的信息需求.可用的组织资产,以及具体项目的需求,为项目沟通活动制定恰当的方法和计划的过程.本过程的主要作用是,为及时向相关方提供相关信息,引导相关方有效参与项目 ...

  7. vsphere虚拟化备份解决方案

    一.概述 vsphere环境中,目前已经大多数第三方软件都满足对vsphere环境的备份支持了,那如何选择呢,需要参考2个标准,以满足效率与效益的目标: 1)支持无代理程序备份框架:如可透过vmwar ...

  8. 收藏警告!2019腾讯手游大爆发?一大波经典IP手游来袭

    回顾2018年,腾讯拿得出手的手游似乎只有刺激战场也就是现在的和平精英,虽然去年鹅厂的手游精品不多,但是光靠刺激战场就已经占据了半壁江山.就在今年,腾讯将有一大票精品手游来袭,且大多出自端游经典IP, ...

  9. Veeam Backup 11 即时与快速恢复

    即时恢复介绍 当启动即时虚拟机恢复 时 Veeam 把 Veeam Backup & Replication 服务器转变成了NFS 服务器,通过主机内置的 NFS 客户端连接到 ESXi 主机 ...

最新文章

  1. Docker Buildx插件
  2. eclipse如何连接mysql_Python如何连接 MySQL?
  3. 垃圾回收算法|GC标记-清除算法
  4. QT绘图控件QWT的安装及配置
  5. Eclipse导入项目常见问题----服务器版本问题02
  6. 怎样一步步用D3画多曲线
  7. (2017.9.27) 自定义列表项 list-style 使用心得
  8. jQuery 实现Ajax
  9. 福建省考计算机专业,2020福建省考,这些报考专业问题你清楚吗?
  10. web前端教程:css实现容器高度适应屏幕高度
  11. 一个mysql复制中断的案例
  12. Java Web应用小案例:查询城市天气信息
  13. 任务寄存器TR:GDT、LDT、IDT、TR、TSS之间的关系
  14. 输出文件名,用i迭代的时候的方法
  15. 大喇叭疫情防控广播解决方案
  16. require smarty.class.php 报错,Smarty 报错
  17. 深度学习--- GAN网络原理解析
  18. [渝粤教育] 中国地质大学 大学语文 复习题 (2)
  19. Jenkins 如何使用 CrumbIssuer 防御 CSRF 攻击
  20. 用java写一个图书类book

热门文章

  1. Denoising/图像恢复
  2. pg_hint_plan
  3. 今日头条自媒体搬运原创视频批量去水印消重包推荐0基础教程 如何快速找素材进行伪原创-自媒体爆文...
  4. 来自程序员的专属浪漫
  5. 怎么用视频编辑软件去掉视频中的水印
  6. Windows10下开视频对方听不到声音
  7. 用户对计算机调查,用户使用调查报告
  8. 三星A7计算机,5.5寸大屏纤薄金属机 三星GALAXY A7评测
  9. iphone文件连接服务器怎么删除,iPhone - 是否有可能在解析后删除服务器上的xml文件...
  10. 基于 MDK5实现STM32串口通信