【问题标题】:Obfuscator & Tech Support混淆器和技术支持
【发布时间】:2011-01-24 07:49:26
【问题描述】:

我们正在考虑在将某些代码发布给客户之前对其进行混淆处理。我们想知道它对技术支持的影响。客户能否向我们提供有意义的堆栈跟踪,或者它们也会被混淆?

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

【问题讨论】:

    标签: .net obfuscation


    【解决方案1】:

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

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

    【讨论】:

    • 如前所述,大多数工具都提供去混淆堆栈跟踪(例如ssware.com/cryptoobfuscator/obfuscator-net.htm
    • 我有时会创建一个 Web 服务来接收崩溃报告。用户可以提交“提交错误报告”按钮,并且可以传输堆栈跟踪和其他有关程序状态的有用信息,而不会以错误的文本格式对堆栈跟踪进行编码(因为许多混淆器使用 Unicode 字符来表示类/方法名称)。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我想知道公司是否可以保留一份混淆日志以对源代码进行混淆,他们可以在内部使用该日志来获取错误发生的真实位置。
    • 查看 Nissan Fan 的评论。您的工具应该能够对堆栈跟踪进行去混淆处理...如果您将其作为正确编码的文件获取。许多混淆器使用 Unicode 字符作为类和方法名称,使其在屏幕上特别难以阅读。仅给定屏幕截图或非 unicode 文本文件,将很难返回。我有时会创建一个用于记录错误的 Web 服务,以确保程序提交诊断错误所需的所有内容。这将是获取正确(unicode)编码的堆栈跟踪的安全方法。
    【解决方案3】:

    这通常不是问题,因为大多数混淆器都提供了将堆栈跟踪解混淆回其原始跟踪的能力。

    【讨论】:

      【解决方案4】:

      我们使用BitHelmet。问题是,当使用最强的混淆技术时,无法对堆栈跟踪进行反混淆。 BitHelmet 使用完整签名重命名(某种过载感应,只有更好)。发生的情况是,许多方法最终具有相同的名称但具有不同的返回类型(这不能在 C# 中完成,但对于 CLR 来说是可以的)。返回类型未显示在堆栈跟踪中!所以实际上不可能使用最强的混淆来去混淆堆栈跟踪。

      我们问了和你一样的问题,我们讨论了这个问题,我们得出的结论是,实际上我们更喜欢更好的混淆。在提供技术支持时,堆栈跟踪实际上并没有像只有最终用户才能提供的其他一些数据那样有用。 “请告诉我你到底在做什么???” :)

      【讨论】:

        猜你喜欢
        • 2011-02-03
        • 2018-07-05
        • 2012-10-04
        • 1970-01-01
        • 2012-07-18
        • 2011-07-23
        • 2011-06-27
        • 1970-01-01
        • 2011-02-20
        相关资源
        最近更新 更多