Windbg 字符串条件断点

Posted mb62d3c286f15ed

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windbg 字符串条件断点相关的知识,希望对你有一定的参考价值。

0x01 前言

  • ​Windbg​​​ 作为​​Windows​​ 下的主流调试器,除了人机交互相比其他调试器略有不足外,其他功能都是十分强大的存在。
  • 在所有的调试器中断点功能都是必不可少的,​​Windbg​​​ 可以使用​​bp​​​ 等命令很方便的对地址和符号下断点,这些都是非常常用的,但是对字符下断点,尤其是​​unicode​​ 字符下断点则用的比较少,但是用的好确实能解决许多问题,比如需要记录和断下一些关键 API 的参数字符等。

0x02 对关键 API 下字符比较断点

  • 如何使字符比较断点断下,使用​​Windbg​​​ 脚本是一种不错的选择(这里的脚本并非​​Python​​​ 而是​​Windbg​​ 自带的能够被解析的脚本,语法简单),这里并不推荐使用命令行,因为在文件中编辑脚本便于检测错误。
  • 首先来看一下选取的可执行文件的例子,这是一个常用的看图软件,使用​​FreeImage​​​ 为核心技术,可以方便的读取图片文件,这里以随机从网上下载的​​test.bmp​​​ 图片作为输入,查看是否调用了系统底层函数​​Kernel32!CreateFileW​​,以及是否能通过参数及时的断下。
  • Windbg

  • 首先在 C 盘的根目录下新建​​commands.txt​​​ 脚本文件以便让​​Windbg​​ 去读取执行。
  • Windbg

  • 之后编写以下脚本,​​/mu​​​ 是指定​​Unicode​​​ 字符;​​$/v:EventName poi(esp+4)​​​ 则是指定别名,​​poi(esp+4)​​​ 表示​​Kernel32!CreateFileW​​​ 的第一个参数,这个需要看具体情况;​​$spat​​​ 函数作为比较函数,这里比较第一个参数是否含有​​bmp​​​ 后缀,也就是刚刚传入的​​test.bmp​​​;​​ad *​​ 表示每次执行一次清空一下别名,最后如果条件成立则打印并且断下。
as /mu $/v:EventName poi(esp+4)
.if ($spat(@"$EventName", "*.bmp*") == 0) ad*; gc .else .echo; du poi(esp+4); ad*
  • 最后输入​​bp KERNEL32!CreateFileW "$$<c:\\\\commands.txt"​​ 让 Windbg 读取脚本文件。
  • Windbg

  • 运行之后查看执行结果发现成功断下,并且传入​​CreateFileW​​ 的第一个参数符合图片路径。
  • Windbg

0x03 官网更为详细的记载以及扩展



以上是关于Windbg 字符串条件断点的主要内容,如果未能解决你的问题,请参考以下文章

windbg断点命中时,其它线程在运行吗

windbg查看内存断点是物理地址还是虚拟地址

在 WinDBG 中使用源代码行号设置断点

windbg-bp bm bu bl bc ba(断点硬件断点)

WinDbg设置托管进程断点

转: windbg-跳过初始断点(调试技巧)