病毒分析-ollydbg脱壳的步骤和原理

病毒分析-ollydbg脱壳的步骤

一、OllyDbg脱壳的步骤

1.程序载入与初始化:

启动OllyDbg,将需要脱壳的可执行文件加载到调试器中。
OllyDbg会加载程序并停在程序的入口点(EP),但此时通常不是原始入口点(OEP)。

2.寻找OEP:

OEP是程序加壳前真正的入口点,找到OEP是脱壳的关键。
可以使用多种方法寻找OEP,如单步跟踪法、ESP定律、内存镜像法、一步到达OEP法、最后一次异常法等。
单步跟踪法通过逐步执行程序,观察程序执行过程中的变化,找到壳程序解压或解密原始代码的位置。
ESP定律利用程序中堆栈平衡的合理利用,通过观察寄存器出栈时的程序代码恢复情况,找到OEP。
内存镜像法在程序加载时,通过下内存断点,观察程序访问资源段和代码段的情况,找到OEP。
一步到达OEP法根据壳的特征,直接找到距离OEP最近的汇编指令,下断点捕获OEP。
最后一次异常法通过记录程序自解压或自解密过程中的异常次数,定位到最后一次异常位置,接近自动脱壳完成位置。

3.在OEP处下断点:

一旦找到OEP,需要在该位置下断点,以便在程序执行到该点时暂停执行。
这可以通过OllyDbg的断点设置功能实现。

4.Dump程序:

在OEP处下断点后,让程序继续执行,直到断点触发。
此时,程序已经解压或解密了原始代码,并停留在OEP处。
可以使用OllyDbg的Dump功能,将内存中的程序映像转存出来,得到脱壳后的程序。

5.修复IAT(导入地址表):

多数加壳软件在运行时会重建导入地址表,因此脱壳后需要修复IAT。
可以使用专门的工具(如Import REConstructor)来修复IAT,确保程序能够正确运行。

二、OllyDbg脱壳的原理

1.动态调试:

OllyDbg是一款动态调试工具,能够在程序运行时实时分析程序的执行过程。
通过动态调试,可以观察到程序在执行过程中的各种变化,包括寄存器值、内存地址、堆栈情况等。

2.内存访问分析:

在程序执行过程中,OllyDbg可以监视程序的内存访问情况。
通过分析程序访问内存的模式和地址,可以推断出壳程序的解压或解密算法,从而找到OEP。

3.异常处理:

程序在自解压或自解密过程中可能会触发异常。
OllyDbg可以记录并分析这些异常,通过定位最后一次异常的位置,接近自动脱壳完成的位置。

4.代码段分析:

加壳程序通常会将原始代码压缩或加密后存储在代码段中。
通过分析代码段的结构和内容,可以推断出壳程序的解压或解密算法,并找到OEP。

5.寄存器与堆栈分析:

在程序执行过程中,寄存器和堆栈的变化可以反映出程序的执行状态。
通过分析寄存器和堆栈的变化情况,可以推断出壳程序的解压或解密过程,并找到OEP。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值