新人福利——OllyICE和xllydbg的区别和基本用法

14 篇文章 7 订阅
13 篇文章 8 订阅

一、OllyICE简介

OllyICE简称od,这是一款很古老的动态调试工具,在过去的许多年里,深受广大逆向程序员的喜好。但是由于些年的更新较少,并且在x64的版本上又没有大量的插件支持,所以程序员从使用od逐渐转为使用xllydbg,简称xdbg。

当然在32位版本里,od的功能还是非常强大的,因为年头久,多种多样的插件也为其舔砖加瓦,甚至达到了几乎无可取代的地位。但是站在高处就要承受压力,随着名声越来越大,用户量越来越多,针对od的保护措施也层出不穷,这也给了xdbg一些机会。

xdbg在界面和使用上和od很像,主要的功能几乎是相同的,但是一些细节上还有很多差异。由于xdbg有32位和64位两种版本,并且功能都相同,所以我们往往称其为x32dbg或者x64dbg。

下面先来看一下od的基本功能和用法,然后再到xdbg中看两者的不同在哪。

二、od的界面和基本功能

1.附加

od的版本大多是基于1.10版本进行修改的,所以虽然我们在网上下载到的od版本多种多样,但是几乎都是在1.10版本上做的处理,比如添加插件,加壳等等。

我们打开od后,在不附加任何程序时,界面大多是空白的

图中可以看到,od的主要界面分为五个部分,当我们附加一个程序后,这些窗口中才会显示信息。

首先我们点击左上角的文件

在这我们可以选择打开,或者附加。打开是打开一个还没有被执行的程序,通常这个文件是exe文件,而在下面我们也可以看到曾经打开过的程序列表。如果选择附加,则需要附加一个已经启动的程序。需要打开进程,还是附加进程,则需要根据具体的需求去选择。我们选择附加一个自己编写的小程序

附加后如下

我们点击F9运行后,在点击ALT+E来到模块列表

双击基址为00C10000的模块,跳到该模块,如果一次没有跳到,则重复以上操作

这样我们就成功的附加了一个程序。

2.查看各种窗口及信息

点击左上角的第二个选项查看

在这里面我们查看很多重要的信息

记录表示我们对xdbg进行的哪些操作,以及xdbg在运行过程中出现的各种情况,比如异常,线程终止等等,这方便我们在程序出错时去分析原因。

可执行模块就是我们刚刚点击的ALT+E,这里可以看到当前程序中的所有模块,并且可以看到这些模块的基址,大小,入口,名称等等。在任意模块上点击右键,也可以查看该模块的其他详细信息

内存则是可以看到当前程序分配的内存区域,并且可以观察到各个区域的类型及页面属性,如果我们自己用插件申请一片内存,同样会在这里显示出来

线程是查看程序线程的窗口,点击他和点击快捷按钮上的T是一个效果

当我们在没有下断时,程序卡死了,则可能是某些主要线程被挂起了,此时我们需要来到这个界面,点击右键恢复所有线程

当然,如果有些线程成为了我们调试分析的绊脚石,我们也可以尝试着将其终止,这同样可能导致程序的崩溃,慎重操作。

窗口中显示着程序的窗口布局等信息,并明确的指明了各个控件之间的包含关系。

这个信息并不是调试所有的程序都会出现的,所以其应用不是很多。

CPU其实就是反汇编窗口,在我们无法返回该窗口时,可以点击ALT+C或者快捷按钮中的C

调用堆栈需要在程序断下时才有效,他可以表示当前断点处的函数调用过程,同样也可以点击快捷按钮K

断点中可以查看当前已下的int3断点,并可以对这些断点进行操作,注意,在这里是看不到内存断点和硬件断点的

我们可以用快捷键ALT+B或者快捷按钮B将其打开

在断点上点右键,可以设置其状态,并可以将其修改为条件断点

查看中常用的功能就这些,其他的功能我们放到后面进行补充。

3.调试功能

查看的右边是调试选项,我们发现这里有很多功能和CE的调试功能是类似的,只是快捷键有所改动

第一部分的运行的快捷键是F9,这是我们经常用到的,后面三个暂停重新开始和关闭用的不多,尤其在调试一些大型的联网程序时,用这三个功能可能会导致程序崩溃。暂停与CE的暂停类似,不过有时候暂停后是无法重新运行的,慎用。

第二部分是调试代码时常用的几个功能,和CE一样,我们放在调试演示时讲解

