如何获取混淆的 .NET 代码中的错误行号?

How to get line number of error in obfuscated .NET code?

使用此代码:

 Dim sf As New StackFrame(0, True)
 MessageBox.Show("Module: " & sf.GetFileName & " -Line: " & sf.GetFileLineNumber.ToString)

我可以获得 Class 和发生 未处理的异常 的行号(在 ApplicationEvents.vb, Sub MyApplication_UnhandledException(...) Handles Me.UnhandledException 中)

但是如果我使用 EazFuscator(可能还有其他任何方法)混淆代码,我会丢失数据:我得到一个 NullString 和 0 作为行号。

正在插入代码:

<Assembly: Obfuscation(Feature:="encrypt symbol names with password XXXX", Exclude:=False)>

没有任何变化。我可以反编译 e.message、,但是行丢失了 。如何在混淆代码中获取错误行?

不,这是不可能的,这是有意为之的。未处理的异常是潜在攻击者的信息来源。通常,只有在第一轮测试通过后,您才应该对生产构建应用混淆。不要尝试调试混淆的程序集,它被混淆是为了防止调试等。

我应该补充一点,您无法获取信息的真正原因是调试符号已被混淆过程从程序集中剥离。只要您的程序集具有有效的 PDB 文件,就应该显示该信息。

您可以在堆栈跟踪中获取行号。它们存储在 .pdb 个文件中。默认情况下,Eazfuscator.NET 通过使 .pdb 文件基本上为空来清理它们。这就是为什么您看不到混淆程序集的行号的原因。

但您可以指示 Eazfuscator.NET 处理 .pdb 个文件,以便保留行号:

<Assembly: Obfuscation(Feature:="debug [relative_file_paths secure]", Exclude:=False)>

指令就位后,您将在混淆程序集的堆栈跟踪中看到这些行。由于 secure 标志,.pdb 文件保持加密状态,因此不会造成安全风险。