当前位置:首页 > 逆向 > 正文内容

【旧文】VMProtect完美脱壳过程

UzJu4年前 (2022-04-16)逆向6278

VMProtect完美脱壳过程

1.查看程序

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

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

3a06b8599d18167f72229b893db24e4f.jpe

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

2.拉到OD去啦~

1dccc706c0749f137a788b3330cd34cd.jpe

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

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

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

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

0c9a15b5e249be799b16c202c544c2ed.jpe

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

Alt+M 来到这里

1c38ce6055a9ce65117faac08f6d7233.png

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

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

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

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

e91fe40174bca94dcec9cc0376ae4697.jpe

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

215335d9b37ec73194c273a6b3ae9c2c.jpe

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

43ad8d0e2065070e77e99f5eafa19472.png

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

9597ef74e6a064f255be38e30e59df01.jpe

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

我们直接查看,点击M

9c4e1705e4e3f647e4a44184ed0eae73.png

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

9475c3101f870f4dc5b607275eace7af.jpe

然后右键分析代码

cdfdadf502cb6f78e84acfcff0e6db42.jpe

搜索FF 25

d6e67ebf29e1c5aab68bfb16180498b5.png

可以来到他的JMP头

往下面看都是有很多的JMP

7db3e9bdff8c2880a7046f7cba9e5a28.png

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

0057cda6051ff8d31fe060c2a3a2bc22.png

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

ctrl+F搜索76 62 35

738a8c405f9777a049370ef18a1957ca.png

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

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

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

3dcd9c44e298b577fb6e116ab97cb3a0.png

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

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

4.修复转存

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

找到我们需要修复的进程

56825fbb8b7d872d75d5870f5e79a7e5.png

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

d79ed1b598a8c4dfdfb410b7f5fc9be0.png

114C,复制下来,

7824707aacc4672c97ea7e5d5816eede.png

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

c2de5db7799de086f35fbc5e732e5e80.png

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

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

720f442c003ce1580b4235b55741a3ae.png

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

ed6b793bcf11b035868bdb1170110e4a.png

当当当,脱壳完成。

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

b797ef85a5141fe898685b336e745f02.jpe

1.查看程序

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

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

3a06b8599d18167f72229b893db24e4f.jpe

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

2.拉到OD去啦~

1dccc706c0749f137a788b3330cd34cd.jpe

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

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

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

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

0c9a15b5e249be799b16c202c544c2ed.jpe

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

Alt+M 来到这里

1c38ce6055a9ce65117faac08f6d7233.png

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

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

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

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

e91fe40174bca94dcec9cc0376ae4697.jpe

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

215335d9b37ec73194c273a6b3ae9c2c.jpe

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

43ad8d0e2065070e77e99f5eafa19472.png

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

9597ef74e6a064f255be38e30e59df01.jpe

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

我们直接查看,点击M

9c4e1705e4e3f647e4a44184ed0eae73.png

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

9475c3101f870f4dc5b607275eace7af.jpe

然后右键分析代码

cdfdadf502cb6f78e84acfcff0e6db42.jpe

搜索FF 25

d6e67ebf29e1c5aab68bfb16180498b5.png

可以来到他的JMP头

往下面看都是有很多的JMP

7db3e9bdff8c2880a7046f7cba9e5a28.png

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

0057cda6051ff8d31fe060c2a3a2bc22.png

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

ctrl+F搜索76 62 35

738a8c405f9777a049370ef18a1957ca.png

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

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

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

3dcd9c44e298b577fb6e116ab97cb3a0.png

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

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

4.修复转存

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

找到我们需要修复的进程

56825fbb8b7d872d75d5870f5e79a7e5.png

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

d79ed1b598a8c4dfdfb410b7f5fc9be0.png

114C,复制下来,

7824707aacc4672c97ea7e5d5816eede.png

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

c2de5db7799de086f35fbc5e732e5e80.png

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

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

720f442c003ce1580b4235b55741a3ae.png

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

ed6b793bcf11b035868bdb1170110e4a.png

当当当,脱壳完成。

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

b797ef85a5141fe898685b336e745f02.jpe

扫描二维码推送至手机访问。

版权声明:本文由UzJu的安全屋发布,如需转载请注明出处。

SQL ERROR: ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'

本文链接:https://uzzju.com/post/25.html

分享给朋友:

相关文章

VMP3.X过虚拟机检测

VMP3.X过虚拟机检测

(前言:很多的小伙伴基本上信心满满的下载了一个辅助,拖入PEID查壳,看到.vmp1的字样就放弃了,因为VMP确实挺难的,更何况加上一个虚拟机的检测。) 正题! 我们先来看看虚拟机检测是什么样子的。 这是我在市场上随便抓来的一...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。