使用此代码:
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,但线路丢失。如何在混淆代码中获取错误行?
答案 0 :(得分:6)
不,这是不可能的,这是有意的。未处理的异常是潜在攻击者的信息来源。通常,在第一轮测试通过后,您应该只对生产构建应用模糊处理。不要尝试调试混淆的程序集,它专门用于防止调试,等等。
我应该补充一点,您无法获取信息的真正原因是,混淆过程已从程序集中删除了调试符号。只要您有一个有效的装配PDB文件,就应该显示该信息。
答案 1 :(得分:0)
您可以在堆栈跟踪中获取行号。它们存储在.pdb
文件中。默认情况下,Eazfuscator.NET通过使.pdb
文件基本上为空来清除它们。这就是为什么看不到混淆程序集的行号的原因。
但是您可以指示Eazfuscator.NET处理.pdb
文件,以便保留行号:
<Assembly: Obfuscation(Feature:="debug [relative_file_paths secure]", Exclude:=False)>
一旦该指令到位,您将在混淆的程序集的堆栈跟踪中看到这些行。感谢secure
标志,.pdb
文件保持加密状态,因此不会造成安全风险。