第三部分是RUN跟踪设置,在查看中我们可以看到一个RUN跟踪,这个窗口就是为这些调试功能准备的

当我们在任意代码处点击打开或者清除RUN跟踪时,RUN跟踪窗口就会有所显示

我们将程序在此处断下,并单步执行,可以看到每一次执行寄存器的变化

再一次点击打开或者清除RUN跟踪可以清除所有的跟踪信息,也可以在跟踪窗口中点击右键进行清除

如果我们想停止跟踪,则需要点击关闭RUN跟踪。

RUN跟踪的功能非常强大,但是用起来并不方便,我们通常会直接观察寄存器的变化来进行分析。

最后一个部分中有一个硬件断点,点开后会显示当前的4个硬件断点的使用情况,并对可以其进行操作,我们也可以点击快捷按钮中的HBP进行操作

4.插件

插件是在od的基础版本上添加的功能,网上下载的od插件也都不完全相同,这里最常用的是Ollydump和strongOD

Ollydump主要用于保存程序当前版本的模块代码,方便我们后期进行对比分析

需要注意的是这里我们需要自己填写DUMP首地址和大小,默认的首地址是400000,我们根据需要自行修改,DUMP之后会在指定路径里生成文件

strongOD中我们常用的功能是剥离进程和申请内存,其他的也很有用,但是我们暂时用不到

5.其他

od的选项我们几乎不用去进行修改,顶多在界面里更改下字体的大小等等。

最后一个设置API断点,我们也可以直接在反汇编窗口直接跟随这个API函数,然后下INT3断点。

三、用od调试程序

我们打开一个小程序,用od附加,并使用ce去扫描出一个地址

在od数据窗口下面,有一个命令行插件

在命令行中输入dd 01A85C34并回车,可以在数据窗口中以堆栈格式显示当前地址附近的信息

这种查看方式是我们最常用的一种,当然命令行还有其他的查看方式,比如da,db,dc,dw,dr等等,这些指令中,最常用的是dw和dr,分别是硬件写入断点和硬件访问断点。当然,我们可以直接在数据窗口的地址上点击右键来完成这些操作。不过,如果某个地址的访问或者写入比较频繁,为了能后快速的进行下段操作,我们还是使用命令行比较方便,左手点回车,右手触发断点。

在数据窗口上,我们点击右键,可以看到很多的功能

备份和复制我们就不说了,二进制包括4个功能

这4个功能在反汇编窗口中也同样适用,不过反汇编窗口中的FF会变成用NOP填充

说白了,这些功能就是为了以字节集的方式去修改或者复制内存。

二进制下面的修改则很容易理解, 只是讲当前的数值修改为自己想要的,我们可以修改各种数据类型的数值

断点则包过硬件和内存两种,细分又可以分为执行,写入和访问

内存断点会断在访问代码执行前,硬件断点会断在代码执行后,不过内存断点可能会让程序很卡,甚至崩溃,慎用

执行断点则与F2断点效果类似,不过现在已经很少用到了

中间的第二部分,则是以各种数据类型查看数据,最常用的三类是HEX,长型和浮点

我们在CE扫描到的数据上下一个硬件访问断点,点击程序中的修改后,断点触发

这里断到了一个eax+C的+C偏移,由于下的是硬件断点,所以此时代码已经步过这一条。我们会发现在上面有???,这是花指令导致的混淆,如果此时我们在反汇编窗口点击CTRL+A去分析代码的话,可能会导致代码段的观察变的混乱

此时我们甚至连用鼠标点击指定的代码都无法完成,所以这种情况下我们会在反汇编窗口点击右键,分析,删除分析

接下来继续分析,eax向上分析直接来源于基地址0x180A38C,所以公式为[180A38C]+C

由于数据窗口中dd的是地址,所以+C这一层的括号我们就省略掉了,根据个人习惯去做记录即可

既然得到了基地址,我们可以在反汇编窗口点击右键,查找,所有常量,来获取到所有相同的基地址

当然,我们也可以查找命令,命令序列,二进制字串等等,根据需要选择即可。

反汇编窗口从左到右的四列依次为地址,机器码,汇编代码,注释,

其中的注释是可以随意更改的,我们可以通过这个来找到之前分析过的内容

如果我们分析到了函数头部,需要执行到返回,可以点击ctrl+F9,od默认的执行到返回是在返回到retn后多执行了一次F8,所以会来到CALL代码的下一条。如果我们在下断后,发现代码已经在了retn处

