逆向学习之路 -- 《加密与解密》读书笔记 -- 调试篇

动态分析技术

用户模式: 调试用户模式应用程序的调试器,工作在Ring 3级,eg. OllyDbg、x64dbg、Visual C++  etc.

内核模式: 能调试操作系统内核的调试器,eg. WinDbg

 

OllDbg 调试器(简称“OD”) 是由 Yuschuk(www.ollydbg.de)编写

 

 

 

 按F3 打开一个EXE文件

C 默认当前窗口是CPU窗口; 

包含5个面板窗口,分别是:

 

1. 反汇编面板(Disassembler window)显示被调试程序的代码,有4列,分别是(Address)、十六进制的机器码(Hex dump)、反汇编代码(Disassembly)和注释(Comment).在最后一列注释中显示了相关API参数或运行简表。

 

2. 信息面板(Information window) 将显示与指令相关的各寄存器的值、API函数调用提示和跳转提示等信息。

3. 数据面板(Dump window) 以十六进制和字符方式显示文件在内中的数据。要显示指定内存地址的数据,可单击右键快捷菜单中"Go to expression"命令或按“Ctrl+G”快捷键,打开地址窗口,输入地址。

  

4. 寄存器面板(Registers window) 显示CPU各寄存器的值,支持浮点、MMX和3DNow!寄存器。可以单击右键或窗口标题来切换显示寄存器的方式。

 

 

  

5. 栈面板(Stack window) 显示栈的内容,既ESP执行地址的内容。讲数据放入栈的操作称为入栈(push),从栈中取出数据的操作称为出栈(pop)。栈窗口非常重要,各API函数和子程序都利用它传递信息和变量等。

 

 

 

 

加载目标文件进行调试

选项-调试选项-事件修改为“WinMain"

 

 

“F3” 载入文件

 

 

寄存器面板显示的值

 

EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI和EIP,他们统称为32位寄存器

ESP为栈指针,指向栈顶,右下角的栈面板上显示了栈的值

 

EIP 指向当前将要执行的指令,按一下“F7”讲执行下一条命令

PS: “F7” 建 和“F8”键的主要区别在于,遇到callloop等指令,按“F8”键会路过,按“F7”键会跟进。这里我理解的是F7是仔细读取,看到Call指令深入细读取。F8是粗略读取,不会对Call指令进行深挖。

 ctrl + * 可以设定 EIP指针点(此处为新EIP)按F7后将从新的指针EIP位置继续往下执行

- (减号键) 或者 esc  回看之前但不跟踪代码

需要连续按“F7”和“F8” 可以使用 Ctrl + "F7" , Ctrl + "F8"  (需要按ESC或者 F12才能中止或者遇到其他断点时停止)

ctrl + “F9”  会在遇到的第一个返回命令处(ret、retf或iret),如果此时按"F7"将会跳过整段代码回到Call之前的下一行

e.g  比如从 004013FA  语句按“F7”,因为有call就会进入子程序

# 先按ctrl + * 指定EIP 为004013FA ,然后接着按“F7”,就会进入子程序

 

 

# 按 Ctrl + F9

 

 

 如果,在按F7将脱离 这部分的读取,并跳出刚进入的call里面。注意这里的Ctrl + F9 遇到ret指令是暂停还是路过,可以设置,如下:

 

 

ctrl + F2 重新载入程序

F2,设置断点后用Alt+B 查看设置的断点明细

 

 

 

 

 

 

P23

posted @ 2020-09-03 10:41  Cong0ks  阅读(235)  评论(0编辑  收藏  举报