2010-03-05 113 views
11

我们正在考虑在将代码发布给客户之前对其进行混淆。我们想知道它对技术支持的影响。客户可以向我们提供有意义的堆栈跟踪还是会被混淆?混淆器和技术支持

我期待听到您的经验。提前致谢。

回答

9

您将得到混淆堆栈跟踪。但混淆器可以生成将混淆名称映射到真实名称的映射文件。您必须将这些映射文件保存在安全的地方,并且可以在需要时使用它们再次“消除混淆”堆栈跟踪。

在技术支持的情况下 - 您可以创建一个简单的Web界面,其中技术支持人员可以粘贴堆栈跟踪。这种方式只有Web服务器需要访问映射文件,因此它可以恢复原始堆栈跟踪。

这里有两个链接解释与Dotfuscator的模糊处理过程:

http://www.preemptive.com/images/stories/dotfuscator_documentation/Dotfuscator/The_Map_File.html

http://www.preemptive.com/images/stories/dotfuscator_documentation/Dotfuscator/Decoding_Obfuscated_Stack_Traces.html

+2

如上所述,大多数工具都可以使用去模糊堆栈跟踪(例如http://www.ssware.com/cryptoobfuscator/obfuscator-net。htm) –

+0

我有时会创建一个Web服务来接收崩溃报告。用户可以提交“提交错误报告”按钮,并且可以传输堆栈跟踪和其他有关程序状态的有用信息,而不会有堆栈跟踪以错误的文本格式编码的风险(因为许多混淆器使用Unicode字符作为类/方法名)。 –

1

如果堆栈中的方法在您的版本中被混淆,您将在任何堆栈跟踪中获得混淆的方法名称。

如果您在代码中添加了任何内容以帮助您找出涉及的方法,潜在的黑客可以使用该信息来更好地理解您的代码。

一个常见的策略是只对一些代码进行混淆,包括(但不限于)执行许可检查的部分。如果您仅对许可证进行混淆检查,那么需要黑客注意的部分很容易归零。

+0

我想知道如果公司可以隐瞒混淆源代码,他们可以在内部使用以得到错误发生的真实地点的混淆日志。 –

+0

查看日产粉丝的评论。你的工具应该能够去混淆堆栈跟踪...如果你把它作为一个正确编码的文件。许多混淆器使用Unicode字符来表示类和方法名称,这使得在屏幕上阅读特别困难。只给出屏幕截图或非Unicode文本文件,将很难返回。我有时会创建一个Web服务来记录错误,以确保程序提交我需要诊断错误的所有内容。这将是一个安全的方法来获得正确的(unicode)编码的堆栈跟踪。 –

1

这通常不是一个问题,因为大多数模糊处理提供反混淆堆栈追溯能力的原始痕迹。

1

我们使用BitHelmet。问题是,当使用最强的混淆技术时,堆栈跟踪不能被反混淆。 BitHelmet使用完全签名重命名(某种过载感应,只是更好)。会发生什么情况是,许多方法以相同的名称结束,但具有不同的返回类型(这不能在C#中完成,但对于CLR可以)。返回类型不会显示在堆栈轨迹中!所以实际上不可能使用最强的混淆消除堆栈跟踪。

我们问了与你相同的问题,我们讨论了它,并得出结论,实际上我们更喜欢更好的混淆。当提供技术支持作为其他一些只有最终用户可以提供的数据时,堆栈跟踪实际上并不是那么有用。 “请告诉我你到底在做什么?” :)