OD的使用学习笔记
学逆向必备工具,但是,由于之前知识储备不足,使用的时候总是看不懂,但这个假期又学了新知识,再来尝试尝试这个工具。
这篇文章可能大致会分会两个部分,一部分为使用OD要用的汇编知识,一部分就是使用OD来分析一个个程序。
需要在意的是OD只能分析32位的程序。
汇编知识
1.标志位
在逆向中,需要在意的标志位只有3个,即cmp指令能修改的那三个:Z/O/C
1 | 首先要知道cmp指令的作用: |
1 | Z标志位(0标志位)--- |
2.test指令
这个指令和and指令类似,对两个操作进行按位 与 操作,但是并不会对操作数造成影响。
这个指令通常用来 test ax,ax,如果eax的值为0,则Z标志位 置1.
3.跳转指令
4.ADC指令
带进位的加法
就是两个操作数在进行加法的时候,还要再加上CF
1 | CF = 1 |
5. SBB指令
带借位的减法
就是两个操作数在进行减法的时候,还要再减去CF
1 | CF = 1 |
6. XCHG指令
数据交换指令
将两个操作数中的值进行交换,操作对象要保证宽度一致,且不能为立即数
1 | MOV AX,1 |
7. MOVS指令
将数据 从 内存-内存 转移
1 | 常见用法: |
8. STOS指令
将 AL\AX\EAX 的值保存到 [EDI] 指定的内存单元
1 | 常见用法: |
9. REP指令
按计数器寄存器(EAX)中的值重复执行后面的指令
1 | MOV ECX,0X11 |
10.MOVZX、MOVSX
容器扩展
当需要将变量转移到更大的容器时,如:将char型数据保存到int型中,汇编层面就通过这两个指令实现
1 | 当转移的是有符号的就使用 MOVSX |
拓展知识:
1 | 当数据从大的类型容器,转移到小的类型容器时,如:int型 到 char型 |
OD知识
1.显示系统异常
1.1Windows系统异常
SEH系统异常–在windows程序中,异常可以看作是一种消息,应用程序发生异常时就触发了该消息并告知系统,系统接收后就找到他的“回调函数”,从而进行异常事件的处理。
当程序运行时,触发系统异常时,OD界面会显示
可直接使用shift+F9,继续走下一步
2.保存修改后的程序
第一步:修改
第二步:找到地址
这里我将call命令修改成jmp命令,然后记住偏移地址0x0044426F,在内存框中找到地址,通过右键–转到–表达式,输入地址
第三步:保存
选中修改内容,右键–复制到可执行文件,OD弹出新的文本框,再右键–保存文件
这样就保存一个修改过后的文件。
3.调试VB程序
4.OD的两种断点—硬件断点和软件断点
说是有这些个寄存器—Dr0~Dr7,他们只用于调试,我们称为调试寄存器。
其中Dr0Dr3四个寄存器用来存放中断地址,Dr4、Dr5保留不用,Dr6、Dr7用来记录Dr0Dr3的属性(如:读、写还是执行,单位是字节、字啊还是双字)。
软件断点就是在程序的在OD本程序内的断点,设置断点后并不会因为重加载而断点消失。(F12下断点)
硬件断点就是在动态链接库也就是那些**.dll**文件中下断点,因为要是通过F12在dll下断点的话,程序重加载的时候,这个断点会消失,只能通过“硬件执行”功能下断点。
4.Delphi调试特点
5.内嵌补丁
6.找到程序的入口
6.1windows控制台程序
1 | 在编写程序时,我们的程序入口就是自己编写的main函数, |