动态调试OllyDbg工具

1.OllyDbg的界面和配置

动态调试工具: OllyDbg, Windbg x64dbg

静态调试工具: ida

在这里插入图片描述

1.汇编窗口

2.信息窗口

3.数据窗口

4.寄存器窗口

5.栈窗口

02.常用快捷键

OD常用快捷键:

​ F2: 设置断点,只要在光标定位的位置按F2即可,在按一次F2键则会删除断点。

​ F8: 单步步过,每按一次这个键执行一条反汇编窗口中的一条指令,遇到call等子程序不进入其代码

​ F7: 单步步入,功能同单步步过(F8)类似,区别是遇到call等子程序会进入其中,进入后首先会停留在子程序的第一条指令上。

​ F4: 运行到选定位置,作用就是直接运行到光标所在位置处暂停

​ F9: 运行,按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。

​ ctrl+F9: 执行到返回,此命令在执行到一个ret(返回指令)时暂停,常用语从系统部分返回到我们调试的程序部分

03.INT3断点原理

F2断点,CC断点

原理:

1.替换指令,也就是换int3指令

2.od检测到int3指令之后会引发一个异常并且捕获它,这时候程序会中断

3.int3执行给删除掉,还原之前的代码

优点:无限的下int3断点

缺点:很容易被检测

04.INT3断点的反调试和反反调试

反调试(保护这个程序)

反反调试(破解这个程序)

​ FARPROC结构体

​ GetProcAddress函数

​ LoadLibrary函数

int main(){
	FARPROC addr = GetProAddress(LoadLibrary(L"user32.dll"),"MessageBoxA"); //得到MessageBoxA的首地址
	byte byteAddr = *(byte *)addr;
	::MessageBox(NULL,"内容","标题",MB_OK); //弹框
	if(byteAddr == 0xcc){
		printf("检测到非法调试")} else {
		printf("代码正常")}
	getchar();
}

05.硬件断点原理解析

跟调试寄存器有关, DR0~DR7

DR0~DR3: 用于保存我们需要断点的地址

DR4,DR5: 未知

DR6: 状态寄存器

DR7: 控制寄存器

原理:

1.DR0~DR3用来保存我们需要断点的地址

2.DR7寄存器设置相对于控制位

3.当程序运行到这个地址的时候,CPU会向OD发送异常信息,然后程序中断,等待用户操作

优点:速度快,不容易被检测

缺点:最多只能下4个硬件断点

06.内存断点

内存属性

原理:

对这个地址赋予了不可读,不可执行的属性

程序运行到这里之后会产生一个异常

OD捕获这个异常,然后程序中断

优点:不改变汇编代码

缺点

07.消息断点

主要围绕windows的消息机制

08.条件断点

条件断点快捷键: shift+F2

多条件: ebp == 19ff70 && ebx == 19ffcc

09.内存访问一次性断点和条件记录断点

内存访问一次性断点: M 鼠标右键下断点, 运行之后会自动取消

条件记录断点: shift + F4

​ 显示记录值的地方: alt+l

10.Hit trace和Run trace

Hit trace: 实际就是int3 可以跟踪程序执行轨迹

Run trace: 实际就是int3

11.调试符号 以及OD插件编写

kd> dt_eprocess 利用程序的pdb后缀文件可以读取程序源代码

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值