zoukankan      html  css  js  c++  java
  • 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.bmpad * 表示每次执行一次清空一下别名,最后如果条件成立则打印并且断下。
    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 官网更为详细的记载以及扩展

  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/csnd/p/11800491.html
Copyright © 2011-2022 走看看