首页
社区
课程
招聘
[专题]虚拟机技术专题讨论
发表于: 2007-7-7 10:22 56032

[专题]虚拟机技术专题讨论

2007-7-7 10:22
56032
  [LEFT][LEFT][COLOR=green][FONT=新宋体]// [/FONT][/COLOR][COLOR=green][FONT=新宋体]进入虚拟机函数,我的最初版本是写死在成种VC环境下的,不过这样处理起来很麻烦。[/FONT][/COLOR][/LEFT]
[/LEFT]
  [LEFT][LEFT][COLOR=blue][FONT=新宋体]void[/FONT][/COLOR][FONT=新宋体] [COLOR=blue]_declspec[/COLOR]([COLOR=blue]naked[/COLOR]) [COLOR=#010001]VStartVM[/COLOR]()[/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]{[/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]     [COLOR=blue]_asm[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]     {[/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=green]// [/COLOR][/FONT][COLOR=green][FONT=新宋体]将寄存器压入堆栈,由伪指令取出存放到VMReg中[/FONT][/COLOR][/LEFT]
[/LEFT]
  [LEFT][LEFT][COLOR=green][FONT=新宋体]         //[/FONT][/COLOR][COLOR=green][FONT=新宋体]可以考虑为压栈时加入一些随机性[/FONT][/COLOR][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]push[/COLOR] [COLOR=#010001]eax[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]push[/COLOR] [COLOR=#010001]ebx[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]push[/COLOR] [COLOR=#010001]ecx[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]push[/COLOR] [COLOR=#010001]edx[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]push[/COLOR] [COLOR=#010001]esi[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]push[/COLOR] [COLOR=#010001]edi[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]push[/COLOR] [COLOR=#010001]ebp[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]pushfd[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]mov[/COLOR]      [COLOR=#010001]esi[/COLOR],[[COLOR=#010001]esp[/COLOR]+0x20][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]mov[/COLOR]     [COLOR=#010001]ebp[/COLOR],[COLOR=#010001]esp[/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]sub[/COLOR]      [COLOR=#010001]esp[/COLOR],0x200[/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]mov[/COLOR]     [COLOR=#010001]edi[/COLOR],[COLOR=#010001]esp [/COLOR][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]sub[/COLOR]      [COLOR=#010001]esp[/COLOR],0x40[/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][COLOR=green][FONT=新宋体]Next:[/FONT][/COLOR][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]movzx[/COLOR]    [COLOR=#010001]eax[/COLOR],[COLOR=#010001]byte[/COLOR] [COLOR=#010001]ptr[/COLOR] [[COLOR=#010001]esi[/COLOR]][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]lea[/COLOR]      [COLOR=#010001]esi[/COLOR],[[COLOR=#010001]esi[/COLOR]+1][/FONT][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=green]jmp   dword ptr [eax*4+JUMPADDR]          ;[/COLOR][/FONT][COLOR=green][FONT=新宋体]跳到Handler执行处,由加壳引擎填充[/FONT][/COLOR][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]         [COLOR=#010001]VM_END[/COLOR]                                    ;[COLOR=#010001]VM[/COLOR][/FONT][COLOR=#010001][FONT=新宋体]结束标记[/FONT][/COLOR][/LEFT]
[/LEFT]
  [LEFT][LEFT][FONT=新宋体]     }[/FONT][/LEFT]
[/LEFT]
  [FONT=新宋体]}[/FONT]
  

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

收藏
免费 7
支持
分享
最新回复 (50)
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
学习学习 加密的发展方向~
2007-7-7 10:50
0
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
怎么段的时间出了好几篇精华了啊.值得学习
2007-7-7 11:27
0
雪    币: 228
活跃值: (119)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
学习学习!好文章。
2007-7-7 11:49
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5
要写出自己的指令系统``有难度!
首先加壳程序先把已知的X86指令解释成了字节码,放在PE文件中,然后将原处代码删掉,

那为什么加了vm的壳程序体积会变大?
2007-7-7 12:10
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
6
因为VM的代码放在新节之中,存放了一些壳代码和数据,理所当然会大一点了.

