65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 调试:从正在运行的托管代码进程中转储所有字符串

starIconstarIconstarIconstarIconstarIcon

5.00/5 (10投票s)

2009年10月1日

CPOL

3分钟阅读

viewsIcon

62535

downloadIcon

566

高级调试进程。

引言

有时,我们想知道进程中有哪些关键信息,例如银行账号或信用卡号,因为我们需要保护这些信息免受恶意人员的侵害,或者仅仅是为了简单地探索其中有哪些内部字符串。这个任务非常简单。在图中,我们揭示了密码中隐藏的文本。该过程适用于所有 .NET 运行进程,包括 IIS 工作进程。

最终输出图

System.String 类是 .NET 世界中最常用的类之一。我无法想象一个不使用它的简单或企业软件。

我们将使用 Windows Debugger 和一个简单的脚本来完成这项任务。

  1. 启动 Windbg(Microsoft 支持部门使用的首选工具)。如果您没有它,请从 Microsoft 网站下载。
  2. 将文件 %windir%\Microsoft.NET\Framework\v2.0.XXXXXX\SOS.DLL 复制到 %programfiles%\Debugging tools for windows\
  3. 执行邮件中附带的sampleApp.exe(这是一个示例应用程序)。
  4. 填写用户名和密码,例如:用户名=renepa,密码= www.xtreemcorp.com
  5. 按确定按钮。
  6. 返回 Windbg 并按 F6 附加文件。
  7. 在进程列表中,选择SampleAPP.exe
  8. 在 Windbg 中,输入命令:.load sos,它允许加载SOS.DLL扩展,这是一个 .NET 调试辅助文件。它包含许多用于调试 .NET 应用程序的新命令和功能。
  9. SOS.DLL 包含一个非常有趣的命令,!dumpheap,它允许转储内存中的所有类。它遍历 .NET Heap 并转储所有已分配的对象。它还可以用于检测高内存使用率。我们将在其他文章中对此进行解释。
    1. !dumpheap –type System.String 此命令允许我们转储内存中所有 System.String 类的内存地址。输出将是

      请看此输出:Address (指向 String 类的指针)、MT=Method Table,它是指向 System.String 支持的方法列表的指针(我们此时不使用 MT),以及该类的Size

    2. !dumpheap –type System.String –short:此命令仅显示内存中当前 string 的内存地址。
    3. !do[memoryaddress]:此命令将从内存中转储对象。例如,让我们探索第二个 string !do 014d11c8

    4. 该字符串是:C:\blog\dumpstrings\SampleAPP\SampleAPP\bin\Debug\。但我们只关心char本身,而不是完整的类。字符在哪里?查看类后,我们发现m_first char位于STRING MEMORY ADDRESS+c(十六进制值)。我们可以通过查看内存地址014d11c8+c=014d11d4来确认这一点。

    5. 这正是我们想要的。string 的第一个char位于:字符串类地址 + c。请在内存中查看,每个 C 字母的char是**43 00**。这代表什么?Unicode?是的。
    6. Windbg 允许通过 !dumpheap –type System.String –short 转储的每个内存地址进行迭代。
    7. 将所有内容组合到一个简单的 Windbg 命令中
      1. .foreach (obj {!dumpheap -type System.String -short}) {.printf "\n%mu",${obj}+c}
      2. .foreach = 类似于 C# 的 foreach
      3. 每个 String 的内存地址将被临时存储在 obj 中,obj 是一个取决于迭代的临时变量。
        1. .printf “\n%mu” 打印一个以 NULL 结尾的 Unicode 字符数组。
        2. ${obj}+c = 字符串中第一个 char 的地址。请记住为什么我们要将 sum +c 加到 string 指针上。
    1. 我们得到了本文第一张图的内容。

历史

  • 2009年10月1日:初稿发布
  • 2011年11月3日:文章更新
© . All rights reserved.