首页
社区
课程
招聘
[原创]一个虚拟机分析插件(有码)
2012-5-28 17:26 17957

[原创]一个虚拟机分析插件(有码)

2012-5-28 17:26
17957
最近玩大菠萝3没有时间折腾了,我那可怜的野蛮人都快成躺尸王了。

剩下的留给有兴趣的朋友玩玩吧,如有BUG请在贴中留言,Handler的分析正确率约95%。
分析的原理是基于动态+静态分析,用的反汇编引擎是BeaEngine,目前Handler我只能做到特征码识别,编程水平太烂没办法,程序中还有大量的BUG还没有修改。
类结构:Stack->Enginc->VMPAnalysis
另外Enginc中的标志位处理不完美,希望有人能指点一下。
X86虚拟机偷偷参考了The Enigma Protector的虚拟机,附上我去年分析的一个虚拟机The Enigma Protector虚拟机分析:http://www.unpack.cn/thread-67157-1-1.html
The Enigma Protector.part1.rar
The Enigma Protector.part2.rar
由于框架不完整,我想这个也算不上虚拟机最多是个x86解释器。
最近在搞漏洞分析求各种带。


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

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (28)
雪    币: 579
活跃值: (168)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
金罡 1 2012-5-28 17:27
2
0
沙发必须自己的。
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 2012-5-28 17:37
3
0
哦,看看效果咯,顶
雪    币: 414
活跃值: (10)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
qifeon 11 2012-5-28 17:49
4
0
不错,学习大力金刚。
雪    币: 177
活跃值: (471)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cooolie 2012-5-28 18:06
5
0
support!
耐心真好~
雪    币: 6
活跃值: (980)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lookzo 2012-5-28 18:16
6
0
关键是有码,呵呵
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
loongzyd 10 2012-5-28 19:07
7
0
好东西,楼主好人!
雪    币: 49
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ndayo 2012-5-28 20:02
8
0
很好的 东西
雪    币: 27
活跃值: (84)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
tihty 2 2012-5-28 22:22
9
0
好物品啊,先好好学习而后来向楼主讨教。

顺便问下,大菠萝3是何物?
雪    币: 6590
活跃值: (3020)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
asd 2012-5-28 22:31
10
0
好人一生平安
单刷就别晚野蛮人啊
雪    币: 695
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tokiii 2012-5-28 22:32
11
0
牛啊 下来看看
雪    币: 579
活跃值: (168)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
金罡 1 2012-5-28 23:31
12
0
果断换职业玩,挂得不行了。
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2012-5-29 00:54
13
0
太雷人了。。。
雪    币: 27
活跃值: (84)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
tihty 2 2012-5-29 10:46
14
0
原来是“Diablo”的中文谐音
雪    币: 147
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
迷茫之中 2012-5-29 10:56
15
0
下载学习。感谢lz。。  编译成功。。 很棒
雪    币: 579
活跃值: (168)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
金罡 1 2012-5-29 11:00
16
0
看来你不怎么关注游戏啊。
目前换装备了,挂得少了。
雪    币: 576
活跃值: (1148)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
hkfans 3 2012-5-29 14:09
17
0
顶~~~感谢分享!
雪    币: 576
活跃值: (1148)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
hkfans 3 2012-5-29 14:50
18
0
你在分析入口代码的时候,是直接以下面这个作为判断条件的。。这样的错误率会不会很高?

//目标操作数判断,        MOV [ESP+Imm],REG/IMM

因为VMP的堆栈变形是

push eax

==>

pushad
mov dword ptr [esp+4], ecx       ==> 这条是垃圾代码
mov  dword ptr [esp+1C], eax   ==> 这条是真正有用的入栈代码

这样你的程序就出错了。呵呵。。

总体来说。。学到了一个虚拟解释执行x86代码的方法了。。thanks...

=================================================

if (m_VMP.bVMP_AnalysisVMP_Entry)//分析虚拟机入口
        {
                switch(m_VMP.EntryInfo.EntryProcess)
                {
                case  VMP_SaveReg:
                        if(!strcmp(pDisasm->Instruction.Mnemonic, "mov"))       
                        {
                                if((pDisasm->Argument1.ArgSize == 32) &&        //目标操作数判断,        MOV [ESP+Imm],REG/IMM
                                        (pDisasm->Argument1.ArgType & MEMORY_TYPE) &&
                                        pDisasm->Argument1.Memory.BaseRegister & REG4)                       
                                {
                                        if(pDisasm->Argument2.ArgType & (GENERAL_REG | REGISTER_TYPE))        //源操作数是否寄存器类型,    MOV [ESP+Imm],REG
                                        {
                                                                               
                                                //>>>>>>>>>>>>>>>>>>>>>>>>>>>>保存寄存器环境信息<<<<<<<<<<<<<<<<<<<<<<<<<
                                                switch(pDisasm->Argument2.ArgType & 0xffff)
                                                {                                               
                                                case REG0:
                                                        m_VMP.EntryInfo.dwStackInfo[dwStackIndex] = REG0;
                                                        Insertname(BuffToImageAddress(pDisasm->VirtualAddr), NM_COMMENT, "Save EAX");
                                                        Addtolist(pDisasm->VirtualAddr, 1, "Save EAX");
                                                        break;
雪    币: 579
活跃值: (168)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
金罡 1 2012-5-29 15:12
19
0
[QUOTE=hkfans;1076078]你在分析入口代码的时候,是直接以下面这个作为判断条件的。。这样的错误率会不会很高?

//目标操作数判断,        MOV [ESP+Imm],REG/IMM

因为VMP的堆栈变形是

push eax

==>

pushad
mov dword ptr [es...[/QUOTE]

恩,测试的程序比较少,难免很多遗漏不足的地方。
我想可以以最后保存寄存器代码为有效寄存器。
雪    币: 347
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
YwdxY 2012-5-30 09:44
20
0
有码,非常感谢分享~
雪    币: 4
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
踏歌长行 2012-5-30 10:05
21
0
亚服 CIKI#1857
雪    币: 107
活跃值: (311)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 2012-5-30 10:20
22
0
[QUOTE=hkfans;1076078]你在分析入口代码的时候,是直接以下面这个作为判断条件的。。这样的错误率会不会很高?

还是自己想一个解释执行的机制比较高效..嘿嘿
雪    币: 1023
活跃值: (225)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
yuansunxue 6 2012-5-30 15:24
23
0
学习了 喜欢有码的
雪    币: 4902
活跃值: (90)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
奘和 2012-5-31 00:18
24
0
谢谢分享哈……
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
liuyq 2012-5-31 07:07
25
0
不对啊,大波萝出来不久(98年)我们就这么喊了,怎么到现在还不知道呢?
游客
登录 | 注册 方可回帖
返回