OD与IDA

动态分析

1.OD界面

 

 

 

(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)保存修改

 

 

 
posted @ 2022-06-23 09:33  e1ectronic  阅读(821)  评论(0)    收藏  举报