首页
社区
课程
招聘
[原创]一个加vmp1.63的程序的爆破
发表于: 2008-8-7 09:21 10615

[原创]一个加vmp1.63的程序的爆破

2008-8-7 09:21
10615
发个破文,否则白忙了。我的方法比较笨且不完美,高手飘过。
顺便膜拜下几位牛人 海风,fxyang,nisy, humourkyo。crackme为humourkyo所做,被nisy加了3层牛壳,后据称被海风,fxyang脱掉,并被海风爆破vmp。

加壳后/脱壳后地址:http://www.unpack.cn/viewthread.php?tid=27643&page=1#pid285106

原因:海风提示可以爆破,由于正在研究vmp1.63,于是尝试下vmp1.63的爆破。

过程:
中间有些弯路,就不记述了。已知是vmp1.63(不过有点奇怪,与我自己加的1.63最大保护的IAT加密有点不同)

1、寻找VM_engine
bp MessageBoxA后,中断在“注册失败”的错误对话框中,alt-F9返回。
单步跟踪,找第一个retn xx
0040CC35    C2 2C00         retn    2C                               ; vm_execute

此VM_engine有点奇特,竟然有两处vm_opcode的调用入口,我也是在找不到vm_retn时,比对esi,并多次跟踪时才发现的,这耽误了不少时间。
继续单步跟踪,找到另一处retn xx。
0040C09C    C2 2C00         retn    2C                               ; vm_execute1

分别增加标签vm_execute和vm_execute1

2、寻找VM_retn
重新运行,先中断在MessageBoxA处,alt-f9返回。
使用下面od脚本
dbh				//hide od
BPHWCALL  //clear hardware breakpoint
BC				//clear software breakpoint
BPMC			//clear Memory breakpoint

bp  40cc35//vm_execute
bp  40c09c//vm_execute1

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

bp_record:
log ecx
jmp run_to_bp
ret 

查看script log window,最后一条指令为VM_retn,增加该标签。
0040AE9F >  66:0FBCFA       bsf     di, dx                           ; vm_retn

单步跟踪到retn xx.
0040AF0D    C2 2C00         retn    2C                               ; retn

取消所有断点,在0040AF0D设置断点。
3、爆破尝试
shift-f9运行,观察堆栈[esp]中的数值,并记录(只需记录最后两次中断时的数值)
也可以用如下脚本记录
dbh				//hide od
BPHWCALL  //clear hardware breakpoint
BC				//clear software breakpoint
BPMC			//clear Memory breakpoint

bp  40AF0D//vm_retn=>retn 2c

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

bp_record:
log [esp]
jmp run_to_bp
ret 

在进入“注册失败”对话框前的[esp]处加标签为MessageBox,由于有api地址加密,此处为MessageBox地址解密处。
00432EC1 >  E8 FEDAFFFF     call    004309C4 ;MessageBox

在此之前的那个[esp]加标签VMM_test
0041AAEC >  68 6FCA8010     push    1080CA6F                         ; VMM_test


重新运行,shift-f9,观察堆栈[esp]中的数值,当[esp]==0041AAEC时,更改eax为1,继续运行,此时出现“注册成功”对话框。

为什么要修改此处eax,原因如下,猜测原有注册代码类似为:
call chkreg
test eax,eax
jz   error_messagebox
jnz  right_messagebox

我猜测MessageBoxA之前的那个虚拟机代码块为VM_test,所以修改它入口处的eax值(chkreg的返回值)

4、patch
按常规应在0041aaec处patch,但可恶的是,这部分是在vm中动态解码的,只好在retn处patch。
方法是,每次执行到retn,比较[esp]中数值是否为0041AAEC,如是,则更改eax为1即可。

海风提示,注意到由于有随机校验,在此处patch不稳定,偶尔会自动退出。还没找到可过校验的patch方法。
再次感谢海风,hexer等人,让我能近距离接触vmp1.63

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
慢慢摸索中。。。。。。。。。。。。。。学习

不知道聪明的方法是长得怎样的 ,如果程序设计的复杂点,那真的是恶梦
2008-8-7 09:40
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
楼主很强大 学习学习
2008-8-7 09:53
0
雪    币: 1946
活跃值: (243)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
wangdell太强了
2008-8-7 10:04
0
雪    币: 1432
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
太强大了VM_retn真不好找挖~
2008-8-7 15:57
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
6
vm_retn真的不好找。。。。
没原版我搞不定
2008-8-7 17:32
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
都是牛人
2008-8-7 18:05
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
8
vm_retn是所有vm的opcode的最后一条指令。也就是esi指向的最后一个字节解码后跳转到的那个opcode。
通过vm_push_CT和vm_pop_CT也可迅速定位vm_retn。
进入每条opcode具体分析当然也可以,但都是变形和垃圾代码,跳来跳去的不好分析,还是根据位置定位快且简单些。
2008-8-8 00:05
0
雪    币: 134
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
随机退出可否下ExitProcess之类的断点,然后倒推找到检查处?
2008-8-8 08:51
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
10
过来膜拜一下  ^_^
2008-8-10 15:15
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
11
为了使VMP和外壳友好的相处 IAT处理上我没有设置 VMP的动态地址很强大 如果程序再增加一些暗桩 用KEY来解密一些功能的使用 这样防爆破的效果可能效果更好一些 会强迫来分析算法 o(∩_∩)o...

这个处理后的CM是中午放出来的 没坚持到晚饭就被KO了  再次膜拜一海风,fxyang,wangdell 等高人

PS: 导致程序不稳定是 由于效检呢 还是Patch的代码 在虚拟机引擎执行结果导致的呢 如果用VMP虚拟机引擎的指令来修改JE 或者 JNE  结果将会如何 不懂VMP 很黄很暴力 ~~
2008-8-10 15:34
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
12
vmp对我来说就是噩梦
大牛有牛方法
希望谁设计出牛工具来
2008-8-10 15:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习
2008-8-10 20:27
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
14
如果原代码里稍加一点防爆处理,我就投降了,要不是海风说可爆破,我就直接放弃了。
2008-8-10 22:18
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
1 膜拜 wangdell,您真是太高了。

2 用VMP保护的软件的自校验代码是真的很难爆破吗?
2008-8-11 18:03
0
游客
登录 | 注册 方可回帖
返回
//