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

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

2012-5-28 17:26
19240

最近玩大菠萝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解释器。
最近在搞漏洞分析求各种带。


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

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

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

//目标操作数判断,        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;
2012-5-29 14:50
0
雪    币: 1489
活跃值: (1063)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
19
[QUOTE=hkfans;1076078]你在分析入口代码的时候,是直接以下面这个作为判断条件的。。这样的错误率会不会很高?

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

因为VMP的堆栈变形是

push eax

==>

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

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

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