在写出自己的指令系统应该不算是有难度,而是体力活.
2007-7-7 12:12
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
7
我觉得商业化的本地软件保护技术,会随着法律的健全和网络普及和带宽的提高最终消失。
最后变成少数人的玩具。
VM以牺牲性能为代价换取保护。有些时候是不可接受的。只有在一些特殊的领域才能应用。
2007-7-7 12:15
0
雪    币: 212
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
如果把VM技术看成是一种单向加密技术,就是说从OPCODE还原成原始代码比较困难,而计算机加密的过程相对简单的话,那么,如果能够拿到加密引擎,尝试对不同的X86指令进行OPCODE变换,得到一张X86指令与OPCODE的对应表,通过查表的方式还原X86指令。因为X86指令的有限性,虽然这张表会很大,但这时可以用程序加以比对,时间复杂度不会太大。不知道这种方法是否可行。

btw我是在胡说,期待板砖
2007-7-7 13:06
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
9
我觉得商业化的本地软件保护技术,会随着法律的健全和网络普及和带宽的提高最终消失。
最后变成少数人的玩具。
VM以牺牲性能为代价换取保护。有些时候是不可接受的。只有在一些特殊的领域才能应用。

法律 网络问题我想现在暂时还不用考虑吧...
VM在的确是牺牲性能来换取保护,导致应用面不是100%的适用.
如游戏等这些追求速度的程序.

如果把VM技术看成是一种单向加密技术,就是说从OPCODE还原成原始代码比较困难,而计算机加密的过程相对简单的话,那么,如果能够拿到加密引擎,尝试对不同的X86指令进行OPCODE变换,得到一张X86指令与OPCODE的对应表,通过查表的方式还原X86指令。因为X86指令的有限性,虽然这张表会很大,但这时可以用程序加以比对,时间复杂度不会太大。不知道这种方法是否可行。

这种方法对毫无防范的VM来说还可以,但是现有的VM基本不可取,因为OPCODE每次生成的OPCODE都是不同的,有的甚至加密、变形了。
2007-7-7 13:30
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
10
说起来vm还真是牺牲性能来换取保护!
2007-7-7 14:02
0
雪    币: 212
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
我被教育过了,不发表任何意见。没有完美的保护。
2007-7-7 14:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
向楼主学习啊~~~
2007-7-7 15:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
可不可以这样理解:虚拟技术就是针对每条最原始的机器码指令而用类似于暗号或者报文密码之类的“乱码"来替代.针对把机器玛变成"乱码"和把"乱码"还原成机器码而设计出加密器和解码器.汇编时就让加密器把机器码变成"乱码"然后在执行时再用解码器把"乱码"还原成机器码.可否正确?
2007-7-7 15:05
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
14
支持~你们讨论我来学习
2007-7-7 17:27
0
雪    币: 623
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
成长中的巨人
VM
LZ

想像一下,WINRAR 为保护关键的压缩代码而使用VM。
:-)
2007-7-8 23:59
0
雪    币: 397
活跃值: (377)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
16
从商业角度看,VM办法或许也值了,毕竟目的是出于被保护。
2007-7-10 09:08
0
雪    币: 311
活跃值: (124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
顶一个,学习ing.
2007-7-11 02:06
0
雪    币: 342
活跃值: (323)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
18
除了VM还有另外一些在效率和复杂度更平衡的方法
2007-7-11 10:27
0
雪    币: 210
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
BUG兄啥时候给我来个专业训练吧,,嘿嘿
2007-7-13 17:18
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
你们研究好了 我直接拿来用了 = =
2007-7-14 13:38
0
雪    币: 6051
活跃值: (1441)
能力值: ( LV15,RANK:1473 )
在线值:
发帖
回帖
粉丝
21
一边提高保护的强度,另一边却是在提倡开源。。。

其实开源是最强的保护~
2007-7-19 14:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
由于其执行速度,应该不可能大规模运用。
但在注册算法部分使用后,会给逆向分析带来极大的困难
2007-7-21 10:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
貌似Java的工作原理
2007-7-21 20:36
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
向LZ学习
2007-7-22 19:54
0
雪    币: 228
活跃值: (119)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
请教楼主一个问题,<<编译原理实践>>这本书 中的 tiny c 和 tm 可以做为开发虚拟机的蓝本吗?
2007-7-25 09:08
0
游客
登录 | 注册 方可回帖
返回
//