首页
社区
课程
招聘
[原创]一个简单的加vmp1.63的crackme正向追踪
发表于: 2008-8-3 01:15 16190

[原创]一个简单的加vmp1.63的crackme正向追踪

2008-8-3 01:15
16190

今天儿子较乖,让我能静下心来多打会电脑。
    早就想试下heXer的key了,没找到vmp1.64,只好装了个1.63,竟然也注册成功,感受了key的强大。
    之前跟过一个海风提供的用vmp1.60的notepad,变形很多,vmopcodetable也加密了,虽然rokyxue给出了简化方法,不过还是不敢跟进去,怕浪费太多的时间和精力。手工怎能和机器对抗?

目的:希望能正向分析一个自己设计的加了vmp的代码,在vmp中寻找原始代码的痕迹。
      根据rokyxue分析,vmp1.63虽然加了很多变形,但与vmp1.2x虚拟机主体相同。确认在vmp引擎中仍保留的是vmp1.2x的opcode结构,同时esi为opcode指针。ecx为opcode解密后的地址。

过程:
    写了个最简单的明码比较的crackme,在注册按钮事件里加了vmp的marker。

#define  VMBEGIN 
 __asm    
    {  
      _emit 0xEB
      _emit 0x10  
      _emit 0x56  
      _emit 0x4D  
      _emit 0x50 
      _emit 0x72 
      _emit 0x6F 
      _emit 0x74 
      _emit 0x65 
      _emit 0x63 
      _emit 0x74 
      _emit 0x20 
      _emit 0x62 
      _emit 0x65 
      _emit 0x67 
      _emit 0x69 
      _emit 0x6E 
      _emit 0x00
    }
	namelen=GetDlgItemText(IDC_NAME,&name[0],15);
	regcodelen=GetDlgItemText(IDC_REGCODE,&regcode[0],4095);

	if (namelen==0||namelen>15||regcodelen!=16)
		return;
	
	strupr(&regcode[0]);//
	for(tmpi=0;tmpi<regcodelen;tmpi++)
	{
		if (regcode[tmpi]>0x39||regcode[tmpi]<0x30)
			if(regcode[tmpi]>'F'||regcode[tmpi]<'A')
				return;
	}
	if(!strcmp(&name[0],"wangdell")&&!strcmp(&regcode[0],"FEDCBA9876543210"))
		MessageBox("OK!",0,MB_OK);
	else
		MessageBox("FAILED!",0,MB_OK);
#define  VMEND
    __asm 
    {  
      _emit 0xEB
      _emit 0x0E  
      _emit 0x56   
      _emit 0x4D   
      _emit 0x50 
      _emit 0x72 
      _emit 0x6F 
      _emit 0x74 
      _emit 0x65 
      _emit 0x63 
      _emit 0x74 
      _emit 0x20 
      _emit 0x65 
      _emit 0x6E 
      _emit 0x64 
      _emit 0x00
    }
0042DD96    8B0C85 A6F64200 mov     ecx, dword ptr [eax*4+42F6A6]    ; getcodeaddr
0042F35E    C2 5400         retn    54                               ; vm_excute
/*
Script written by wangdell
record opcode
20080802
//0x42e30b
*/
//test for vmprotect 1.63 release

var tmp1            
var tmp2            
var tmp3            
var tmp4            
var tmp5            
var tmp6            
var tmp7            
var tmp8            
var tmp9
var tmp10            
var imgbase

var bpVMenginejmp
var count


cmp $VERSION, "1.47"		//比较版本是否>1.47
jb odbgver
dbh				//hide od
BPHWCALL  //clear hardware breakpoint
BC				//clear software breakpoint
BPMC			//clear Memory breakpoint

mov count,0

ask_jmp:
ask "Enter EIP of VM_execute"
mov bpVMenginejmp,$RESULT
cmp bpVMenginejmp,0
je  ask_jmp
bp  $RESULT

log "VM Trace start!"
run_to_bp:
EOB  bp_record
ESTO           	//step to bp(vm_execute)

bp_record:
log ecx
jmp run_to_bp

odbgver:
msg "本脚本须配合 ODbgscript 1.47 或以上的版本"
jmp end

end:
ret 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
2
不错,不过这样的分析方法已经落后了
2008-8-3 01:29
0
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
期待bughoho的高级方法
2008-8-3 03:48
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
4
在没有搞到fg的工具之前,笨人只好用笨方法,自娱自乐。
落后的方法无需加精了吧,免的误导大家。
2008-8-3 08:58
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
5
或许落后的才是我等需要的。。。
2008-8-3 10:11
0
雪    币: 14
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
奇怪的是key我怎么用不了,老是提示:不是正确的注册表文件格式……
2008-8-3 10:38
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
7
楼上的Key是盗版的……
2008-8-3 11:05
0
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
8
key文件放入VMP所在目录就可以了。
2008-8-3 11:47
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
攻击一小段算法理论上任何VM都可以被逆向,但逆向一个工程,那就很棘手了。所以VM加密可以让商业破解价值水涨船高,是个好事。
2008-8-3 11:50
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
10
最大保护里面有随机校验,爆破了也不一定稳定
wangdell可以试试看这个附件呢
http://www.unpack.cn/viewthread.php?tid=27643&page=1#pid285106

加VMP1.63前的版本在这里,可以对比一下

http://bbs.pediy.com/showthread.php?t=58356
2008-8-3 14:26
0
雪    币: 97697
活跃值: (200834)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
support.
2008-8-3 14:38
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
12
呵呵 不做评价了
2008-8-5 02:30
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
都是牛人啊,看了VMP,我是知难而退了,哎,,,
2008-8-6 00:13
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
14
我爆了一个,好像还算稳定。
试一下,如果没问题,我再发个破文。
上传的附件:
2008-8-6 21:19
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
15
猛点check和确定,一般3-4次后程序会退出

如果看不清楚,那么用OD载入,去掉所有忽略异常的勾,猛点几次,就会出异常了
2008-8-6 21:30
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
16
被你言中。果然。偶尔也会几十次不会退出。看来没必要发破文了。
2008-8-6 21:36
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
17
关键里面有个随机校验
搞不定啊。。。
2008-8-6 21:43
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
18
估计只是vm引擎的代码校验吧?确实在调试时会有异常的情况,没碰到太多,就没在意。
现在我是patch在vmcode里面,估计patch在其外应该不会有问题吧,可恶的是关键代码段是动态生成的。
2008-8-6 21:52
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
收藏了 来留言 对lz的辛苦表示感谢
2008-9-23 14:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
虽然不懂...还是要顶
2008-9-26 13:27
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
21
这么好的文章不能被遗忘
2008-11-28 17:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
VMP实在是太难,看了几天头发掉了不少,但还是没搞出来.
2008-11-29 21:26
0
游客
登录 | 注册 方可回帖
返回
//