[3.12]学习笔记

接触到VMP是一个偶然,但是既然遇到了,那么就慢慢学习他,毕竟,长城不是一
天码成的,逆向本来就是一个耗时的事情,写壳的人都研究了这么久,那么我们只有
一点一滴的领略他的精华。
************************
关于脱VMP的壳:
今天找到了一个秒杀所有壳找OEP的方法,感觉甚是神奇,虽然知道这个方法并不是
100%有用,但是不失作为去找到OEP的一个渠道。
************************
http://bbs.pediy.com/showthread.php?t=155215
这篇帖子讲了VMP的今生和过去,非常长,今天只看了一点点,略感困倦,没看完
的明天再看。
************************
今天的收获有:VMP的加密机制分为2部分,乱序膨胀,字节解释。

PUSH DWORD(key:关系到后面的跳转/立即数)
CALL xxxxxxxx

,key会变化,当VM遇到一些不能虚拟的代码,就会跳出虚拟机,再次进入的时候又
是相同的push DWORD,CALL xxxxxxx
总之,当VMP出了虚拟机,再次进入虚拟机的时候,第一句代码都是一个KEY打头,然后
是一个CALL指令,才是入口指针.

PUSH和CALL之后,跟着的就是一大串以JXX或者JMP或者是CALL或者是RET组成的
代码乱流.

我们看到的所有的都是代码乱流,是毫无逻辑的,至于JXX,JMP,CALL,RET,这4种指
令起的作用都是”衔接”.和逻辑无半毛钱关系.
(顺带提前说一句:VMP加密之后,所有原始的JXX,JMP,CALL,RET,都会被转为最终形
式VM层的VM_JMP,所以你看到的所有X86的这些指令,都是衔接用的,一个真实的含
义都没有).

原文地址:https://www.cnblogs.com/Rrouned/p/3597102.html