此时切记,不要在代码执行到retn处时点ctrl+F9,因为此时程序已经默认了我们执行到了返回处,再执行返回的话会直接返回两层,那么中间就漏掉了一层CALL,下面是不在retn和在retn处的两种返回的结果

所以当我们已经执行retn处时,只需要点击F8即可。

4.xdbg的不同之处

xdbg和od的界面几乎是相同的,事实上用法也大致一样,只是有个别的地方是需要注意的

首先是xdbg的脱离功能是内置在文件中的,无需使用strongod类似的插件,并且xdbg 的附加速度要远远高于od

在使用xdbg之前,我们需要先到选项-选项中-事件中将系统断点,TLS回调函数,附加断点去掉,当然如果没有需求,入口断点也可以去掉

然后再选项-选项-异常中将忽略异常异常区间设置0-FFFFFFFF

反汇编中选择一直启用高亮模式和值前加0x前缀

如果不启用高亮模式,那么我们每一次想启用高亮,需要点击一次H

xbdg的命令行不如od那么好用,他不识别dd,所以我们需要使用dump 地址来实现dd的功能,只是每一dump之后需要重新输入dump,很不方便。

所以在xdbg中,我们通常会是用ctrl+g来跳转到地址。

在xbdg的数据窗口上点击右键,第一项是二进制编辑,这里没有00或者FF填充,而是多了一个填充按钮

这表示我们可以更加灵活的对内存进行填充

我们在数据窗口点击右键,分配内存,而无需使用strongod中的申请内存,并且我们可以根据需要申请不同大小内存

分配内存后,选中一段区域,右键二进制填充,0102,则这片内存都变成了0102

在od中,我们可以对一个数值为地址的位置点击回车,并进入到这个地址中,而在xdbg中,我们只能点击右键,在内存窗口中跟随,可以选择当前窗口或者其他内存窗口

在od中,我们通过hex查看字符串,只能查看ascii和unicode,而xdbg的十六进制中是有完整的代码页的,他可以选择任意一种编码方式

这里的ascii查看汉字,我们需要用GB2312或者GBK才可以。

xdbg的主窗口上会有很多的调试按钮,而不是将他们放到反汇编窗口右键的列表中,

比如注释,可以在视图中找到,也可以点击上面的快捷按钮

这上面的断点窗口中,可以查看到所有的已经设置的断点, 包括硬件,内存,F2等等,很方便,我们也可以对他们进行批量操作

如果在我们调试时出现了第一次异常,可以直接shift+F9忽略,但是出现了第二次异常,则说明程序已经崩溃

脱离,或者任务管理器中ALT+E关闭进程后,点击F9运行即可

在od中我们可以通过ctrl+A来分析所有代码,在xdbg中我们同样可以这么做,并且我们也可以在函数头部点击A来仅仅分析当前函数,这是很方便的。并且我们可以发现,在od中出现混淆的代码,在xdbg中有一些可以正常显示了

od中的寄存器窗口中除了通用寄存器外只有st0-st7,而xdbg中还有xmm和ymm等寄存器

甚至这里还有硬件寄存器,当我们设置硬件断点时,可以更加完美的对断点进行修改。

在几个主要窗口之外,xdbg还多了一个参数窗口,这里不只可以查看不同的函数约定,还可以查看我们想看到的所有参数值,这对新手来说是个福利

xdbg还有一个很实用的功能,在反汇编窗口点击右键复制,我们可以看到里面有一个RVA,这可以计算出当前地址与模块基地址的相对偏移,这对我们计算动态模块的基地址偏移有很大的帮助

xdbg的执行到返回不像od可以设置ctrlF9直接省略一次F8,而是必须要用CTRL+F9再点一次F8才能返回到函数外层,

所以很多人在初次使用xdbg时会不习惯

xdbg的其他常用功能与od类似,把以上的不同点搞明白,基本上就可以在od和xdbg中随意转换了。

当让xdbg最大的亮点,还是在对x64的支持上,这一点是od没法比的。

