OD与IDA

(1)反汇编窗口
从左到右分别是地址、十六进制的机器码、反汇编代码和注释
(2)信息面板
显示与指令相关的各寄存器的值,API函数调用提示和跳转提示等信息。
(3)数据面板窗口
以十六进制和字符方式显示文件在内存中的数据。
(4)寄存器面板窗口
显示CPU各寄存器的值
(5)栈面板窗口
显示栈的内容,即ESP指向地址的内容。
2.基础操作
(1)设置断点
快捷键F2
使用ALT+B可以查看断点窗口
常用断点
①INT 3断点
设置断点时,改地址处的内容被调试器用INT3指令替换了,此时OD将INT3隐藏,显示出来的仍是中断前的指令。因此处的机器码被替换成CC
也称作CC指令
②硬件断点
使用方法:Breakpoint——>Hardware,onexecution
删除方法:菜单项“Debug”—>“Hardware breakpoint”—>“Delete”
硬件断点和DRx调试寄存器有关。
③内存断点
设置方法:Breakpoint—>Memory,on write
删除方法:Breakpoint—>Remove memory breakpoint
④内存访问一次性断点
在OD中用“Alt+M”可以显示内存,可以看到许多个段,在相应段单击右键出现命令“Set break-on-access”,快捷键是F2。当所在段被读取或执行是就会中断,中断发生后,断点将被删除。
⑤消息断点
设置方法:菜单项“View”—>Windows,选择一条右键单击,执行“Message breakpoint on ClassProc”,出现窗口可选择消息种类。
⑥条件断点
条件断点会在满足一定条件时才会中断。是一个带有条件表达式的普通INT3断点。当调试器遇到此断点时,断点将计算表达式的值,若结果非零或表达式有效,断点生效。
设置方法:快捷键“shift+F2”
-
按寄存器条件中断
-
按存储器条件中断
⑦条件记录断点
除了具有条件断点的作用,还能记录断点处函数表达式或参数的值。也可以设置通过断点的次数,每次符合暂停条件时,计数器的值都将减1。
我们可以在调用的函数处按快捷键"shift+F4",打来条件记录窗口,在"Condition"域中输入要设置的条件表达式,在"Explanation"域中设置一个名称。在"Expression"域中是要记录的内容的条件。"Pause program"(暂停程序)域用于设置OD遇到断电是否中断。“Log VaLue of expression”(记录表达式的值)域用于设置遇到断点时是否记录表达式的值。
设置好运行后,可在"Log data"窗口(快捷键“Alt+L”)查看记录的数据。
(2)查找API函数
快捷键 Ctrl+N
或search for ——Name(label) in current module
(3)Run trace(Run跟踪)
可以把调试程序执行过的命令都保存下来。
使用方法:在Debug选项找到“open or clear run trace”,按钮,可以打开Run trace 窗口,查看记录。
(4)Hit trace
Hit trace可以让调试者分辨哪一部分代码被执行了,哪一部分没有。此方法适用于跳转分支较多的代码,需要了解程序的执行线路。
使用方法:单击右键“Hit trace”—>“Add selection”命令,选中需要监视的代码,执行程序,会在被执行的指令用不同颜色标记。
3.使用时的常见问题
(1)乱码问题
出现这种情况,说明调试器将这段代码当成了数据,没有进行反汇编。
此时我们可以右键“Analysis”—>“Analyse code”或按“Ctrl+A"快捷键,强迫OllyDbg重新分析代码即可。若依旧无法识别,可以右键”Analysis“—>”Remove analysis from module“命令。
(2)快速回到当前程序领空
我们查看代码翻页或定位到其他地方时,若想快速回到当前CPU所在的指令处,还可以双击寄存器面板中的EIP光标移动到要修改的地址上,执行右键”New origin here“(新建EIP)或使用快捷键”ctrl+*"修改。
(4)已经删除了断点,OD重新加载时断点重新出现
将配置文件ollydbg.ini中的相应内容改成"Bachuo UDD files=1"即可解决
(5)在OD反汇编窗口输入"Push E000"会提示未知字符
原因是不能识别是数字还是字母,解决方法是在字母前加一个"0",表示这是数字。
(6)OD出现"假死"现象
用OD调试一些加壳程序,运行到断点时,会出现"假死"现象。解决办法是发开配置文件ollydbg.ini,如果“Restore windows”是一个很大的值,就设置“Restore windows 0”。
(7)微调窗口显示
可以通过"Ctrl+↑"或"Ctrl+↓"对反汇编窗口或数据窗口反对1字节
(8)把call调用改成函数名的形式
例如"call 401496",假设401496h处是amsg_exit函数,将光标停在此处,按"shift+;",会弹出标签框,输入"amsg_exit",所有调用401496h处的call指令都变成"call <amsg_exit>"。
静态分析
1.IDA基本界面

函数列表,一个文件被反编译后所有的函数列表都可以在此窗格中显示;
汇编代码,双击函数可以看到函数对应的汇编代码段
在汇编代码窗口按空格,可以切换汇编代码到流程图模式
其中红线代表判定不成立,绿线代表判定成立
2.常用快捷键
a:将数据转换为字符串
f5:转成伪代码
esc:回退键,倒回上一步操作的视图(只在反汇编窗口有用)
shift+f12:可以打开string窗口,找出所有的字符串
g:跳转到某个地址
/:在伪代码界面写注释
3.IDA调试器
调试器快捷键
F7:单步步进,遇到call跟进
F8:单步步过,遇到call路过
F4:运行到光标所在的行
Ctrl+F7:直到该函数返回时才停止
F9:运行程序
Ctrl+F2:终止一个正在运行的进程
F2:设置断点
4.花指令修改
(1)找到花指令,选中,快捷键d

(2)编辑里找到修改

修改E8(call)为90(nop)
(3)快捷键c

(4)在函数头快捷键P,F5

正确的main函数

(5)保存修改


浙公网安备 33010602011771号