病毒分析-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。