您的位置首页  基金资讯

windbgExploit开发系列教程-Windbg

  • 来源:互联网
  • |
  • 2016-02-05
  • |
  • 0 条评论
  • |
  • |
  • T小字 T大字

恢复执行(并在第一次触发的断点上停止)输入如下:g

$teb或@$teb(TEB的地址)

查看寄存器信息,输入如下:r

输入如下命令在位于0x4110a0地址的指令上设置断点:

还有其它两个用于exit函数的命令:

执行到single-chance和second-chance的异常处将会使Windbg中断 。它们并非是不同的异常类型。执行到异常处时,WinDbg将停止执行 ,并提示该为single-chance异常。 Single-chance意味着异常事件还没被发送到被调试的程序。当我们恢复执行时,WinDbg将异常事件发送到被调试的程序。如果被调试程序不处理异常,WinDbg将再次停止执行并提示此处为second-chance异常。

‘u‘ 是unassemble的缩写并且‘L‘可让指定你想查看信息的行数.列出调用栈(call stack)可以使用k

使用特定的CPU寄存器设置硬件断点,它比软件断点更通用.事实上,它可中断执行或内存访问.硬件断点不会修改任意代码,甚至带有self modifying code。不幸的是,最多只能下4个硬件断点。

软件断点:

查看特定寄存器信息,例如eax和adx,输入:r eax, edx

可以用许多种方式指定范围:

.server tcp:port=1234

ba mode size address passes (deult=1) mode 可以是 ‘e‘ (用于执行 ‘r‘ (用于读取存储器 ‘w‘ (用于写存储器

这里,使用星号来描绘我们已列出的如上所有的变化,并且方框内应指明所选的范围。如果没有选好范围,那么在使用d命令展示一部分数据后,将展示内存部分的数据。

bp 4110a0

打印前三行EIP指向的指令,用命令如下:u EIP L3

本地调试

记录:使用tt命令会执行到函数内,如果你想到达当前函数的ret指令,那么改为使用pt命令。 pt和gu命令的不同点在于,使用pt命令将会在ret指令上中断,使用gu命令将会在ret指令后的下一条指令上中断。

在我们测试EMET5.2时,我们需要忽略single-chance的单步异常(single step exceptions)。用如下命令实现: sxd sse

$peb或@$peb(PEB的地址)

硬件断点

最简单的形式如下,命令格式为:

tt (trace to next return):等价于重复使用’t’命令并且在执行过程中的第一条ret指令上停止执行。 pt (step to next return):等价于重复使用‘p’命令并且在执行过程中的第一条ret指令上停止执行。

至少使用如下两个选项来远程调试程序

通过File→Attach to a Process附加到某一正运行的进程

查看异常类型的列表:sx用sxi命令忽略某一异常:sxi ld使用该命令可让第一次输入的命令失效。

逐步执行有至少三种类型:

pa/ta address: step/trace 到地址。 pc/tc: step/trace 到 下一条 call/int 指令。 pt/tt: step/trace 到下一条 ret (discussed above at point 3)指令。 pct/tct: step/trace 到下一 条call/int 或 ret指令。 ph/th: step/trace 到下一分支的指令。

通过File→Open Executable运行新进程以进行调试

可以调试某一新进程或某一正在运行的进程:

当“int 3”指令被执行时,断点即被触发,那么执行将会被停止,且WinDbg通过重置它的首字节来重置该指令。

这有一些伪寄存器的范例:

这是“go“的缩写.
运行直到到达某地址 (含有代码 ), 输入:g code location

WinDbg内将会在指定的上设置软件断点(如‘bp’),但此处的断点被触发后将会被删除.主要原因是使用‘g’设的是一次性软件断点.

在WinDbg中可支持多种伪寄存器(含有某些值). 用前缀‘$‘来指明其是伪寄存器.在使用寄存器或伪寄存器时,可以添加前缀’@’,这样做可让WinDbg确定该前缀之后的内容为某一寄存器而不是某一符号。

输入 .hh d 来查看其它变量。 ‘d’命令用相同的格式展示数据,正如大多数的d命令那样(或如果不是单一数据则使用db)。

这些命令的(简化)格式为:d [range]

远程调试

在某指令上设置断点时,WinDbg将指令的第一字节保存于内存并用0xCC覆盖它(操作码为”int 3”)。

步进/(命令:t) 该命令中断每条指令的执行.如果执行到call指令或int指令,那么该命令将各自在调用函数的第一条指令或int handler上中断。 步过 (命令: p) 该命令能让每条指令(没有calls或ints,等等)执行后中断,如果你刚好执行到call或int指令,那么会在call或int指令执行后中断 步出 (命令: gu) 该命令(go up) 能让WinDbg恢复程序的执行,并且能在下一条ret指令执行后中断。在exit函数中经常使用到该命令。

1 如果你已在机器A上本地调试某一程序,那么使用如下命令(选择你想要的端口):

这里是包含‘p‘ 和‘t‘命令的不同形式:

$thread或@$thread(当前线程)

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186
友荐云推荐