首页
社区
课程
招聘
[原创]理解VM 一个CraCkMe的VM简单分析
发表于: 2009-2-9 01:09 11017

[原创]理解VM 一个CraCkMe的VM简单分析

2009-2-9 01:09
11017

【文章标题】: 理解VM 一个CraCkMe的VM简单分析
【文章作者】: eASYVm
【作者主页】: http://blog.sina.com.cn/77muyulong
【软件名称】: crackme.exe_BY_KuNgBiM
【下载地址】: http://bbs.pediy.com/showthread.php?threadid=40679
【编写语言】: asm
【使用工具】: OD
【软件介绍】: 一个带有微小完整虚拟机引擎crackme
【作者声明】: 仅是感兴趣...
--------------------------------------------------------------------------------
【详细过程】
最近的日子实在是太无聊了...

看不到一点曙光 于是决定学习一下虚拟机运作原理了 搜索了大量的网上文章并拜读之

深感受益匪浅 故成此文 仅作菜虫学习过程之心得~无他...

各位大侠不要笑我炒冷饭 这确是我第一个分析的VM

所以选择这个程序来联系 一是因为asm编写结构清晰 二是伪指令并不多 据某大侠说该虚拟机配备了一个基于堆栈 单操作数的伪指令系统 虽比不上商业保护的VM复杂程度 但是也算样样俱全~

学习VM 首先你要对VM有个理解

VM就是虚拟机的意思 但是这里的虚拟机并不同于VMware Workstation中的那种虚拟机 在这里的虚拟机只是说一个环境 这个环境可以使你自己的代码脱离计算机CPU的寄存器 堆栈等等运行 而其使用的是你自己定义的一套环境 其中包括所要用到的寄存器 堆栈 甚至还有可能是数据区 而这些可以在你的代码段里 可以在你的数据段里 也可以在CPU的堆栈里分配空间 进行使用...今天分析的这个程序就是一个典型的堆栈机 它将自己的环境以临时变量的形式分配在了子函数的临时变量空间...

  00401060 <> $  55                  push ebp                         ;  VMproc
  00401061    .  8BEC                mov ebp,esp
  00401063    .  81C4 D0FEFFFF       add esp,-130                     ;  分配临时变量空间储存虚拟机环境配置
  
  00401069    .  C745 E4 00000000    mov dword ptr ss:[ebp-1C],0      ;  \VMedi
  00401070    .  C745 E8 00000000    mov dword ptr ss:[ebp-18],0      ;  |VMecx
  00401077    .  C745 F1 00000000    mov dword ptr ss:[ebp-F],0       ;  |VMesp
  0040107E    .  C645 FD 00          mov byte ptr ss:[ebp-3],0        ;  |标志寄存器S
  00401082    .  C645 FE 00          mov byte ptr ss:[ebp-2],0        ;  |标志寄存器Z
  00401086    .  C745 F5 00000000    mov dword ptr ss:[ebp-B],0       ;  |VMeax
  0040108D    .  8D85 D0FEFFFF       lea eax,dword ptr ss:[ebp-130]   ;  |lpVMstack指针
  00401093    .  8945 F1             mov dword ptr ss:[ebp-F],eax     ;  |虚拟机环境初始化;lpVMstack入VMesp
  00401096    .  8B45 14             mov eax,dword ptr ss:[ebp+14]    ;  |
  00401099    .  8945 E0             mov dword ptr ss:[ebp-20],eax    ;  |
  0040109C    .  8B45 08             mov eax,dword ptr ss:[ebp+8]     ;  |
  0040109F    .  8945 D0             mov dword ptr ss:[ebp-30],eax    ;  |
  004010A2    .  8B45 0C             mov eax,dword ptr ss:[ebp+C]     ;  |
  004010A5    .  8945 D8             mov dword ptr ss:[ebp-28],eax    ;  |
  004010A8    .  C745 DC 00000000    mov dword ptr ss:[ebp-24],0      ;  |
  004010AF    .  C745 D4 00000000    mov dword ptr ss:[ebp-2C],0      ;  /
   
  004010B6    .  8B45 10             mov eax,dword ptr ss:[ebp+10]    ;  \读取伪指令指针
  004010B9    .  8945 EC             mov dword ptr ss:[ebp-14],eax    ;  |伪指令指针入VMeip
  004010BC    >  FF45 EC             inc dword ptr ss:[ebp-14]        ;  |VMeip +1     ;VMentry
  004010BF    .  8B45 EC             mov eax,dword ptr ss:[ebp-14]    ;  |
  004010C2    .  8A00                mov al,byte ptr ds:[eax]         ;  |读取伪指令 置al
  004010C4    .  8845 F0             mov byte ptr ss:[ebp-10],al      ;  |传al置VMcode(VM环境)
  004010C7    .  B8 00204000         mov eax,crackme.00402000         ;  |传VMJMPbase置eax
  004010CC    .  0FB65D F0           movzx ebx,byte ptr ss:[ebp-10]   ;  |VMcode拓展
  004010D0    .  C1E3 02             shl ebx,2                        ;  |VMcode*4
  004010D3    .  03C3                add eax,ebx                      ;  |VMcode*4+VMJMPbase
  004010D5    .  FF20                jmp dword ptr ds:[eax]           ;  /跳转至VM函数
   
  jmp short crackme.004010BC       ;  JMPtoVMentry   
   
  指令VMnop    004010D7
 
  004010D7    .^\EB E3               jmp short crackme.004010BC       ;  JMPtoVMentry   ;VMnop
   

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发
整天听nooby说猥琐
不懂
痛苦学习中......
2009-2-9 04:12
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
3
好东西,真想能跟你一起入门vm
2009-2-9 10:15
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
对大侠来说简直易如反掌~
2009-2-9 22:55
0
雪    币: 234
活跃值: (214)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
功力不够 理解不了
2009-2-11 13:51
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
nooby是泡过洋水的大牛
2009-2-14 16:25
0
游客
登录 | 注册 方可回帖
返回
//