Windbg
作为 Windows
下的主流调试器,除了人机交互相比其他调试器略有不足外,其他功能都是十分强大的存在。Windbg
可以使用 bp
等命令很方便的对地址和符号下断点,这些都是非常常用的,但是对字符下断点,尤其是 unicode
字符下断点则用的比较少,但是用的好确实能解决许多问题,比如需要记录和断下一些关键 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
的第一个参数符合图片路径。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章