OlllyDbg调试器和IDA调试器
OllyDbg调试器
OllyDbg称为Ring3级的首选工具。可以识别数千个被和Windows频繁使用的函数,并能将其注释出来。它会自动分析函数过程、循环语句等
OllyDbg主界面
快捷键
Address列:显示被双击行地址的相对地址,再次双击返回标准地址模式。
Hex dump列:设置或取消无条件断点,对应的快捷键是"F2键"
Disassembly列:调用汇编器,可直接修改汇编代码,对应的快捷键是空格键
Comment列:允许增加或编辑注释,对应的快捷键是 ";" 键
从键盘上选择多行,可按Shifit键和上下光标键来实现。
信息面板窗口
在进行动态跟踪时,信息面板窗口(Information window)将显示与指令相关的各个寄存器的值、API函数调用提示和跳转调试等信息。
数据面板窗口
数据面板窗口(Dump window)以十六进制和字符方式显示文件在内存中的数据。要显示指定内存地址的数据,可的那几右键快捷菜单中的"Go to expression"命令或按"Ctrl+G"快捷键,打开地址窗口,输入地址。
寄存器面板窗口
寄存器面板窗口(Registers Window)显示CPU各寄存器的值,支持浮点、MMX和3DNow!寄存器可以单击右键或窗口标题切换显示寄存器的方式。
栈面板窗口
栈面板窗口(Stack window)显示栈的内容,即ESP指向地址的内容。将数据放入栈的操作为入栈(push) 从栈中取出数据的操作称为出栈(pop)。栈窗口非常重要,各API函数和子程序都利用它传递参数和变量等
基本操作
单步功能的快捷键是 F7键(路过) 和 F8键(跟进)
1.
在编译时,优化时有两种选择一个是 Maximize Speed (最大速度) 和Minimize Size(最大)优化选项进行编译
。
因为优化选项不同,所以生成的汇编代码也会不同。
这就涉及到编译原理的知识了。
IDA编译器
IDA安装成功后,会在桌面上生成两个图标,分别为IDA Pro(32-bit)和IDA Pro(64-bit),它们分别对于32位和64位程序的分析。IDA支持的文件类型非常丰富,除了常见的PE格式,还支持DOS、UNIX、Mac、Java、.NET等平台的文件格式。单击"File"->"Open"菜单项,打开要目标文件.exe文件,IDA一般能自动识别其格式
IDA是按区块装载PE文件的,例如.text(代码块)、.data(数据块)、.rsrc(资源块)、.data(输入表)和.edata(输入表)等。IDA反汇编所消耗的时间与程序大小及复杂程度有关,通常需要等待一段时间才能完成。
第一阶段
将程序的代码和数据分开,分别标记函数并分析其参数调用,分析跳转,调用等指令关系并给标签赋值等。
第二阶段
如果IDA能够识别文件的编译类型,就装载对应的编译器特征文件,然后给各函数赋名。随后,IDA会创建一个数据库,其组件分别保存在扩展名为 .id0、id1、.nam 和 .til的4个文件里,这些文件的格式为IDA专用,在关闭当前项目时,这四个文件将被存档为一个IDB文件。一旦IDA创建了数据库,就不需要再访问这个可执行文件,除非使用IDA的集成调试器调试这个可执行文件本身。再次分析该目标文件时,IDA只需要打开现有数据库,就会将界面恢复为上次关闭时的状态。
"Kernel option1" "Kernel option2" "Processor option" 这3个选项可以控制反汇编引擎的工作状态,一般使用默认设置。IDA会自动识别程序类别与处理器类型,在大多数情况下,分析选项的默认值会在准确与方便性之间提供一个折中的参数。
导航栏
注释
使用IDA可以方便地在代码后面输入注释。在窗口右键空白处单击右键,将显示输入注释的快捷菜单项,一个是"Enter comment"(快捷键时冒号),另一个是"Enter repeatable comment"(快捷键是分号)按";"
按";"键输入的注释在所有交叉参考处都会出现,按":"键输入的注释只在该处出现。如果一个地址处有两种注释,将只显示非重复注释。
跳转到地址窗口
可以在反汇编窗口上下滚动,直至看到想要访问的地址。若直到目标地址,可以用IDA提供的快捷键"G"打开"Jump to address"(跳转到地址)
交叉参考
通过交叉参考(XREF)可以直到指令代码相互调用的关系。如下图:"CODE XREF":sub_401120+ j表示该调用地址是401120h,"j"表示跳转(jump)。此外,"o" 表示偏移量(offset) "p"表示子程序(procedure)双击此处或按"Enter"键可以跳转到调用该处的地方。
参考重命名
参考重命名(Renaming of reference)是IDA的一个极好的功能,它可以将反汇编清单中的一些默认名称更改为有意义的名称,增加了代码的可读性。要修改一个名称,只需单击希望修改的名称(使其突出显示),并使用快捷键"N"打开更名对话框。
Local name: 局部符号名的作用域仅限于当前函数。
Include in names list:勾选这个选型,将有一个名称被添加到名称窗口中。
Pulic name: 由二进制文件(例如 DLL)输出的名称。
Autogenerated name:自动创建符号名。
标签的用法
单击菜单项"Jump"-->"Mark position",打开"标记当前位置"功能,会出现如图3.12所示的对话框。
为这个标记(当前光标位置)加上标签,"WndProc" 标签就是需要返回的位置。当离开这个标记并返回时,选择菜单项"Jump"->"Jump to marked position",或者按"Ctrl+M"快捷键,执行"跳转到标记位置"功能
格式化指令操作数
IDA可以格式化指令使用的常量,因此应尽可能使用符号名称而非数字,从而使反汇编编码更具有可读性。IDA根据被反汇编指令的 上下文、所使用的数据作出格式化决定。对其他情况,IDA一般会将相关常量格式化成一个十六进制常量。
IDA可以提供多种进制显示。将光标移到需要转换进制的常量上,单击右键,所示的上下文菜单。该菜单提供的选项可将常量格式化十进制、八进制或二进制的值。
代码和数据转换
很多工具在进行反汇编的时候可能无法正确区分数据和代码,IDA也不例外,数据字节坑能被错误地识别为代码字节,而代码字节可能被错误地识别为数据字节。有些程序就是利用这一点来对抗静态反汇编的。IDA的交互性使用户可以将某段十六进制数据指定为代码或数据,即利用用脑来区别代码和数据
如果确信某段十六进制数据是一段指令,只要将光标移到其第一个字节的编译位置,执行菜单命令"Edit"->"Code"或按"C"键即可。按"P"键可以将某段代码定义为子程序,并列处参数调用。若要取消定
字符串
数组
IDA有着强大的聚合能力。它可以将一串数据声明变成一个反汇编行,按数据的 形式显示,从而简化反汇编代码清单。
用IDA打开实例Arrays.exe,数组用C语言的描述,代码如下。
static int a[3] = {0x11,0x22,0x33};
汇编代码如下。
.text:00401009 mov edi,dword_4070330[eax]
其中,407030h指向一个数组,如图
将光标移到需要处理的数据处,选择菜单项"Edit"——>"Array"或按 "*" 键,打开数组排列调整窗口
设置完成,数据按1x3的形式排列,如图
.data:00407030 dword_407030 dd 11hh ,22h,33h ; DATA XREF:_main:loc_401009
结构体
在C语言中,结构体(struct)是一种数据结构,可以将不同类型的数据结构组合到一个复合的数据类型中,结构体可以被声明为变量、指针或数组等,从而实现比较复杂的数据结构。
创建结构体
对一些常见的文件类型,IDA会自动加载相应的类型库,例如vc6.0在进行底层分析时,可以增强mssdk(windows.h) ntddk(ntddk.h)等这些类型库中有相应的结构体,用户分析代码时可以直接引用。按Shift+F11快捷键,打开加载类型库窗口(Loaded Tyepe Libraries),在弹出的"Available Type Livbraries" 窗口中选择类型库
此时就可以查看内置的结构体数据结构了。选择"View" -> "Open subviews" ->"Structures"菜单选项,打开结构体管理窗口
枚举类型
可以在反汇编时用IDA动态定义和操作枚举类型(Enumerated Types)。看看下面这段简单的C语言程序,在用IDA进行反汇编后,得到了一些没有意义的数字
//Enumerated.cpp
int main(void)
{
enum weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THUSDAY,
FRIDAY,
SATURDAY,
SUNDAY};
printf("%d,%d,%d,%d,%d,%d,%d",MONDAY,TUESDAY,WEDNESDAY,THUSDAY,FRIDAY,SATURDAY,SUNDAY);
return 0;
}
可以用枚举类型来表示这些数字。执行"View"-->"Open subviews" -->"Enumerations"选项,打开枚举窗口,按"Insert"键插入一个新的枚举类型"weekday".在新建的weekday枚举类型中按"N"键添加枚举成员 "0"对应于"MONDAY","1"对应于"TUESDAY"
OlllyDbg调试器和IDA调试器的更多相关文章
- VS2003"无法启动调试 没有正确安装调试器"的解决办法
VS2003"无法启动调试 没有正确安装调试器"的解决方法 在用VS2003做项目的时候,经常调试程序,但是有时候回出现如下问题“无法启动调试,没有正确安装调试器,请运行安装程序或 ...
- vs2008调试 Release(链接器来生成调试信息)
VS2008 Release 修改配置: 1.项目——>属性——>C/ C++ ——> 常规 ——>调试信息格式——>用于“编辑并继续”的程序数据库(/ZI) 2.项目— ...
- w2wp.exe 已附加有调试器,但没有将该调试器配置为调试此未经处理的异常
一.问题描述 昨天系统联调,用到了VS2010 附件进程,把w2wp.exe 进程添加到vs2010 的调试进程中,这样其他系统访问我们系统,就可以捕获断点进行调试 但是,今天F5 调试的时候,发现直 ...
- BGFX 渲染引擎中着色器代码的调试方法
在实时渲染的图形开发中,着色器代码(Shader)越来越复杂,于是单纯的靠经验和不断试错的开发和调试方法早已不能满足实际需求.使用调试工具进行调试,成为开发中重要的方法.Bgfx 是一款跨平台.抽象封 ...
- 安卓动态调试七种武器之孔雀翎 – Ida Pro
安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...
- ida调试ios应用
收集,整理http://www.cnblogs.com/fply/p/8488842.html 这个文章讲了ios上debugserver相关配置 http://iphonedevwiki.net/i ...
- IDA 调试 Android 方法及简单的脱壳实现
IDA 调试 Android 方法及简单的脱壳实现 标签: android原创逆向调试dalvik 2016-05-24 14:24 9286人阅读 评论(3) 收藏 举报 分类: 原创(25) An ...
- 动态方式破解apk进阶篇(IDA调试so源码)
动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/qq_21051503/article/details/74907449 下面就说关于在IDA中And ...
- Android动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...
- ida 调试 android fork
在使用ida 调试android native代码时经常会碰见fork子进程的情况出现,而运行一个 android_server只能对一个进程进行调试或者attach,而ida 默认端口是23946, ...
随机推荐
- Scanner对象的用法
Java流程控制 想要实现程序与人的交互,我们必须使用Java给我们提供的工具类.就像我最开始写的一篇博客,用Java提供给我们的一个机器人类Robot是控制鼠标键盘的.今天我们学习的是一个可以获取用 ...
- Redis - 数据类型映射底层结构
简介 从数据类型上体现就是,同一个数据类型,在不同的情况下会使用不同的编码类型,底层所使用的的数据结构也不相同. 字符串对象 字符串对象的编码可以是 int.raw 和 embstr 三者之一. em ...
- Awesome GPT 来了!
大家好!我是韩老师. GPT, ChatGPT, OpenAI, LLM(大语言模型)等等技术的出现与应用,改变了许多的行业和人. 长期来看,类 GPT 的技术会对整个世界有着持续的改变. 我们几乎每 ...
- 省选联考2021vp记
卡牌游戏 考虑到将 \(a\) 和 \(b\) 放在一起排序,最后朝上的数字必然在左端点为最小值,右端点为最大值的区间中.这个区间中至少有 \(n-m\) 个是原来的 \(a\),且对于每张卡牌必然要 ...
- Prometheus-Operator使用ServiceMonitor监控配置时遇坑与解决总结
摘要 本文范围: Prometheus-Operator & kube-prometheus 安装:以及在解决使用ServiceMonitor时遇到的坑. Prometheus Operato ...
- CTFShow 反序列化 Web 255-266
CTFShow 反序列化 255-266 漏洞原理 未队用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等后果. 触发条件 unserialize ...
- Vue使用:style动态给css中某样式赋值
template中 <span class="successOrError" :style="{'--fontColor':"green"}&q ...
- 2022-09-22:以下go语言代码输出什么?A:5、B:不能编译;C:运行时死锁。 package main import ( “fmt“ “time“ ) func main
2022-09-22:以下go语言代码输出什么?A:5.B:不能编译:C:运行时死锁. package main import ( "fmt" "time" ) ...
- 2020-10-17:谈一谈DDD面向领域编程。
福哥答案2020-10-17:#福大大架构师每日一题# [答案来自此链接](https://www.jianshu.com/p/fb319d7674ff) 一个通用领域驱动设计的架构性解决方案包含4 ...
- 2020-01-16:我截获了登录token的话,是不是就获得了登录状态,这样就不安全了。如何保证安全?
福哥答案2020-01-06:[知乎答案:](https://www.zhihu.com/question/439602796)首先,Token 一般放在 Header 或者 Cookies 中,Ht ...