就写到这里吧,后面如果有哪些遗漏或者新增的功能,我们再单独进行讲解。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OllyDbg 是一种具有可视化界面的 32 位汇编-分析调试器。它的特别之处在于可以在没有源代码时解决问题,并且可以处理其它编译器无法解决的难题。 Version 1.10 是最终的发布版本。 这个工程已经停止,我不再继续支持这个软件了。但不用担心:全新打造的 OllyDbg 2.00 不久就会面世! 运行环境: OllyDbg 可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统中工作,但我们强烈建议您采用300-MHz以上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果您需要使用诸如追踪调试[Trace]之类的扩展功能话,建议您最好使用128MB以上的内存。 支持的处理器: OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon 扩展指令集、SSE指令集以及相关的数据格式,但是不支持SSE2指令集。 配置: 有多达百余个(天呀!)选项用来设置 OllyDbg 的外观和运行。 数据格式: OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCII、UNICODE、 16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。 帮助: 此文件中包含了关于理解和使用 OllyDbg 的必要的信息。如果您还有 Windows API 帮助文件的话(由于版权的问题 win32.hlp 没有包括在内),您可以将它挂在 OllyDbg 中,这样就可以快速获得系统函数的相关帮助。 启动: 您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到OllyDbg中,或者重新启动上一个被调试程序,或是挂接[Attach]一个正在运行的程序。OllyDbg支持即时调试。OllyDbg根本不需要安装,可直接在软盘中运行! 调试DLLs: 您可以利用OllyDbg调试标准动态链接库 (DLLs)。OllyDbg 会自动运行一个可执行程序。这个程序会加载链接库,并允许您调用链接库的输出函数。 源码级调试: OllyDbg 可以识别所有 Borland 和 Microsoft 格式的调试信息。这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。 代码高亮: OllyDbg 的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规[general]、FPU/SSE、段/系统寄存器、在栈或内存中的操作数,常量)。您可以定制个性化高亮方案。 线程: OllyDbg 可以调试多线程程序。因此您可以在多个线程之间转换,挂起、恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就像调用 GETLASTERROR 返回一样)。 分析:OllyDbg 的最大特点之一就是分析。它会分析函数过程、循环语句、选择语句、表[tables]、常量、代码中的字符串、欺骗性指令[tricky constructs]、API调用、函数中参数的数目,import 表等等。. 这些分析增加了二进制代码的可读性,减少了出错的可能性,使得我们的调试工作更加容易。 Object扫描。 OllyDbg 可以扫描Object文件/库(包括 OMF 和 COFF 格式),解压代码段[code segments]并且对其位置进行定向。 Implib扫描。 由于一些DLL文件的输出函数使用的索引号,对于人来说,这些索引号没有实际含义。如果您有与DLL相应的输入库[import library],OllyDbg 就可以将序号转换成符号名称。 完全支持Unicode: 几乎所有支持 ASCII 的操作同时也支持 UNICODE,反之亦然。 名称: OllyDbg 可以根据 Borland 和 Microsoft 格式的调试信息,显示输入/输出符号及名称。Object 扫描器可以识别库函数。其中的名称和注释您可任意添加。如果DLL中的某些函数是通过索引号输出的,则您可通过挂接输入库[import library]来恢复原来的函数名称。不仅如此,OllyDbg还能识别大量的常量符号名(如:窗口消息、错误代码、位域[bit fields]…)并能够解码为已知的函数调用。
ollyice是一款非常实用的英语学习工具,下面是它的使用教程。 首先,你需要在电脑或手机上下载和安装ollyice应用。安装完成后,点击应用图标打开软件。 打开软件后,你需要创建一个账户。点击注册按钮,填写自己的用户名、邮箱和密码,并点击确认按钮完成注册。 注册完成后,你将进入ollyice的主界面。在主界面上,你可以看到各种学习功能和模块。 首先,点击“单词学习”模块。在这个模块中,你可以学习和记忆单词。你可以选择不同的单词书和难度等级,点击开始学习按钮开始学习。 在学习过程中,ollyice会通过不同的方式帮助你记忆单词,例如使用图片、例句等。你可以跟随提示做相应的操作,例如选择正确的选项、输入单词的拼写等。 除了单词学习,ollyice还有其他功能模块。例如有听力练习、阅读理解、口语练习等。你可以根据自己的学习需求选择相应的功能模块进行学习。 此外,ollyice还有一个记忆曲线功能。它根据你的学习情况和记忆曲线理论,自动规划每个单词的复习时间,帮助你更好地记忆和巩固所学内容。 总之,ollyice是一个功能齐全、易于使用的英语学习工具。通过多种学习模块和记忆曲线功能,它可以帮助你更好地学习和记忆英语单词和相关内容。希望你能够善用ollyice提高自己的英语水平。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值