逆向学习之路 -- 《加密与解密》读书笔记 -- 调试篇
动态分析技术
用户模式: 调试用户模式应用程序的调试器,工作在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”键的主要区别在于,遇到call、loop等指令,按“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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2018-09-03 win10 自己DIY的arp绑定小脚本