x64dbg-硬件断点
目标程序
程序下载:CRACKME2
解压密码:9unk
任务目标:寻找正确序列号
硬件断点原理
在寄存器中,有一些寄存器是用于调试的。人们把他们称为调试寄存器,调试寄存器一共有 8 个名字分别从 Dr0-Dr7。所以我们也把调试寄存器简单的称为 Drx。
- 对于Dr0-Dr3的四个调试寄存器,他们的作用是存放中断的地址,因此 x64dbg 只能设置 4 个硬件断点。
- 对于Dr4,Dr5这两个寄存器我们一般不使用他们,保留。
- 对于Dr6,Dr7这两个寄存器的作用是用来记录你在Dr0-Dr3中下断的地址的属性,比如:对这个401000是硬件读还是写,或者是执行;是对字节还是对字,或者是双字。
优点:不会改变指令,不会被自校验检测,精确到字节
缺点:只能建立4个
观察程序
程序有一个文本框(这时应该考虑到 GetDlgItemTextA)、按钮。
分析步骤
“F9” 运行程序,然后再使用 “ctrl+N” 查找 Crackme2.exe 的 GetDlgItemTextA。
双击 “GetDlgItemTextA”,右键断点—>设置硬件断点(执行)。此时可以看到 DR0 调试寄存器,存储了第一个断点的地址。
继续运行程序,此时程序断在了 “GetDlgItemTextA” 处。
“ctrl+F9” 运行程序到返回处,继续单步运行返回到主模块中。
向上分析程序,看到刚才输入的 password “123456”。选择这条命令,右键—>在内存窗口中转到—>crackme2.40217E。查看下面的内存窗口,可以看到 “123456”。
选中内存 1 中的 “123456”—>右键—>断点—>硬件,访问—>字节。此时可以看到 DR1 调试寄存器,存储了第一个断点的地址。
“F9” 继续运行程序,看到此时程序断在了计算判断 password 的部分。向上分析程序,可以看到正确消息和错误消息,这里把正确消息的内存地址记一下。
这里主要不是分析程序的算法,所以这里按 “F8” 让程序执行到 ret 指令处。继续执行程序,分析可以找到 “正确 call” 和 “关键跳转”。
后面就可以使用爆破方式破解程序。
- 本文标题:x64dbg-硬件断点
- 本文作者:9unk
- 创建时间:2020-12-09 11:00:07
- 本文链接:https://9unkk.github.io/2020/12/09/x64dbg-ying-jian-duan-dian/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!