首页
社区
课程
招聘
[原创]“VmpSDK.CrackMe.By.Hmily”分析记录080228.txt
发表于: 2008-2-28 23:55 13317

[原创]“VmpSDK.CrackMe.By.Hmily”分析记录080228.txt

2008-2-28 23:55
13317

【文章标题】: “VmpSDK.CrackMe.By.Hmily”分析记录
【文章作者】: 壳狼
【软件名称】: VmpSDK.CrackMe.By.Hmily
【下载地址】: 自己搜索下载
【加壳方式】: 未知
【保护方式】: vmprotect
【编写语言】: Dephi
【使用工具】: IDA,OD,Improtrec,LordPE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  一、脱壳
  1.1查壳
      peid显示为nothing find
  1.2脱壳
      OD载入后,明显有壳
  00488000 >  68 040E4500     push    00450E04
  00488005    9C              pushfd
  00488006    60              pushad
  00488007    E8 75060000     call    00488681
          使用ESP定律,到达oep后,dump,然后修复IAT。运行脱壳后程序正常。
  1.3再查壳
      peid查已脱壳文件为Borland Delphi 6.0
  
  二、分析
  2.1静态分析
    IDA载入。分析完成后,查看navigator,一大片青色(让人激动,都是识别的库函数),颜色分界比较清晰,不是那么杂乱。
     看到一窄粉色的(IAT),一大片灰色中(数据,主要是虚拟机机器码)夹着一条蓝(虚拟机引擎)
    Alt-V执行VMprotect1.2X_op伪代码识别插件,没有成功,说明不是1.2X版本,也不是1.5版本
    IDA中鼠标点击navigator上的蓝色部分查看VM部分,应是典型的vmprotect结构,与以往略有差别,IDA5.2的jmptable好象
  确实有所增强。标记标签VM_OP_TABLE,VM_ENGINE和几个简单的opcode如VM_RETN,VM_POP_CT,VM_PUSH_CT等。
    VM_RETN很好识别
  

  _VmpSDK:004586EC VM_RETN:                                ; CODE XREF: VM_ENGINE+27j
  _VmpSDK:004586EC                                         ; DATA XREF: VM_ENGINE+3D3o ...
  _VmpSDK:004586EC                 mov     esp, ebp
  _VmpSDK:004586EE                 pop     eax
  _VmpSDK:004586EF                 pop     edi
  _VmpSDK:004586F0                 pop     esi
  _VmpSDK:004586F1                 pop     eax
  _VmpSDK:004586F2                 pop     ecx
  _VmpSDK:004586F3                 pop     ebp
  _VmpSDK:004586F4                 pop     ebx
  _VmpSDK:004586F5                 pop     edx
  _VmpSDK:004586F6                 pop     ecx
  _VmpSDK:004586F7                 popf
  _VmpSDK:004586F8                 retn
  
  _VmpSDK:00450A68 _TForm1_Button1Click proc near          ; DATA XREF: _VmpSDK:00450A0Co
  _VmpSDK:00450A68
  _VmpSDK:00450A68 arg_4           = byte ptr  0Ch
  _VmpSDK:00450A68
  _VmpSDK:00450A68 ; FUNCTION CHUNK AT _VmpSDK:00458D91 SIZE 00000041 BYTES
  _VmpSDK:00450A68
  _VmpSDK:00450A68                 push    ebp
  _VmpSDK:00450A69                 mov     ebp, esp
  _VmpSDK:00450A6B                 push    0
  _VmpSDK:00450A6D                 push    0
  _VmpSDK:00450A6F                 push    ebx
  _VmpSDK:00450A70                 push    esi
  _VmpSDK:00450A71                 mov     ebx, eax
  _VmpSDK:00450A73                 xor     eax, eax
  _VmpSDK:00450A75                 push    ebp
  _VmpSDK:00450A76                 push    offset loc_450B53
  _VmpSDK:00450A7B                 push    dword ptr fs:[eax]
  _VmpSDK:00450A7E                 mov     fs:[eax], esp
  _VmpSDK:00450A81                 jmp     loc_458D91
  _VmpSDK:00450A81 _TForm1_Button1Click endp
  
  _VmpSDK:00458D91 Enter_VM:                               ; CODE XREF: _TForm1_Button1Click+19j
  _VmpSDK:00458D91                 push    offset VM_OPCODE_PTR ; ptr
  _VmpSDK:00458D96                 call    VM_ENGINE   ;<=进入VMENGINE
  ....
  
  _VmpSDK:004580AD ; int __cdecl VM_ENGINE(void *ptr)
  _VmpSDK:004580AD VM_ENGINE       proc near               ; CODE XREF: _TForm1_Button1Click+832Ep
  _VmpSDK:004580AD                                         ; _VmpSDK:00459BEFp
  _VmpSDK:004580AD
  _VmpSDK:004580AD ptr             = dword ptr  4
  _VmpSDK:004580AD
  _VmpSDK:004580AD ; FUNCTION CHUNK AT _VmpSDK:00458000 SIZE 000000AD BYTES
  _VmpSDK:004580AD
  _VmpSDK:004580AD                 pushf
  _VmpSDK:004580AE                 push    ecx
  _VmpSDK:004580AF                 push    edx
  _VmpSDK:004580B0                 push    ebx
  _VmpSDK:004580B1                 push    ebp
  _VmpSDK:004580B2                 push    edx
  _VmpSDK:004580B3                 push    eax
  _VmpSDK:004580B4                 push    esi
  _VmpSDK:004580B5                 push    edi
  _VmpSDK:004580B6                 push    0
  _VmpSDK:004580BB                 mov     esi, [esp+28h+ptr]
  ....
  
