2022-06-30极速赛车注册地址

断点可以有两种类型:软件和硬件。我们已经遇到了第一个。程序中可以有任意数量的它们。对于他们的工作,他们修改了可执行进程的内存,也就是在应该break的地方,调试器记住了汇编指令,用int 3代替。由于软件断点改变了内存,不能到处设置。这是它的主要缺点。

设置软件断点的主要命令是 极速赛车注册地址。要获取设置点列表,请使用 bl 命令,要删除,请使用 bc 命令,其参数是断点索引。星号作为参数删除所有断点。be 和 bd 命令分别打开和关闭断点。

硬件断点总是有四个,它们的数量与处理器容量无关(处理器有八个调试寄存器(DR0 - DR7),但只有前四个可用于存储断点地址)。

硬件中断可以放置在进程内存中的任何位置。因此,它们不会缺少软件错误。其余寄存器设计用于存储访问条件——断点触发,例如读、写、执行。少量是硬件中断的主要缺点。要设置硬件断点,请使用带有三个参数的 ba 命令:访问类型、大小和地址。

到目前为止,我们已经介绍了一小部分 WinDbg 调试器内部语言命令。你肯定注意到了他们的记录。调试器语言中有三种类型的命令:

  • 内置命令用于调试进程,编写时不带前导字符,此类命令包括 g、极速赛车注册地址、bd;
  • 元命令控制调试器的工作,它们前面有一个点符号,例如.reload、.symfix、.cls;
  • 从外部 DLL 加载的扩展命令前面有一个感叹号,例如 !heap、!dh。

地址搜索

让我们尝试快速找到一种保护机制,并在不深入研究其功能细节的情况下,完全切断保护。让我们记住原始密码位于内存中的哪个地址。让我们看一下存储密码的 .rdata 部分的转储。原始密码 myGOODpassword 位于偏移量 0x402100。让我们尝试在内存中显示位于该地址的数据:

有大量用于显示内存内容的命令。我们使用 dc 是因为它显示双字值和 ASCII 字符。

我们看到了什么?未初始化的数据。以前(在 Vista 之前),代码挖掘者更容易。Windows 将图像加载到虚拟内存中的编译地址。要检查,在 Windows XP 下多次运行应用程序(使用适当的编译器构建)就足够了,在两次启动之间您需要重新启动系统,因为没有它,“十”将在相同的地址加载相同的应用程序并使用相同的 SoftICE mod -u 命令比较接收到的模块的开头地址。因此,这些部分也位于相同的地址。现在我们必须自己寻找 .rdata 部分,不是在磁盘上,而是在内存中。说起来容易,做起来更容易!

让我们找出我们的模块在内存中的地址。为此,在调试器中,输入 lmf m passcompare1(第二个参数是必须确定其地址的模块的名称)。结果,在我的电脑上,我得到了:

因此,我们模块的开头位于 0xCF0000。每次重新启动系统后,特定的应用程序模块都会映射到不同的地址。现在让我们显示我们模块的内存映射,有关 PE 文件所有部分的信息:!dh passCompare1。该命令的输出非常庞大。

!dh 有点类似于 SoftICE 的 map32 命令,前者提供了更多细节。在输出中找到目标 .rdata 部分的描述:

这里我们感兴趣的是第四行——虚拟地址。现在您可以找到 .rdata 在内存中的位置,为此您需要添加模块的起始地址和段的虚拟地址。让我们看看里面有什么:

已经更温暖:可读的字符。让我们更深入地了解该部分并打印出地址范围:

这是我们的密码 0xCF2100!进程内存转储:

 

windbg 调试
找到地址

对齐输出,以便我们的密码从行首显示。为此,将 8 添加到当前地址 0xCF2100 - 要偏移的字符数。这将是他的实际地址。让我们检查一下我们的假设: