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

时间:2016-06-30 17:10:54

标签: vb.net eazfuscator

使用此代码:

SELECT t1.field1
, (SELECT t2.somefield FROM table2 AS t2 WHERE t2.anotherfield = somevalue LIMIT 1) AS t2Val
FROM table1 AS t1

我可以获得未处理异常的类别和行号(在 Dim sf As New StackFrame(0, True) MessageBox.Show("Module: " & sf.GetFileName & " -Line: " & sf.GetFileLineNumber.ToString) 中)

但是,如果我使用EazFuscator(以及其他任何人)对代码进行模糊处理,我会丢失数据:我得到一个NullString,0代表行号。

插入代码:

ApplicationEvents.vb, Sub MyApplication_UnhandledException(...) Handles Me.UnhandledException
没有什么变化。我可以反编译e.message,但线路丢失。如何在混淆代码中获取错误行?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

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

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

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

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