VMProtect完美脱壳过程

VMProtect完美脱壳过程

1.查看程序

这是我自己写的一个VB的小程序,长得有点丑,别介意。然后自己加了一个壳,是VMProtect v.1.6x - 2.03的壳。

接下来我们国际惯例,用PEID,EXEinfo PE查一下壳

可以看到是加了VMP的壳的,VMP壳的介绍我会放在帖子的最后哦。

2.拉到OD去啦~

push 0xE131EEA3 这其实就是被VM过的OEP,你问我啥是Push?push 就是把什么什么东西压入栈中,你懂吧?就那个右下角的框框!

(注:为了帖子的精华呢我们举个栗子,VC++6.0编译的程序 大家都知道它的OEP开头是push ebp,那大家知道这个push ebp是什么意思吗?push ebp的意思是把ebp压入栈中,就相当于 int main() {} 程序的main函数哦!如果我讲的不够详细大家方可百度看看!)

接下来我们用到一个函数。

3.Ctrl+G搜索VirtualProtectEx(虚拟地址处理)

来到这里之后呢,我们在这个7D85E1FF这里按下键盘上的F2。下一个断点,运行程序,看看程序的变化。

Alt+M 来到这里

我们可以看到有PE文件头,等等等之类的。

我们数一下这里有几个段。

到这个VMP1这里一共是有五个段,啥意思呢?意思是我们运行程序五次,记住,不要第六次哦,第六次就跑飞了,程序跑到虚拟地址里去了。

这是运行五次之后,堆栈的状态

这是运行第六次之后,堆栈的状态

程序已经跑到虚拟地址里面去了,那我们就跑第五次就可以啦

现在是一个很好的返回时机,我们在.text的代码段下一个内存访问断点。然后F9运行,这样我们就跑出了VMP段了。

来到这里之后呢,一直往下跟可以跟到OEP。

我们直接查看,点击M

然后右键.text在反汇编窗口中查看

然后右键分析代码

搜索FF 25

可以来到他的JMP头

往下面看都是有很多的JMP

那么我们就去它的尾巴看看

从模块中删除分析,然后呢,点击M。

ctrl+F搜索76 62 35

这是VB的程序,我们要找到这个,然后可以看到00401368 我们记住这个。

回到反汇编窗口,空格汇编,把我们之前的push 0xxxxxxx改成我们的push 0x401368

然后下面的这个CALL,它CALL的是上面的JMP,那我们也修改一下这个CALL。

修改完是这样的,然后接着我们需要修复转存。

记得不要忘了右键在此处从新的EIP哦

4.修复转存

我们需要打开Import REConstructor 这款工具呢就不做多的介绍了。

找到我们需要修复的进程

然后去OD看看dump的OEP是多少,

114C,复制下来,

点击自动搜索,获取导入表,然后啥的就不说了。

还有LordPE我们修正镜像大小,然后完整转存,这都是正常的修复,都懂。

然后把Import REConstructor 的修复储存到我们LordPE dump出来的软件上就可以啦,我们先点开软件看看吧。

一个是我们原版的,一个是脱壳后的,我们给脱壳后的进行查壳看看。

当当当,脱壳完成。

然后我们打开软件,看看是否可以运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值