x64dbg-内存断点
9unk Lv5

目标程序

程序下载:CRACKME2.7z

解压密码:9unk

任务目标:寻找正确序列号

内存断点原理

x64dbg 可以设置内存访问断点或内存写入断点。原理是改变内存分页的属性(赋予不可访问/不可写属性),这样当访问/写入的时候就会产生异常。x64dbg 捕获异常后,比较异常地址是不是断点地址,如果是就中断,接着用户就可以调试了。

缺点:内存断点由于分页粒度的限制,无法保证精度,最小改变一页的属性。(32位系统内存分页粒度为4K)

优点:内存断点不改变指令,不会被自校验检测到,并且没有个数限制,同时可以对一整段内存下断

观察程序

程序有一个文本框(这时应该考虑到 GetDlgItemTextA)、按钮。

1.jpg

分析步骤

“F9” 运行程序,在命令窗口中输入 “bp GetDlgItemTextA” 设置断点。

2.jpg

3.jpg

继续运行程序,”Ctrl+F9” 返回主模块。

4.jpg

5.jpg

6.jpg

7.jpg

向上分析程序,看到刚才输入的 password “123456”。选择这条命令,右键—>在内存窗口中转到—>crackme2.40217E。

8.jpg

查看下面的内存窗口,可以看到 “123456”。

9.jpg

等一会程序会访问这个 password,用来计算或是比较正确的 password。所以对这个字符串设置内存访问断点。选中内存 1 中的 “123456”—>右键—>断点—>内存,访问—>一次性

10.jpg

“F9” 继续运行程序,看到此时程序断在了计算判断 password 的部分。向上分析程序,可以看到正确消息和错误消息,这里把正确消息的内存地址记一下。

11.jpg

12.jpg

这里主要不是分析程序的算法,所以这里按 “Ctrl+F8” 让程序自动步过。当程序运行完成后,程序停在了 “错误 call” 处,继续进行分析可以找到 “正确 call” 和 “关键跳转”。

13.jpg

14.jpg

后面就可以使用爆破方式破解程序。

15.jpg

16.jpg

refence

[原创]x64dbg入门系列(四)- 内存断点

  • 本文标题:x64dbg-内存断点
  • 本文作者:9unk
  • 创建时间:2020-12-08 11:00:07
  • 本文链接:https://9unkk.github.io/2020/12/08/x64dbg-nei-cun-duan-dian/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!