【发布时间】: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