能力值:
( LV7,RANK:100 )
|
-
-
2 楼
站着沙发!!!学习....
|
能力值:
( LV12,RANK:530 )
|
-
-
3 楼
板凳,沒看到靜態還原的代碼
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
强大,学习
|
能力值:
( LV9,RANK:250 )
|
-
-
5 楼
强大,学习PPT
|
能力值:
( LV13,RANK:970 )
|
-
-
6 楼
膜拜下,不懂~
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
正在学习VM,谢谢楼主的分享
|
能力值:
( LV9,RANK:610 )
|
-
-
8 楼
强帖留名~~
|
能力值:
( LV3,RANK:30 )
|
-
-
9 楼
强大,VMP和TMD/WL越来越流行了,人人都去搞
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
概括性比较强,但不适合新人学习
|
能力值:
( LV8,RANK:130 )
|
-
-
11 楼
占领第一页学习
|
能力值:
( LV17,RANK:1820 )
|
-
-
12 楼
膜拜楼主大牛啊!!!!
|
能力值:
( LV12,RANK:1010 )
|
-
-
13 楼
654321
|
能力值:
( LV3,RANK:20 )
|
-
-
14 楼
谢谢楼主分享,下载学习
|
能力值:
( LV3,RANK:30 )
|
-
-
15 楼
来看看爆了什么猛料。。。。。。。。。。。。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
早就有耳闻bughoho大牛能完全还原.....
强悍。。。学习学习。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
终于看到bughoho帅哥了~
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
Thx
NIUe
|
能力值:
(RANK:1130 )
|
-
-
19 楼
BUG hou yi hou
LMZ dou yi dou
|
能力值:
( LV6,RANK:90 )
|
-
-
20 楼
多谢楼主,看了一下,发现有些东西和我理解的不一样,拿出来讨论一下。
我不知道教程里的VMP是什么版本,我这里的是1.8
首先是我认为VMP里面的寄存器不是轮转,而是随机。
在一些状态下,追踪寄存器是很困难的。
我用一条MOV EAX,11111111指令来测试VMP,我观察到的数据如下
初始状态 EAX=0,出口时EAX=11111111
9 VMP_MOVIN_REG REG_28 (0x0)
VMP保存现场时把EAX放到了REG_28
因为REG_28保存着EAX,因此REG_28不能使用
229 VMP_AND_DWORD 0xFF1BDBF9 , 0x11111111 (0x11111111 eflags=0x00000206)
230 VMP_MOVIN_REG REG_30 (0x00000206)
231 VMP_MOVIN_REG REG_30 (0x11111111)
解密后EAX变成了REG_30,在VMP的编译阶段,原来的EAX已经丢弃了。
根据楼主的教程,就算已经识别了指令,那么现在的EAX是多少呢??
262 VMP_SHR_BYTE 0x44 , 0x44 (0x4 eflags=0x00000212)
263 VMP_MOVIN_REG REG_28 (0x00000212)
好了,到了263时,原来的EAX被用来做花了。
624 VMP_MOVOUT_REG REG_30 (0x11111111)
出口,恢复EAX
这里的REG_30和REG_28根本不存在映射的关系,我认为REG_30是完全随机的。
这是因为MOV指令很特别,这条指令更新了寄存器的状态,使其与以前的状态没有任何关系。
另外,18页那里写静态分析VMP_JMP,这里的跳转地址应该要事先追踪出来吧。跳过指令分析的话,这里好像也会出问题,据我观察,这条指令是VMP唯一一条跨虚拟机的指令,在多指令表的情况下,分析器也应该要切换指令表。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
同问。。。- -!``我也是分析到最后的实际操作eax的虚拟指令就傻了...
|
能力值:
( LV9,RANK:180 )
|
-
-
22 楼
我认为VM里没所谓相对的寄存器观念
只有等到最后要离开时的 pop 才决定了我们熟知的寄存器观念.
无寄存器观念就无所谓的轮不轮随不随了.
若硬要将2者牵条红线, 过于免强.
那里讲的是虚拟执行.
|
能力值:
( LV6,RANK:90 )
|
-
-
23 楼
虚拟机模拟的是真实的CPU,CPU的寄存器状态必定会出现在虚拟机的内存中,在一般的情况下,可以通过追踪CPU的寄存器来识别指令,不能识别寄存器的状态是很难区分真实的指令和垃圾指令的。
关于第二点,我知道是虚拟执行。在17页,楼主教程里说操作数的值不可靠,这应该是说这个并不是完全的虚拟执行。
就像 JMP ??????? 这样的指令,光知道是JMP并没有用,不知道跳转的地址就没有办法进行历遍。而且VMP的JMP指令在修改了esi后,有可能切换指令表和解密算法,这时如果没有自动的指令识别就会很麻烦。
|
能力值:
( LV3,RANK:30 )
|
-
-
24 楼
谢谢分享~~下来学习下
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
劲爆123456
|
|
|