OllyICE和xllydbg的区别和基本用法
一、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后,在不附加任何程序时,界面大多是空白的
https://attach.52pojie.cn/forum/202211/03/130846xyxdsyx0x0ixry44.png
图中可以看到,od的主要界面分为五个部分,当我们附加一个程序后,这些窗口中才会显示信息。
首先我们点击左上角的文件
https://attach.52pojie.cn/forum/202211/03/130859y6yjzqmoze5662oe.png
在这我们可以选择打开,或者附加。打开是打开一个还没有被执行的程序,通常这个文件是exe文件,而在下面我们也可以看到曾经打开过的程序列表。如果选择附加,则需要附加一个已经启动的程序。需要打开进程,还是附加进程,则需要根据具体的需求去选择。我们选择附加一个自己编写的小程序
https://attach.52pojie.cn/forum/202211/03/130918gqig8rzlgvlqrnl0.png
附加后如下
https://attach.52pojie.cn/forum/202211/03/130932e1f885p3232h25ih.png
我们点击F9运行后,在点击ALT+E来到模块列表
https://attach.52pojie.cn/forum/202211/03/130946i76lzc3ksiezigl5.png
双击基址为00C10000的模块,跳到该模块,如果一次没有跳到,则重复以上操作
这样我们就成功的附加了一个程序。
2.查看各种窗口及信息
点击左上角的第二个选项查看
https://attach.52pojie.cn/forum/202211/03/131003yyug6ue1471v7x7x.png
在这里面我们查看很多重要的信息
记录表示我们对xdbg进行的哪些操作,以及xdbg在运行过程中出现的各种情况,比如异常,线程终止等等,这方便我们在程序出错时去分析原因。
https://attach.52pojie.cn/forum/202211/03/131018bvw885jvjhj88zvf.png
可执行模块就是我们刚刚点击的ALT+E,这里可以看到当前程序中的所有模块,并且可以看到这些模块的基址,大小,入口,名称等等。在任意模块上点击右键,也可以查看该模块的其他详细信息
https://attach.52pojie.cn/forum/202211/03/131031vjvrjxbhfxvh24f3.png
内存则是可以看到当前程序分配的内存区域,并且可以观察到各个区域的类型及页面属性,如果我们自己用插件申请一片内存,同样会在这里显示出来
https://attach.52pojie.cn/forum/202211/03/131043qmf7csqq1jqmoujb.png
线程是查看程序线程的窗口,点击他和点击快捷按钮上的T是一个效果
https://attach.52pojie.cn/forum/202211/03/131058yzaokaajwacw64aw.png
https://attach.52pojie.cn/forum/202211/03/131104kx4i4xaaxx7waxui.png
当我们在没有下断时,程序卡死了,则可能是某些主要线程被挂起了,此时我们需要来到这个界面,点击右键恢复所有线程
https://attach.52pojie.cn/forum/202211/03/131122hs7166wiv99uuz7w.png
当然,如果有些线程成为了我们调试分析的绊脚石,我们也可以尝试着将其终止,这同样可能导致程序的崩溃,慎重操作。
窗口中显示着程序的窗口布局等信息,并明确的指明了各个控件之间的包含关系。
https://attach.52pojie.cn/forum/202211/03/131134jt76hcggmh6cu6rp.png
这个信息并不是调试所有的程序都会出现的,所以其应用不是很多。
CPU其实就是反汇编窗口,在我们无法返回该窗口时,可以点击ALT+C或者快捷按钮中的C
https://attach.52pojie.cn/forum/202211/03/131146cx4owyw0ew2owxi0.png
调用堆栈需要在程序断下时才有效,他可以表示当前断点处的函数调用过程,同样也可以点击快捷按钮K
https://attach.52pojie.cn/forum/202211/03/131200g4np5iw35wsw4nx8.png
断点中可以查看当前已下的int3断点,并可以对这些断点进行操作,注意,在这里是看不到内存断点和硬件断点的
我们可以用快捷键ALT+B或者快捷按钮B将其打开
https://attach.52pojie.cn/forum/202211/03/131214n0dthrj91rddr1hm.png
在断点上点右键,可以设置其状态,并可以将其修改为条件断点
https://attach.52pojie.cn/forum/202211/03/131225xsmt33ox443ossgp.png
查看中常用的功能就这些,其他的功能我们放到后面进行补充。
3.调试功能
查看的右边是调试选项,我们发现这里有很多功能和CE的调试功能是类似的,只是快捷键有所改动
https://attach.52pojie.cn/forum/202211/03/131240j3t9b3q4x4b4yyyj.png
第一部分的运行的快捷键是F9,这是我们经常用到的,后面三个暂停重新开始和关闭用的不多,尤其在调试一些大型的联网程序时,用这三个功能可能会导致程序崩溃。暂停与CE的暂停类似,不过有时候暂停后是无法重新运行的,慎用。
第二部分是调试代码时常用的几个功能,和CE一样,我们放在调试演示时讲解
第三部分是RUN跟踪设置,在查看中我们可以看到一个RUN跟踪,这个窗口就是为这些调试功能准备的
当我们在任意代码处点击打开或者清除RUN跟踪时,RUN跟踪窗口就会有所显示
https://attach.52pojie.cn/forum/202211/03/131253at7q61iq5ttig6ft.png
我们将程序在此处断下,并单步执行,可以看到每一次执行寄存器的变化
https://attach.52pojie.cn/forum/202211/03/131304zpqttwsrgae7ewwz.png
再一次点击打开或者清除RUN跟踪可以清除所有的跟踪信息,也可以在跟踪窗口中点击右键进行清除
https://attach.52pojie.cn/forum/202211/03/131316hv52vx6ujoug6xnu.png
如果我们想停止跟踪,则需要点击关闭RUN跟踪。
RUN跟踪的功能非常强大,但是用起来并不方便,我们通常会直接观察寄存器的变化来进行分析。
最后一个部分中有一个硬件断点,点开后会显示当前的4个硬件断点的使用情况,并对可以其进行操作,我们也可以点击快捷按钮中的HBP进行操作
https://attach.52pojie.cn/forum/202211/03/131328iqwo91j9ljkkjowk.png
4.插件
插件是在od的基础版本上添加的功能,网上下载的od插件也都不完全相同,这里最常用的是Ollydump和strongOD
Ollydump主要用于保存程序当前版本的模块代码,方便我们后期进行对比分析
https://attach.52pojie.cn/forum/202211/03/131340yaccaca2a64kh472.png
https://attach.52pojie.cn/forum/202211/03/131348mu0uubhsbbw7buxk.png
需要注意的是这里我们需要自己填写DUMP首地址和大小,默认的首地址是400000,我们根据需要自行修改,DUMP之后会在指定路径里生成文件
https://attach.52pojie.cn/forum/202211/03/131358foj2jmrmgw2ohgju.png
strongOD中我们常用的功能是剥离进程和申请内存,其他的也很有用,但是我们暂时用不到
https://attach.52pojie.cn/forum/202211/03/131408juox9res9z1zffx2.png
5.其他
od的选项我们几乎不用去进行修改,顶多在界面里更改下字体的大小等等。
最后一个设置API断点,我们也可以直接在反汇编窗口直接跟随这个API函数,然后下INT3断点。
三、用od调试程序
我们打开一个小程序,用od附加,并使用ce去扫描出一个地址
https://attach.52pojie.cn/forum/202211/03/131420syrryrln4wpprmmp.png
在od数据窗口下面,有一个命令行插件
在命令行中输入dd 01A85C34并回车,可以在数据窗口中以堆栈格式显示当前地址附近的信息
https://attach.52pojie.cn/forum/202211/03/131431y59zikxww9y2s94y.png
这种查看方式是我们最常用的一种,当然命令行还有其他的查看方式,比如da,db,dc,dw,dr等等,这些指令中,最常用的是dw和dr,分别是硬件写入断点和硬件访问断点。当然,我们可以直接在数据窗口的地址上点击右键来完成这些操作。不过,如果某个地址的访问或者写入比较频繁,为了能后快速的进行下段操作,我们还是使用命令行比较方便,左手点回车,右手触发断点。
在数据窗口上,我们点击右键,可以看到很多的功能
https://attach.52pojie.cn/forum/202211/03/131441k5wqspdfejwk0zrs.png
备份和复制我们就不说了,二进制包括4个功能
https://attach.52pojie.cn/forum/202211/03/131452ufck9hkzvpvjvjrh.png
这4个功能在反汇编窗口中也同样适用,不过反汇编窗口中的FF会变成用NOP填充
说白了,这些功能就是为了以字节集的方式去修改或者复制内存。
二进制下面的修改则很容易理解, 只是讲当前的数值修改为自己想要的,我们可以修改各种数据类型的数值
https://attach.52pojie.cn/forum/202211/03/131504po1hno9m9eheg7e9.png
断点则包过硬件和内存两种,细分又可以分为执行,写入和访问
https://attach.52pojie.cn/forum/202211/03/131513jqq1ld2qqccz1o61.png
内存断点会断在访问代码执行前,硬件断点会断在代码执行后,不过内存断点可能会让程序很卡,甚至崩溃,慎用
执行断点则与F2断点效果类似,不过现在已经很少用到了
中间的第二部分,则是以各种数据类型查看数据,最常用的三类是HEX,长型和浮点
我们在CE扫描到的数据上下一个硬件访问断点,点击程序中的修改后,断点触发
https://attach.52pojie.cn/forum/202211/03/131524xlnbynynfn86yfyx.png
这里断到了一个eax+C的+C偏移,由于下的是硬件断点,所以此时代码已经步过这一条。我们会发现在上面有???,这是花指令导致的混淆,如果此时我们在反汇编窗口点击CTRL+A去分析代码的话,可能会导致代码段的观察变的混乱
https://attach.52pojie.cn/forum/202211/03/131536wnimov1vi5oq1fmb.png
此时我们甚至连用鼠标点击指定的代码都无法完成,所以这种情况下我们会在反汇编窗口点击右键,分析,删除分析
https://attach.52pojie.cn/forum/202211/03/131547bkiy8dksk7y1mm8i.png
接下来继续分析,eax向上分析直接来源于基地址0x180A38C,所以公式为+C
由于数据窗口中dd的是地址,所以+C这一层的括号我们就省略掉了,根据个人习惯去做记录即可
既然得到了基地址,我们可以在反汇编窗口点击右键,查找,所有常量,来获取到所有相同的基地址
https://attach.52pojie.cn/forum/202211/03/131557ml1rvqrwl6ao7daj.png
https://attach.52pojie.cn/forum/202211/03/131605ajgeoen1bowogw4n.png
当然,我们也可以查找命令,命令序列,二进制字串等等,根据需要选择即可。
反汇编窗口从左到右的四列依次为地址,机器码,汇编代码,注释,
其中的注释是可以随意更改的,我们可以通过这个来找到之前分析过的内容
如果我们分析到了函数头部,需要执行到返回,可以点击ctrl+F9,od默认的执行到返回是在返回到retn后多执行了一次F8,所以会来到CALL代码的下一条。如果我们在下断后,发现代码已经在了retn处
https://attach.52pojie.cn/forum/202211/03/131615np9mrccq1lk99clh.png
此时切记,不要在代码执行到retn处时点ctrl+F9,因为此时程序已经默认了我们执行到了返回处,再执行返回的话会直接返回两层,那么中间就漏掉了一层CALL,下面是不在retn和在retn处的两种返回的结果
https://attach.52pojie.cn/forum/202211/03/131625qa582khjhtnfsfa5.png
https://attach.52pojie.cn/forum/202211/03/131630e1md4fxxtd0wdw0a.png
所以当我们已经执行retn处时,只需要点击F8即可。
4.xdbg的不同之处
xdbg和od的界面几乎是相同的,事实上用法也大致一样,只是有个别的地方是需要注意的
首先是xdbg的脱离功能是内置在文件中的,无需使用strongod类似的插件,并且xdbg 的附加速度要远远高于od
https://attach.52pojie.cn/forum/202211/03/131641xe5h92dh5eje3z55.png
在使用xdbg之前,我们需要先到选项-选项中-事件中将系统断点,TLS回调函数,附加断点去掉,当然如果没有需求,入口断点也可以去掉
https://attach.52pojie.cn/forum/202211/03/131651eqlzlol8lhookt4q.png
然后再选项-选项-异常中将忽略异常异常区间设置0-FFFFFFFF
https://attach.52pojie.cn/forum/202211/03/131701c8d9s4sejw933r5a.png
反汇编中选择一直启用高亮模式和值前加0x前缀
如果不启用高亮模式,那么我们每一次想启用高亮,需要点击一次H
xbdg的命令行不如od那么好用,他不识别dd,所以我们需要使用dump 地址来实现dd的功能,只是每一dump之后需要重新输入dump,很不方便。
https://attach.52pojie.cn/forum/202211/03/131712iv0wjcgle2fazefw.png
所以在xdbg中,我们通常会是用ctrl+g来跳转到地址。
在xbdg的数据窗口上点击右键,第一项是二进制编辑,这里没有00或者FF填充,而是多了一个填充按钮
https://attach.52pojie.cn/forum/202211/03/131725mfsg7nlz2ryllcgq.png
这表示我们可以更加灵活的对内存进行填充
我们在数据窗口点击右键,分配内存,而无需使用strongod中的申请内存,并且我们可以根据需要申请不同大小内存
https://attach.52pojie.cn/forum/202211/03/131737tthl6b1b30bhhdjt.png
分配内存后,选中一段区域,右键二进制填充,0102,则这片内存都变成了0102
https://attach.52pojie.cn/forum/202211/03/131747v1l1zw9ppcp39w7k.png
在od中,我们通过hex查看字符串,只能查看ascii和unicode,而xdbg的十六进制中是有完整的代码页的,他可以选择任意一种编码方式
https://attach.52pojie.cn/forum/202211/03/131757zqcccfcgcccyvcvq.png
https://attach.52pojie.cn/forum/202211/03/131802r8755ej7q1waqqqk.png
这里的ascii查看汉字,我们需要用GB2312或者GBK才可以。
xdbg的主窗口上会有很多的调试按钮,而不是将他们放到反汇编窗口右键的列表中,
比如注释,可以在视图中找到,也可以点击上面的快捷按钮
https://attach.52pojie.cn/forum/202211/03/131814xjo2zft500ua0zxl.png
这上面的断点窗口中,可以查看到所有的已经设置的断点, 包括硬件,内存,F2等等,很方便,我们也可以对他们进行批量操作
https://attach.52pojie.cn/forum/202211/03/131823k4qi6dfi66nqbzaf.png
如果在我们调试时出现了第一次异常,可以直接shift+F9忽略,但是出现了第二次异常,则说明程序已经崩溃
https://attach.52pojie.cn/forum/202211/03/131840wox1od0h1hsbt5sz.png
脱离,或者任务管理器中ALT+E关闭进程后,点击F9运行即可
在od中我们可以通过ctrl+A来分析所有代码,在xdbg中我们同样可以这么做,并且我们也可以在函数头部点击A来仅仅分析当前函数,这是很方便的。并且我们可以发现,在od中出现混淆的代码,在xdbg中有一些可以正常显示了
https://attach.52pojie.cn/forum/202211/03/131852ddd8mpdypnmqzuud.png
od中的寄存器窗口中除了通用寄存器外只有st0-st7,而xdbg中还有xmm和ymm等寄存器
https://attach.52pojie.cn/forum/202211/03/131901fmjkecl3jmvb8vob.png
甚至这里还有硬件寄存器,当我们设置硬件断点时,可以更加完美的对断点进行修改。
在几个主要窗口之外,xdbg还多了一个参数窗口,这里不只可以查看不同的函数约定,还可以查看我们想看到的所有参数值,这对新手来说是个福利
https://attach.52pojie.cn/forum/202211/03/131911ti2g39b2kpd6bugc.png
xdbg还有一个很实用的功能,在反汇编窗口点击右键复制,我们可以看到里面有一个RVA,这可以计算出当前地址与模块基地址的相对偏移,这对我们计算动态模块的基地址偏移有很大的帮助
https://attach.52pojie.cn/forum/202211/03/131921bzakqlxxl0nqyrzq.png
xdbg的执行到返回不像od可以设置ctrlF9直接省略一次F8,而是必须要用CTRL+F9再点一次F8才能返回到函数外层,
所以很多人在初次使用xdbg时会不习惯
xdbg的其他常用功能与od类似,把以上的不同点搞明白,基本上就可以在od和xdbg中随意转换了。
当让xdbg最大的亮点,还是在对x64的支持上,这一点是od没法比的。
注:本教程比较的基础,我也是出于学习分享此文章内容搬砖于其他论坛,作者仅做自己论坛收藏贴用,
转载请标注来源
自己给自己占个楼 。。你可否整理成doc或pdf格式的 上传到这里图片都不成样子了 感谢大佬,已收藏! Cerolluo 发表于 2022-11-16 15:53
感谢大佬,已收藏!
谢谢你的支持 感谢大佬分享{:6_225:} 真是高手,讲的好详细 感谢分享。 有点看不清
页:
[1]
2