堆栈:
  0012F608   0042FAD0  <dumped_.Controls::TControl::GetText(void)>
  0012F60C   00459240  dumped_.00459240
  
堆栈:
  0012F608   004045EC  <dumped_.System::__linkproc__ LStrCmp(void)>
  0012F60C   00459992  dumped_.00459992
  寄存器:
  EAX 00D73FE4 ASCII "shellwolf"
  ECX 77D187FF user32.77D187FF
  EDX 00450B68 ASCII "Hmily"
  

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

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
附件:......
上传的附件:
2008-2-29 00:07
0
雪    币: 2256
活跃值: (941)
能力值: (RANK:2210 )
在线值:
发帖
回帖
粉丝
3
加精鼓励
再接再厉哦,关于VM
CRACKME的帖子有点少。。。呵呵!再来几篇
2008-2-29 10:09
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
4
恭喜壳狼兄,学习
2008-2-29 10:37
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
楼主好强强!
2008-2-29 12:39
0
雪    币: 152
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
精彩的分析,学习了!
2008-3-2 06:48
0
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
7
强大的说!!!!!!
2008-3-4 21:54
0
雪    币: 1485
活跃值: (884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
UNPACK那边没人写文章来着,看雪这边好~学习LZ的分析VM~
2008-3-8 14:43
0
雪    币: 1485
活跃值: (884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习

爆破方法为找在VM_RETN之前的两个连续的VM_PUSH_IMM,里面的立即数(加了密
  的)为两个跳转分支。将两个立即数交换后,可以达到爆破。相当于jz=>jnz

转载到BLOG~
2008-3-8 14:57
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主太厉害了,学习了。。。
2009-7-10 23:02
0
雪    币: 319
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
强人。。。。。。。。。。。。。。。。。。。。。。。。。。
2009-7-11 07:55
0
雪    币: 290
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢版主出了这一篇好文,学习一下
2009-7-11 11:43
0
雪    币: 136
活跃值: (1475)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
13
好帖子,谢谢楼主分享,有几个问题,希望楼主能回答,首先我用ESP定律一直没有能够脱壳,通用脱壳机也不行,再就是IDA载入后,是如何发现VM_RETN部分的(既是如何定位VM_RETN的地址的)?这个希望壳狼大虾能给点提示,谢谢楼主
2010-6-4 18:56
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
14
还未接触过,经验很重要
2010-6-4 22:28
0
雪    币: 281
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
H大的杰作  学写了
2017-5-31 15:55
0
游客
登录 | 注册 方可回帖
返回
//