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 官网更为详细的记载以及扩展

Windbg 字符串条件断点的更多相关文章

  1. CVE-2015-1641 Office类型混淆漏洞及shellcode分析

    作者:枕边月亮 原文来自:CVE-2015-1641 Office类型混淆漏洞及shellcode分析 0x1实验环境:Win7_32位,Office2007 0x2工具:Windbg,OD,火绒剑, ...

  2. Windows开发中一些常用的辅助工具

    经常有人问如何快速的定位和解决问题,很多时候答案就是借助工具, 记录个人Windows开发中个人常用的一些辅助工具.   (1) Spy++ 相信windows开发中应该没人不知道这个工具, 我们常用 ...

  3. Windbg:如何给字符串下条件断点

    因为Windgb支持MASM语法,字符串的比较方法有$scmp和$sicmp.用法和c中的字符串比较方法一致.在需要比较字符串成员变量的时候,遇到了点问题.因为字符串成员变量无法直接获取字符串内容.p ...

  4. windbg条件断点总结

    1 . 条件断点是断点命令 ( bp 或者 bu ) 与j命令或者.if命令一起使用的,后面跟着一个gc命令   0:000> bp Address "j (Condition) 'O ...

  5. WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS

    dg (Display Selector) dg命令显示指定选择器的段描述符. dg FirstSelector [LastSelector] 参数: FirstSelector指定要显示的第一个选择 ...

  6. Windbg 实践之结合条件断点

    Case 1 1.bu USER32!PostMessageW "r $t0=@$t0+1;.printf\"PostMessageW Call Count:%d\",@ ...

  7. Windbg使用简明指南

    第一章 准备 1.1.    环境配置 _NT_DEBUGGER_EXTENSION_PATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 _NT_SY ...

  8. windbg常见命令

    WinDbg WinDbg支持以下三种类型的命令: ·        常规命令,用来调试进程 ·        点命令,用来控制调试器 ·        扩展命令,可以添加叫WinDbg的自定义命令, ...

  9. WinDbg调试命令汇总

    一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm 可以 ...

随机推荐

  1. Prometheus自定义指标

    1.  自定义指标 为了注册自定义指标,请将MeterRegistry注入到组件中,例如: public class Dictionary { private final List<String ...

  2. Pytorch编程记录

    搭建网络的方式: 1.用sequential方式搭建,只能适用于线性网络 2.用forward和init方式搭建

  3. 2019 GDUT Rating Contest I : Problem B. Teamwork

    题面: 传送门 B. Teamwork Input file: standard input Output file: standard output Time limit: 1 second Memor ...

  4. Masterwoker模式

    1 public class Task { 2 3 private int id; 4 private int price ; 5 public int getId() { 6 return id; ...

  5. incubator-dolphinscheduler 如何在不写任何新代码的情况下,能快速接入到prometheus和grafana中进行监控

    一.prometheus和grafana 简介 prometheus是由谷歌研发的一款开源的监控软件,目前已经贡献给了apache 基金会托管. 监控通常分为白盒监控和黑盒监控之分. 白盒监控:通过监 ...

  6. RabbitMQ 入门 (Go) - 2. 发布和接收消息

    本文我将使用 Go 语言在 RabbitMQ 上发布和接收消息. Go 的标准库本身并没有 RabbitMQ 的原生绑定,但是有一个第三方库确能够支持 RabbitMQ,它的源码在 https://g ...

  7. java进阶(38)--线程安全

    文档目录: 一.概念 二.解决方案 三.举例说明 ---------------------------------------分割线:正文------------------------------ ...

  8. python3使用cv2对图像进行基本操作

    技术背景 在机器视觉等领域,最基本的图像处理处理操作,可以通过opencv这个库来实现.opencv提供了python的接口,所需安装的库为opencv-python,但是在库的导入的时候一般用的是i ...

  9. windows一些知识

    宽字节 1.什么是ASCII码? 一张存储了字母大小写与一些符号的表,用一个字节表示,最高位不使用,最多只能存储128个符号或字母,但世界上有很多种语言,这远远不够 2.什么是扩展ASCII码? 把最 ...

  10. [状压DP]关灯问题II

    关 灯 问 题 I I 关灯问题II 关灯问题II 题目描述 现有n盏灯,以及 m m m个按钮.每个按钮可以同时控制这 n n n盏灯--按下了第 i i i个按钮,对于所有的灯都有一个效果.按下i ...