3

使用此代码:

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

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

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

插入代码:

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

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

4

2 回答 2

6

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

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

于 2016-06-30T17:24:28.687 回答
0

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

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

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

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

于 2018-12-12T20:10:05.620 回答