首页
社区
课程
招聘
[原创]VMP 之反 VM (还原代码) 之初初...
发表于: 2009-3-9 10:41 29705

[原创]VMP 之反 VM (还原代码) 之初初...

2009-3-9 10:41
29705

原先是在这版某讨论帖写的. 之前这版块管制.


稍稍整理独立出来. 己看过的就飘过吧.



讲一下 VMP, 及还原代码的可行性.



VMP其实不复杂, 反而是他的太单纯导致复杂化


万用闸有二种, 一种叫 NOR Gate, 一种叫 NAND Gate.


即称万用, 就表示单靠他自己, 就能变换出 OR ' NOT ' AND ' XOR



VMP在VM内的运算选择了 NOR Gate 去实现 NOT'AND'OR'XOR


(实现图我列在最后)



致于加法, VMP内部自有这种指令(直接用 intel ADD 指令)


add(w,w) EFL,Result


add(d,d) ELF,Result


addb(wb,wb)  ELF,Result



VMP内部也有 shl(d,w) EFL,Result 及 FS:[d0]:= d1


等等一些较为有目的性的指令.


所以还原成可视(或称类asm)个人认为并没想像中的难.



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



VM 的条件跳转



条件跳转跟我们平常的观念不太一样.


这是 jmp : #delta=0


          vm.jmp(d+#delta)  ;ESI=[EBP]+[EBP+4]



上面的#delta的值将决定所谓的跳或不跳.


通常 d=Target, #delta=0 为跳   jmp(d+#d)


若 #delta=-d 则 ESI 的值不会变, 也就是不跳(继续执行)的意思了.



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



为何说没想像中的那么难呢?


下列是很常见的一连3个VM指令



原 VM.ESP:    *** 注: VM.ESP 是由 EBP 所表示 ***


   12FFB0  00000286


   12FFB4  0012FFB8



1.经过 VM.push_esp , 变成:



   12FFAC  0012FFB0


   12FFB0  00000286


   12FFB4  0012FFB8



2.再经过 VM.pushd([d]) , 变成:


   12FFAC  00000286  <- 复制一份了


   12FFB0  00000286


   12FFB4  0012FFB8



3.再经过 VM.nor(d,d) EFL,Result  变成:    注: nor is NOR 闸


   12FFAC  00000282 <- ELF


   12FFB0  FFFFFD79 <- Result


   12FFB4  0012FFB8



这3个步骤其实就是 NOT 0286h = FFFFFD79





紧接着上列3个步骤后, 常见下列的动作:


4. VM.pop  丢掉ELF, 变成:


   12FFB0  FFFFFD79 <- Result


   12FFB4  0012FFB8



5. pushd(decode(followWord)) <- 从opcode处取2 byte当数据, 符号扩展PUSHD


   12FFAC  FFFFF7EA <- 数据 (亦即 0815的not)


   12FFB0  FFFFFD79 <- Result


   12FFB4  0012FFB8



6. VM.nor(d,d) EFL,Result  变成:


   12FFAC  00000202 <- ELF


   12FFB0  00000004 <- Result


   12FFB4  0012FFB8


7. VM.pop  丢掉ELF, 变成:


   12FFB0  00000004 <- Result


   12FFB4  0012FFB8



1~7 其实实现的就是 00000286 & 00000815 = 00000004


(00000815被以NOT的型式硬编在OPCode)





所以 VMP 的 VM 是很正规的.



一个简单的80x86指令 :  and reg, 00000815h


被分解成 (假设reg的值已入Stack)



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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (28)
雪    币: 107
活跃值: (424)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
太强大了吧!!!!!!!
2009-3-9 11:34
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
3
基本功不到位,彻底晕了~~~
2009-3-9 12:12
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
谢谢

加密玩来玩去,结果还是没逃出<数字逻辑>一小本书
2009-3-9 12:26
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
5
顶一下vmp的好文。
2009-3-9 13:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
强悍 支持 消化中
2009-3-15 12:26
0
雪    币: 59
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
呵让我想起了可爱的数字逻辑啊,就是与非门和或非门实现所有与或非运算啊,有意思!
2009-3-15 22:16
0
雪    币: 224
活跃值: (15)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
实现ASM--〉到VMP指令的加解密编译器才是正道,与或操作用来加密机密算法还有用。加密系统调用就没意义了。你这属于指令多态。
2009-3-16 21:56
0
雪    币: 187
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
虽然看不太明白,但甚至楼主已经把VM加密流程完全掌握了。高手!敬佩!
2009-3-17 11:58
0
雪    币: 11
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
总算看明白了

是不是该在VMP其实不复杂, 反而是他的太单纯导致复杂化加一句

VM提供的指令少,所以支持的指令大多需要转换
2009-3-18 12:43
0
雪    币: 181
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
强悍 支持 消化中
2009-3-31 22:19
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
12
再看一遍!!
2009-4-1 14:03
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
13
我是学物理的,学过数字电路,因此我反而只能看懂后面的那张图,即以与非门为基础实现所有的门电路。
2009-4-1 21:39
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
很不错,分析的很好。
2009-4-1 22:05
0
雪    币: 160
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
强啊。数字电路的知识啊。没想到那东西也用到了vmp,看来我计算机白学了。
2009-4-3 08:28
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
太强了,一点都没有东
2009-7-22 11:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
某楼的轩辕剑我一直在玩。
2009-7-23 23:47
0
雪    币: 97
活跃值: (30)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
18
太强了,顶一个
2009-8-3 14:33
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
看不懂,支持先~
2009-8-3 15:03
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
20
只能膜拜,不敢分析
2009-8-3 22:27
0
雪    币: 318
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
电路图看的懂,但是代码就看不懂了
2009-9-6 19:52
0
雪    币: 445
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
太牛XXXXXXXX了~
顶一个
2009-9-15 10:57
0
雪    币: 138
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
强大,膜拜,主要是学习啊
2009-9-15 12:55
0
雪    币: 339
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
起码看了十次了,还没搞懂。。。
2009-10-17 13:07
0
雪    币: 226
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
好亲切的电路图
可惜了
我的数字电路……
2009-10-17 23:29
0
游客
登录 | 注册 方可回帖
返回