问题 混淆器和技术支持


我们正在考虑在将某些代码发布给客户之前对其进行模糊处理。我们想知道它对技术支持的影响。客户可以为我们提供有意义的堆栈跟踪,还是会对它们进行模糊处理?

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


4855
2018-03-05 22:29


起源



答案:


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

在技​​术支持的情况下 - 您可以创建一个简单的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


9
2018-03-05 22:44



如上所述,在大多数工具中都可以使用去阻塞堆栈跟踪(例如, ssware.com/cryptoobfuscator/obfuscator-net.htm) - Keith Adler
我有时会创建一个Web服务来接收崩溃报告。用户可以提交“提交错误报告”按钮,并且可以传输堆栈跟踪和有关程序状态的其他有用信息,而不会有以错误的文本格式编码堆栈跟踪的风险(因为许多混淆器使用Unicode字符进行类/方法名)。 - Eric J.


答案:


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

在技​​术支持的情况下 - 您可以创建一个简单的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


9
2018-03-05 22:44



如上所述,在大多数工具中都可以使用去阻塞堆栈跟踪(例如, ssware.com/cryptoobfuscator/obfuscator-net.htm) - Keith Adler
我有时会创建一个Web服务来接收崩溃报告。用户可以提交“提交错误报告”按钮,并且可以传输堆栈跟踪和有关程序状态的其他有用信息,而不会有以错误的文本格式编码堆栈跟踪的风险(因为许多混淆器使用Unicode字符进行类/方法名)。 - Eric J.


如果在您的发行版中对堆栈上的方法进行了模糊处理,您将在任何堆栈跟踪中获得模糊的方法名称。

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

一种常见的策略是仅混淆部分代码,包括(但不限于)执行许可检查的部分。如果您对许可证检查进行模糊处理,则很容易将需要黑客注意的部分归零。


1
2018-03-05 22:37



我想知道公司是否可以隐藏一个混淆日志来对源代码进行模糊处理,他们可以在内部使用这些日志来获取错误发生的真实位置。 - Chris Dennett
见日产范的评论。您的工具应该能够对堆栈跟踪进行反混淆处理...如果您将其作为正确编码的文件获取。许多混淆器使用Unicode字符作为类和方法名称,使其在屏幕上特别难以阅读。仅给出屏幕截图或非unicode文本文件,将很难返回。我有时会创建一个用于记录错误的Web服务,以确保程序提交诊断错误所需的一切。这将是获得正确(unicode)编码堆栈跟踪的安全方法。 - Eric J.


这通常不是问题,因为大多数混淆器都能够将堆栈跟踪去混淆回原始跟踪。


1
2018-03-06 09:38





我们用 BitHelmet。问题是,当使用最强混淆技术时,堆栈跟踪不能被反混淆。 BitHelmet使用完全签名重命名(某种过载感应,只有更好)。会发生什么,很多方法最终都使用相同的名称,但返回类型不同(这不能在C#中完成,但对CLR来说是可以的)。堆栈跟踪中不显示返回类型!因此,实际上不可能使用最强混淆来反转混淆堆栈跟踪。

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


1
2018-04-09 12:11