首页
社区
课程
招聘
[原创]一个vm的手工分析及爆破
发表于: 2013-8-27 12:40 16160

[原创]一个vm的手工分析及爆破

2013-8-27 12:40
16160

这个cm 是前天晚上八两兄发给我的, 外壳检测是vmp, 但是 text段的虚拟机
试了几次都没有用插件找到 ,插件不能用,于是就当做一般的虚拟机来分析了
,首先跟踪一下代码



以下是跟踪记录的一小部分,可以参考附件中的trace.asm:

        -------------

        044B351                ...
        044B35B                retn    0x38        ;这里是dispatcher 的出口
        044917D                ...
        0449188                jmp     00449BD0
        0449BD0                ...
        0449BD8                jmp     0044B8AB
        044B8AB                ...
        044B8AC                jpe     00449DF7
        0449DF7                ...
        0449E08                jmp     0044A752
        044A752                ...                                        ;dispatcher 的入口
        044A764                jns     0044A122
        044A122                ...
        044A167                jmp     00449139
        0449139                ...
        044917A                retn    0x54                ;这里也是出口
        0449C2D                ...
        0449C56                call    0044B214
        044B214                ...
        044B229                jmp     0044A752
        044A752                ...                                        ;dispatcher 的入口
        044A764                jns     0044A122

        -------------

虚拟机的运行 就是一个由dispatcher 到 handler 的循环 ,
入口和出口都是不断重复的,所以不难分析出来
变形的代码出口无所谓几种 , 一种是 retn xxx , 另一种是 call eax

写一个脚本再跟踪一下它的vm

        -------------

        mov vmEntry,0044A755
        mov dispatcher,0044AC99
        mov dispatcher2,0044917A

        bc
        bp vmEntry
        bp dispatcher
        bp dispatcher2

        mov file,"c:\\out.txt"
        wrt file,"--------"

        var vip
        loop:
                run
                ifeq eip,vmEntry
                        mov vip,esi
                else
                        mov top,[ebp]
                        sub top,4
                        ifeq top,ebp
                                wrta file, "maybe vPushEsp up"
                        endif
                endif
                ifeq eip,dispatcher
                        eval "{vip}--{ecx}"
                        wrta file,$RESULT
                endif
                ifeq eip,dispatcher2
                        eval "{vip}--{ecx}"
                        wrta file,$RESULT
                endif
               
                jmp loop
               
        -------------

结果很长 , 就帖一部分吧,参考附件中的 out.txt

        -------------
        4B41EE--44917D
        4B41EF--449C2D
        4B41F0--449E60
        4B41F1--449E60
        4B41F2--449014        ;vjmp

        4A3AD0--449C2D
        4A3AD1--44BE95
        4A3AD6--44917D
        4A3AD7--449C2

        -------------

中间用空行分开了,很明显这是一个 vjmp,至此程序注册的流程也出来了

        -------------
        4E1168--4E1D66
        495BFB--495CD2
        4B3FCD--4B41F2
        4A3AD0--4A3ED7
        -------------

由于没有分析 handler , 不好分析vm代码, 但是基于栈的虚拟机
,要实现结点的计算,有一个 handler 是肯定要用的,  大家猜一下 ^_*

后面的分析就不用细讲了,无所谓试验几个结点 ,没啥含量
不能补丁虚拟码了, 这次使用另一种补丁的方法:

        -------------
        <00449014>

                call    004EB900
                nop
                nop

        <004EB900>

                pushfd
                cmp     esi, 0x4B41F3
                jnz     short @func
                mov     dword ptr [ebp], 0x4D12B7

        @func:
                popfd
                mov     esi, dword ptr [ebp]
                retn
       
        -------------
试验一下:


爆破程序主要代码如下,参考loader.exe:

        -------------

        void test2(){

                 BYTE patch1[0x0007] =        { 0xe8, 0xe7, 0x28, 0x0a, 0x00, 0x90, 0x90 };
                 BYTE patch2[0x0015] = { 0x9c, 0x81, 0xfe, 0xf3, 0x41, 0x4b, 0x00, 0x75, 0x07, 0xc7, 0x45, 0x00, 0xb7, 0x12, 0x4d, 0x00, 0x9d, 0x8b, 0x75, 0x00, 0xc3 };

                Loader l = Loader("209 CRECKME 0.vmp.exe");
                l.run();
                l.tilWindow("CRECKME STEP0");
                l.patch(0x00449014,(LPVOID)patch1,0x7);
                l.patch(0x004EB900,(LPVOID)patch2,0X15);

                return;

        }

        -------------
写在最后:
前几天天气太执, 有点小郁闷 , 实在没啥心情研究技术 , 本来不想写vm的东西了
,和八两聊天的时候 ,提到有另一种不需要补丁虚拟码的方法 (毕竟依赖插件不好) ,这个就算是补充吧

附件下载:   某vm的破解.7z

下午还要写c# , 帖子写得比较粗,  见谅


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (25)
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
楼主有不有分析VM2.0包括以上的分析啊?VM2.1之类的表示连VM入口和出口都找不到
2013-8-27 12:45
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
我手上的是 lcg的 2.09 , 2.1还没玩过 ,
2013-8-27 12:54
0
雪    币: 135
活跃值: (63)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
收藏学习。
2013-8-27 12:57
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
5
不错,顶一个~
2013-8-27 13:03
0
雪    币: 219
活跃值: (778)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
6
有是一个VM的高手啊
2013-8-27 13:04
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
占个座,来围观一下
2013-8-27 13:31
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
VM都可以玩的这么好
2013-8-27 14:05
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
惶恐啊,看雪会员之间已经通过QQ构成了一个图结构了,每个人只知道自己连通了那些节点,却不知道自己连通的节点又联通了谁,以后在QQ聊天可要注意啦
2013-8-27 14:19
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
好久没碰过 vm 了

name:   lgjxj
code :   5687255
上传的附件:
2013-8-27 16:06
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
厉害~~~
2013-8-27 16:07
0
雪    币: 3277
活跃值: (1992)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大牛在民间啊。
2013-8-27 16:08
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
我只是随手输入竟然对了
2013-8-27 16:12
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
14
请问下期双色球号码。谢谢
2013-8-27 17:10
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
欢迎yingyue牛给讲讲vmp的分析
2013-8-27 18:59
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
16
2.09分析吗??
能否给个LINK 或者MAIL 1326761044@qq.com
对VM比较感兴趣,谢谢鸟。。
2013-8-27 19:32
0
雪    币: 1906
活跃值: (712)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
多谢分享,好文,支持,呵呵
2013-8-28 10:02
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
18
前面那篇精就是 用2.09 分析的 , 有兴趣可以加Q 讨论 ,不限 vm
2013-8-28 10:09
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
先mark了,谢谢楼主
2013-8-28 17:49
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
很赞同不依靠插件的思想,不过如果不是crakeme而是真正的软件没插件怎么分析
2013-8-28 21:15
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
不错  收藏了 ‘
2013-8-29 01:23
0
雪    币: 48
活跃值: (496)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
22
不错,学习学习。。。
2013-8-29 09:39
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
叉, 来膜拜大神
2013-8-29 11:06
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
表示没看懂
2013-8-30 07:51
0
雪    币: 36
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
学习;了
2013-8-30 22:21
0
游客
登录 | 注册 方可回帖
返回
//