Windbg 字符串条件断点
Posted mb62d3c286f15ed
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windbg 字符串条件断点相关的知识,希望对你有一定的参考价值。
0x01 前言
-
Windbg
作为Windows
下的主流调试器,除了人机交互相比其他调试器略有不足外,其他功能都是十分强大的存在。 - 在所有的调试器中断点功能都是必不可少的,
Windbg
可以使用bp
等命令很方便的对地址和符号下断点,这些都是非常常用的,但是对字符下断点,尤其是unicode
字符下断点则用的比较少,但是用的好确实能解决许多问题,比如需要记录和断下一些关键 API 的参数字符等。
0x02 对关键 API 下字符比较断点
- 如何使字符比较断点断下,使用
Windbg
脚本是一种不错的选择(这里的脚本并非Python
而是Windbg
自带的能够被解析的脚本,语法简单),这里并不推荐使用命令行,因为在文件中编辑脚本便于检测错误。 - 首先来看一下选取的可执行文件的例子,这是一个常用的看图软件,使用
FreeImage
为核心技术,可以方便的读取图片文件,这里以随机从网上下载的test.bmp
图片作为输入,查看是否调用了系统底层函数Kernel32!CreateFileW
,以及是否能通过参数及时的断下。 - 首先在 C 盘的根目录下新建
commands.txt
脚本文件以便让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 读取脚本文件。 - 运行之后查看执行结果发现成功断下,并且传入
CreateFileW
的第一个参数符合图片路径。
0x03 官网更为详细的记载以及扩展
以上是关于Windbg 字符串条件断点的主要内容,如果未能解决你的问题,请参考以下文章