您的位置:首页 > 编程语言 > VB

VB程序的脱壳技巧

2016-06-06 17:49 337 查看
自己来解决吧,也许能搞出个自创的方法,叫什么Monster脱壳法。

在这里大家必须了解一引些小知识。

VB程序的启动方式:每个VB程序通常都会调用到许多的API,但是其中有一个API是雷

打不动的,这就是我们都知道的ThunRTMain函数。VB程序在运行时,都会首先调用

ThunRTMain函数,ThunRTMain函数将会为程序初始化进程,并获取进程ID等做一些

初始工作。

栈帧:每个任务(进程)都有一个栈,而在这个进程中的每个函数被调用时会分别从

这个栈中分出一段区域并占用它,这段区域我们称它为栈帧

函数调用:每一个函数独占自己的栈帧空间,当前正在运行的函数的栈帧总是在系统

栈的顶端,在程序运行时当遇到一个call指令,程序会自动跳到这个call指定所指的

的地址去执行指令,这时call所指向的地址处的指令的开头一般是这样的:

push ebp ; 保存调用前的栈桢基址到堆栈

mov ebp, esp ; 把当前堆栈栈顶当做新栈桢基址

其实在做这个动作之前,call指令已经做了另一个动作,就是把call指令下面一条指

令的地址作为被调用函数的返回地址也一起压入了栈中,等到程序遇到retn指令时,

首先从栈中弹出返回地址,并跳到返回地址处执行指令。

现在,我们首先打开VB,做出一个简单的测试程序

接着我们再运行OD,把刚做出来的测试程序载入到OD中,这时我们就可以看到程序停

在了这里

大家看这里的代码:

00401128 > $ 68 9C124000 push 0040129C

0040112D . E8 F0FFFFFF call <jmp.&MSVBVM60.#100>

00401132 . 0000 add byte ptr [eax], al

对于一般来说,如果是用VB做的程序,那么它的的入口点基本都是这样的,我们再来

看看第二句的call,这里的call调用了一个函数<jmp.&MSVBVM60.#100>,但是这到

底是个什么样的函数呢?我们在OD中按Ctrl+N打开程序的输入表看看

第一行就是这个MSVBVM60.#100函数,我们选中这一行后按回车,然后代码就来到了

这里

嘿嘿,原来#100就是ThunRTMain函数啊。

我们来用OD跟踪一下程序,因为第二句就是一个call,所以我们要使用F7跟进这个

call,这时,我们只需要F7一下就好,现在,我们来注意一下OD堆栈窗口中的数据

堆栈窗口中的第一句就是“0012FFBC 00401132 返回到无壳.00401132来自

<jmp.&MSVBVM60.#100>”,这是的00401132是什么呢?从上面的图2中,我可以发现

,这就是ThunRTMain函数的返回地址,但是00401128才是我们程序的入口点,从

ThunRTMain函数的返回地址和程序入口点的关系,我们可以得出这样一个公式:

程序入口点=ThunRTMain函数的返回地址-AH(AH就是十进制的10)

根据上面所得出的结论,我们现在可以进行脱壳了。

实战篇

现在我们给程序加个ASPack的外壳

把加了壳后的新文件载入OD,接着在OD的命令行窗口中输入BP ThunRTMain,回车,

给ThunRTMain函数下个断点

接着再按F9让程序在OD中运行起来,OD就会被断在

这时就要发挥我们明锐的洞察能力了,嘿嘿,现在我们再来看一下OD右下角的堆栈窗

口中的内容

我们看第一行,0012FFBC这里的数据,是00401132,后面的说明是“返回到加

壳.00401132来自加壳.00401122”,这里告诉我们的地址00401132就应该是

ThunRTMain函数的返回地址了,现在我们再回过头来看看上面的图2,00401132的确

就是ThunRTMain函数的返回地址,我们现在想对程序进行脱壳,就需要知道程序的入

口点,根据我们上面得出的那个公式我们来计算一下:

程序OEP=00401132-AH

00401132-AH=00401128

最后我们得出的程序的入口点就是00401128,现在我们知道了程序的入口点,我们只

要把他DUMP出来就可以了,但是因为现在我们的OD正处于msvbvm60的领空,现在我们

DUMP是不合适的,我们必须先返回到程序的领空,我们在OD中按Alt+F9就可以完成这

一步骤,等OD返回程序的领空后,我们在OD的反汇编窗口中点击鼠标右键选择“Dump 

debugger process”

接着在弹出的窗口中把Modify这一框中的内容改为程序的入口点地址

现在我们只要把程序从内在中给DUMP出来就可以了,用PEID 来检测一下我们DUMP 后

的文件

运行一下,脱壳成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: