断点原理解析
1、INT3断点
也就是F2断点,CC段点
这里我们用OD打开一个文件,下断点
然后我们用CE打开,然后手动添加地址,输入00C31330,将数值转换为16进制显示,类型为字节,如下图
原理: 1、替换指令,用int3指令
2、od检测到int3指令之后会引发一个异常并捕获它,这是程序就会中断;
3、删除int3指令,还原之前的代码
优点:可以下无数个int3断点
缺点:很容易被检测到(如果将断点下在函数的内部或者末尾,例如可以将断点下在函数入口的下一行,就可以躲过检测了)
反调试:保护程序 反反调试:破解程序
FARPOC结构体
GetProAddress函数 检索指定的DLL中输出库函数地址
LoadLibrary函数
2、硬件断点
和调试寄存器有关,DR0-DR7
DR0-DR3:用来保存我们需要断点的地址
DR4-DR5:官方没有说
DR06:状态寄存器
DR7:控制寄存器
原理:
1、用0-3,记住我们需要断点的地址
2、用7,用来设置相应的控制位
3、程序运行到那个地址,CPU就会向OD发送异常信息,程序就中断了,等待用户操作
优点:速度快,不容易被检测(没有修改原来的代码,用的是寄存器)
缺点:最多只能下4个硬件断点(只有0-3是保存地址的)
3、 内存断点
前提知识:内存属性3点Read、Write、Execute
原理:1、对这个地址赋予了不可读、不可写、不可执行的属性
2、程序运行到这里会产生一个异常
3、OD捕获异常,程序中断
优点:不改变汇编代码
4、消息断点
5、条件断点
带条件的int3
在要断的地方,shift+F12
在这里插入图片描述