恶意代码分析-第九章-OllyDbg

1.虽然单步跳过的概念很简单,但实际上很复杂。

010073a4 call 01007568

010073a9 xor ebx,ebx

首先OllyDbg在010073a9处设置一个断点,然后恢复执行,当子例程执行ret指令时,由于命中隐藏断点,会停在010073a9.

但在有些情况下,例如01007568处的子例程可能没有ret指令,或者可能是一个从栈中弹出地址来获得EIP的操作。在这种情况下,没有暂停效果。

2.内存断点,对于程序什么时候调用DLL有用。

3.跟踪

标准回溯跟踪

堆栈调用跟踪

 

运行跟踪

Add Selection:

Trace Into:单步执行并且记录命中断点前所有的运行指令

Trace over:仅记录当前正在运行函数的指令ift

4.异常处理

Shift + F7 进入异常

Shift + F8 跳过异常

Shift + F9 将运行异常处理

5.分析shellcode

可以借助于OllyDbg进行分析,方法如下:

1  将shellcode从一个十六进制编辑器复制到剪贴板。

2  在内存映射面板窗口中,选择类型为Priv的内存区域(这是分配给进程的私有内存,与只读的可执行镜像不同,这些内存被多个进程共享)。

3  双击内存映射面板窗口的某行,会弹出一个十六进制转储窗口,你可以检查它的内容。该区域应该包含几百个连续为0的字节。

4  在内存映射面板窗口中,右击被选择的区域,选择Set Access --> Full Access,赋予该区域读、写、运行的权限。

5  返回内存转储窗口。0字节填充的高亮度区域足以容纳整个shellcode,右键单击选择的内存区域,然后选择Binary --> Binary Paste。这个操作将步骤1中复制的shellcode粘贴到选择的区域。

6  设置EIP寄存器,指向你修改的内存区域(右击返汇编面板窗口的一条指令,选择“此处为新EIP”,可以很容易设置EIP寄存器的值)。

猜你喜欢

转载自blog.csdn.net/m0_37809075/article/details/81454117