x64dbg-内存断点
目标程序
程序下载:CRACKME2.7z
解压密码:9unk
任务目标:寻找正确序列号
内存断点原理
x64dbg 可以设置内存访问断点或内存写入断点。原理是改变内存分页的属性(赋予不可访问/不可写属性),这样当访问/写入的时候就会产生异常。x64dbg 捕获异常后,比较异常地址是不是断点地址,如果是就中断,接着用户就可以调试了。
缺点:内存断点由于分页粒度的限制,无法保证精度,最小改变一页的属性。(32位系统内存分页粒度为4K)
优点:内存断点不改变指令,不会被自校验检测到,并且没有个数限制,同时可以对一整段内存下断
观察程序
程序有一个文本框(这时应该考虑到 GetDlgItemTextA)、按钮。
分析步骤
“F9” 运行程序,在命令窗口中输入 “bp GetDlgItemTextA” 设置断点。
继续运行程序,”Ctrl+F9” 返回主模块。
向上分析程序,看到刚才输入的 password “123456”。选择这条命令,右键—>在内存窗口中转到—>crackme2.40217E。
查看下面的内存窗口,可以看到 “123456”。
等一会程序会访问这个 password,用来计算或是比较正确的 password。所以对这个字符串设置内存访问断点。选中内存 1 中的 “123456”—>右键—>断点—>内存,访问—>一次性
“F9” 继续运行程序,看到此时程序断在了计算判断 password 的部分。向上分析程序,可以看到正确消息和错误消息,这里把正确消息的内存地址记一下。
这里主要不是分析程序的算法,所以这里按 “Ctrl+F8” 让程序自动步过。当程序运行完成后,程序停在了 “错误 call” 处,继续进行分析可以找到 “正确 call” 和 “关键跳转”。
后面就可以使用爆破方式破解程序。
refence
- 本文标题:x64dbg-内存断点
- 本文作者:9unk
- 创建时间:2020-12-08 11:00:07
- 本文链接:https://9unkk.github.io/2020/12/08/x64dbg-nei-cun-duan-dian/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!