【问题标题】:Debug obfuscated by .NET Reactor release with pdb files使用 pdb 文件被 .NET Reactor 版本混淆的调试
【发布时间】:2019-09-09 19:03:55
【问题描述】:

我编译 ASPNET Core 2.2 应用程序,获取 pdb 文件,然后对程序集运行 .NET Reactor 混淆。我拥有所有组件:二进制文件、源代码、pdb 文件。

在 .NET Reactor 运行之前,我可以创建 转储文件 并在 Visual Studio 2017 中使用 .pdb 对其进行调试。 但是在 .NET Reactor 运行之后,我在所有包含的 dll 中得到以下符号状态: “二进制文件未使用调试信息构建。”

此外,.NET Reactor 根本不会更改 pdb。它只是将它们复制到新的目的地。

在这种情况下如何调试混淆的应用程序?

【问题讨论】:

  • 你没有,或者至少你没有符号。如果您已构建映射文件,最好的 .NET Reactor 必须提供 stack trace deobfuscator。这将让您知道问题发生在哪里;要有效地调试它,您需要在非混淆实例上重播该问题。即使 .NET Reactor 提供完整的调试符号也是如此,因为您将调试混淆的二进制文件 - 因为 按设计 包含各种重写以使调试 更难 i>,符号只是问题的开始。
  • 正如我正确理解的那样,.NET Reactor 没有这样的功能,但是 Crypto Obfuscator、Eazfuscator.NET 等其他一些混淆器有吗?混淆器应该生成新的 pdb 文件以适应混淆的 dll。
  • 是的,混淆器可以生成新的符号文件来匹配新的程序集,但这仍然只有有限的价值,如果混淆器做对了它的工作。不可能生成一个符号文件,以某种方式撤消混淆器对代码所做的所有事情,使其再次易于理解——例如,单步执行代码可能会走遍整个地方并输入甚至不存在的方法原来是因为控制流被改变了。如果混淆器所做的只是重命名符号,那么生成新的调试符号就没有问题。

标签: c# asp.net-core obfuscation pdb net-reactor


【解决方案1】:

最新的 .NET Reactor 版本现在能够处理两种 pdb 规范(经典 pdb、便携式 pdb)。

【讨论】:

    【解决方案2】:

    pdb 有 2 种规格。只有较新的可移植pdb 规范存在问题(它在内部导致异常,.NET Reactor 仅复制文件)。

    .NET Reactor 还不支持它。 确保使用"full" 调试信息构建 dll:

    它应该可以解决问题。至于我的情况,为什么我的VisualStudio 会忽略此选项并继续使用'portable',即使选项已满。可以看成是从BSJB开始的:

    目前.NET Reactor 团队已意识到该问题并承诺在下一个主要版本中添加支持。 直到那个尖尝试在设置中使用'full'调试信息。

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      相关资源
      最近更新 更多