安全矩阵

 找回密码
 立即注册
搜索
查看: 2535|回复: 0

网络安全攻防:软件逆向之OllyDbg调试器

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-3-28 08:30:49 | 显示全部楼层 |阅读模式
原文链接:网络安全攻防:软件逆向之OllyDbg调试器

OllyDbg是非常强大的ring3级的动态调试器,在没有源码的时它的作用就会非常明显,可以跟踪寄存器,识别进程和API调用等。同时它也有非常丰富的插件支持。OllyDbg的官网是http://www.ollydbg.de/,安装过程十分简单,只要下载压缩包,保存之后解压即可使用。推荐下载 OllyDbg1.10。解压后的文件如图1所示。双击OLLYDBG就可以运行了。


图1  OllyDbg解压安装文件

消息提示PSAPI.DLL,在OllyDbg中的版本低于系统中的同名版本。如果选择“是(Y)”就会把旧的库删除,所以选择“否(N)”,选择OllyDbg中自带的PSAPI.DLL,如图2所示。

图2  选择自带PSAPI.DLL

1. 界面

将HelloWorld.exe拖入OllyDbg。OllyDbg界面如图3所示。

图3  OllyDbg界面

下面是各个窗口的简单介绍。

  • 反汇编窗口显示程序的反汇编代码。窗口从左往右依次为地址、HEX数据、反汇编、注释。在调试的时候可以双击注释窗口添加注释,便于理解。


  • 寄存器窗口显示当前CPU寄存器的内容,在逆向分析时需要特别注意。


  • 信息窗口显示当前命令的一些参数,如字符串、目标地址等。


  • 数据窗口显示内存中的内容,右键数据窗口可以选择显示的不同方式。


  • 堆栈窗口显示当前线程的堆栈。在逆向分析时可以提供一些有用的信息。


2. 配置

(1)调整窗口

调整各个窗口大小只需要左键边框拖动到合适位置。重启OllyDbg就可以看到已经产生效果。

(2)界面设置

Udd目录:这个目录的作用是保存调试的信息。当用OllyDbg调试一个程序,可能会设置断点、添加注释。OllyDbg会生成一个.UDD文件方便下次调试。当没有设置这个目录时会在安装目录生成 UDD 文件。使用一段时间后,文件夹会变得很乱。在安装目录下新建一个UDD文件,在OllyDbg中设置目录Option→Appearanc→Directories里面设置UDD路径(绝对路径),如图4所示。

图4  UDD与Plugin路径

Plugin目录:这个目录用来存放插件。在安装目录下新建一个Plugin目录,在OllyDbg中设置目录,Option→Appearance→Directories里面设置Plugin路径(绝对路径)。建议安装一些中文搜索插件和StrongOD。插件可以使OllyDbg使用起来更顺手。在平时使用时也要注意插件的收集,如图4所示。

(3)调试设置

调试设置在Option→Debugging options中。默认配置已经可以较好地使用。新手一般不需要进行设置,建议在熟练掌后根据需求个性配置,如图5所示。

图5  调试设置

3. 加载程序

将要分析的程序拖到OllyDbg中即可开始分析,或可以通过File→Open选择准备分析的程序,如图6所示。

图6  加载程序

当然也可以加载已经在运行的程序,File→attach 然后选择想要分析的进程,如图7所示。

图7  加载进程

4. 基本操作

F2:在光标处设置断点,再按一次删除光标处的断点。

F4:运行到光标所在位置。

F7:单步步过,遇到CALL等函数会进入。

F8:单步步过,遇到CALL等函数会跳过,不进入。

F9:运行程序。

CTR+F9:执行到返回,会在第一个遇到的RET指令暂停。

ALT+F9:执行到用户代码,可以快速地从系统领空返回到程序领空。

查找字符串:在反汇编窗口右键Search for→binary string,可以查找ASCII、UNICODE、HEX。如果要查找代码里的所有字符串需要安装插件,如中文搜索或Ultra string reference,如图8所示。

图8  查找字符串

5. 断点

(1)普通断点

普通断点可以用F2或在命令栏用BPX命令来下断点。如图9所示,已经在push ebx下了断点,地址会变成红色。

图9  普通断点

对已经设置的断点进行设置,鼠标左键单击图9中的“B”(show breakpoint)或快捷键ALT+B,界面如图10所示。

图10  显示断点

右键单击空白处可对断点进行设置,如图11所示。

图11  断点设置

下面是命令的简单介绍。

Remove:删除断点。

Disable:禁用断点。

Edit condition:设置触发条件。

Follow in disassembler:在反汇编窗口显示断点。

Disable all:禁用所有断点。

Delete all breakpoint:删除所有断点。

在command里设置BPX断点,当运行到strcmp函数时就会暂停,如图12所示。

图12  运行至断点

(2)内存断点

设置断点后,当任何代码在指定内存地址读写执行都会触发异常。在数据窗口选择要下内存断点的部分,右键选择Break point,再选择Memory on access或Memory on write。内存断点不会出现在断点列表中,而且不能设置多个内存断点,设置第二个内存断点时会自动删除第一个内存断点。删除内存断点,右键数据窗口breakpoint→Remove memory break point,如图13所示。

图13  设置内存断点

(3)硬件断点(HBP)

可以设置4个硬件断点。设置了硬件断点的内存地址会被放入调试寄存器中,由调试寄存器中断发消息给OllyDbg。硬件断点可以对byte、word、dword下断点。设置方法参考内存断点。取消断点需要单击Debug→Hardware breakpoints,如图14所示,单击“delete”按钮。

图14  硬件断点

(4)条件断点

条件断点是普通的断点,不过需要在设置条件满足时才会中断。反汇编窗口在需要设置断点的地方右键breakpoint→conditional(快捷键shift+F2)然后输入条件,如图15所示,可以在断点列表里删除。

图15  条件断点


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-21 01:31 , Processed in 0.012880 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表