1、ollydbg集成反汇编分析、十六进制编辑、动态调试等多种功能,缺点:无法调试内核(与SoftCE和WinDbg相比)
快捷键 | 功能 | 说明 |
F8 | 单步执行 | 遇到函数调用指令不跟入(step over) |
F7 | 单步执行 | 遇到函数调用指令跟入(step in) |
F2 | 设置断点 | 在一条指令上按F2键将设置断点,再按一次将取消断点 |
F4 | 执行到当前光标所选中的指令 | 在遇到循环时可以方便地使用F4键执行到循环结束后的指令 |
F9 | 运行程序 | 运行程序直到遇到断点 |
Ctrl+G | 查看任意位置的数据 | 这个功能键非常有用,在指令区、栈区、内存区都可以使用,能方便地查看任意位置的指令和数据 |
2、SoftICE(In Circuit Emulator)实体电路模拟器,德高望重的调试器,工作在ring0级,可调试驱动等内核对象,截获CPU所有动作的设备。缺点:暴力中断所有进程。
Compuware SoftCE Driver Suite插件
setting->general :Initialization输入如下命令可以调试界面
Faults off;set font 2;lines 44;data 3;dd; dex 3 ss:esp;data 0;wc 20;code on; x ;
命令 | 解释 |
Faults off | 关闭错误提示。SoftICE在加载进程时总是会发出一些错误警告 |
set font 2 | 设置2号字体。SoftICE有3种字体,默认情况为小号字,2号字体为中号字 |
Lines 44 | Lines命令用于设置界面显示的行数,显示范围是25~128,这里总共显示44行 |
data 3 | 打开3号窗口 |
Dd | 按照DWORD显示数据 |
dex 3 ss:esp | 在3号窗口中显示栈信息 |
data 0 | 设置0号窗口(命令输入窗口)为当前窗口 |
wc 20 | 代码窗口占20行 |
Code on | 显示机器代码 |
X | 显示调试界面 |
1)开始菜单->Start SoftICE启动批处理文件ntice.bat. 运行SoftICE
2)开始菜单->Symbol Loader启动装载界面,选择要装载运行的PE文件。点击装载运行即可
3)Ctrl+D激活SoftICE,调出调试界面
功能 | 命令 | 解释 |
单步执行 | t或F8 | step into,单步执行,遇到函数进入执行 |
p或F10 | step over,单步执行,遇到函数不跟入 | |
p ret或F12 | step out,执行到当前函数结束 | |
执行到指定位置go | g[地址] | 如不跟地址,将把控制权交还进程持续执行;如跟地址,则执行到指定地址所在的指令后停下 |
断点命令 | bl | 列出当前所有断点(breakpoint list) |
be[断点ID|*] | 激活断点,其中,断点ID可以是多个,用空格或逗号隔开,如果用*,则激活所有断点(breakpoint enable) | |
bd[断点ID|*] | 禁用断点,参数同上(breakpoint disable) | |
bc[断点ID|*] | 清除断点,参数同上(breakpoint clear) | |
bpx[地址|函数名] | 为指定的地址或者API函数下断点 | |
bpm[数据类型][地址][访问类型] | 内存断点。数据类型可以是b字节、w字(双字节)、d双字(四字节);访问类型可以是r只读、w写、读写 |
功能 | 命令 | 说明 |
数据显示(Display) | db[地址] | 按照字节模式显示内存数据[display byte] |
dw[地址] | 按照字(双字节)模式显示内存数据(display word) | |
dd | 按照双字(四字节)模式显示内存数据(display dword) | |
ds | 按照短整型模式显示内存数据(display short) | |
dl | 按照长整型模式显示内存数据(display long) | |
数据编辑(Edit) | eb[地址][数据] | 按字节模式将数据写入内存任意地址(edit byte) |
ew[地址][数据] | 按字模式将数据写入内存任意地址(edit word) | |
ed[地址][数据] | 按双字模式将数据写入内存任意地址(edit dword) | |
es[地址][数据] | 按短整型模式将数据写入内存任意地址(edit short) | |
el[地址][数据] | 按长整型模式将数据写入内存任意地址(edit long) | |
栈帧显示 | stack | 显示当前栈帧信息 |
编辑寄存 | r[寄存器名][值] | 修改或查看寄存器的值,如reax 0 |
反汇编 | u[地址] | 对指定地址的二进制进行反汇编并显示 |
Ctrl+D在操作系统和SoftICE之间切换控制权
3、WinDbg
介于OllyDbg和SoftICE之间,比较温和的调试器,可以调试内核,但却不像SoftICE那么暴力。
功能 | 命令 | 说明 |
单步调试 | t或F11 | 单步,遇到函数跟进(step into) |
p 或F10 | 单步,遇到函数跳过(step over) | |
Shift+F11 | 跳出当前函数(step out) | |
执行到指定位置(Go) | g[地址函数名] | 持续执行到指定位置的指令 |
gh[地址函数名] | 持续执行时,如果遇到异常则中断 | |
gn[地址函数名] | 持续执行时,即使遇到异常也忽略 | |
断点功能(Break Point) | bl | 列出已设置的断点。显示结果中,第一列为断点的ID;第二列为断点当前的状态;e表示断点处于活动状态(enable),d表示断点暂时被禁用;第三列为断点的位置(break point list) |
be[断点ID] | 激活断点(breakpoint enable) | |
bd[断点ID] | 禁用断点(breakpoint disable) | |
bc[断点ID] | 清除断点(break point clear) | |
bp[地址|函数名] | 设置断点。如不指定地址,则在当前指令上下断点。注意,这里介绍的是最基础的断点方式,WinDbg中可以结合地址、函数名、消息等各种条件设置很复杂的断点。此外bu、bm等命令也可以设置断点 |
功能 | 命令 | 说明 |
数据显示(display) | d[地址] | 显示内存数据,默认情况下按照字节和ASCII显示,即等同于DB命令。如果修改了显示模式,再次使用时则与最后一次数据显示命令所使用的显示模式相同 |
db[地址] | 按照字节模式显示内存数据(display byte) | |
dd[地址] | 按照双字模式显示内存数据(display dword) | |
dD | 按双精度浮点数的模式显示内存数据,注意这条命令和前面一条命令是区分大小写的(display Double Float) | |
da | 按ASCII模式显示(display ASCII) | |
du | 按Unicode模式显示(display Unicode) | |
ds | 按字符串模式显示,注意,在没有‘\0’作为字符串结束时,不要轻易用这条命令打印内存,否则WinDbg会将遇到的第一个NULL前的东西都打印出来(display String) | |
dt | 套用已知的数据结构模版(structure)显示内存。这个命令很有用,例如,在调试堆时可以直接用这个命令把内存按照堆表的格式显示出来。关于这条命令的详细用法,请参照WinDbg自带的帮助文档(display Type) | |
数据编辑(Edit) | e[地址][数据] | 修改任意内存地址的值 |
Eb' | 以字节形式写入 | |
ed[地址][数据] | 以双字形式写入 | |
ea[地址][数据] | 以ASCII字符形式写入,注意,ASCII字符串需要加双引号 | |
eu[地址][数据] | 以Unicode字符形式写入,注意,Unicode字符串需要加双引号 | |
栈帧的显示 | k[x] | 由栈顶开始列出当前线程中的栈帧,x为需要回溯的栈帧数 |
kb[x] | 栈帧回溯命令带上‘b'后,可以额外显示3个传递给函数的参数 | |
寄存器的显示(Register) | r[寄存器名] | r命令显示当前所有寄存器值,也可以用来显示指定寄存器的值,例如,reax就只显示EAX的值 |
模块显示(List Module) | lm | 列出当前已经读入的所有模块,如动态链接库(list module)等 |
反汇编功能 | u | 反汇编当前指令后的几条指令并显示 |
u[起始地址] | 从指定的地址开始反汇编 | |
u[始址][终址] | 反汇编指定的地址范围区间的机器代码 |
4、IDA Pro简介
反汇编软件,也可以做一些简单的动态调试(反汇编,逆向)
空格可以在汇编代码和图形显示间切换。
IDA可以把标注好的函数名、注释等导入OllyDbg
快捷键 | 功能 |
: | 为当前指令添加全文交叉引用的注释 |
n | 定义或修改名称,通常用来标注函数名 |
g | 跳转到任意地方观察代码 |
Esc | 返回到跳转前的位置 |
D | 分别按字节、字、双字的形式显示数据 |
A | 按照ASCII形式显示数据 |
5、二进制编译器
十六进制编辑软件可以打开任意的二进制文件
UltraEdit、Hex Workshop和WinHex和010 editor
6、VMware
虚拟系统,镜像恢复,隔离物理机
7、python
快速开发