2010-03-05 122 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可以)。返回類型不會顯示在堆棧軌跡中!所以實際上不可能使用最強的混淆消除堆棧跟蹤。

我們問了與你相同的問題,我們討論了它,並得出結論,實際上我們更喜歡更好的混淆。當提供技術支持作爲其他一些只有最終用戶可以提供的數據時,堆棧跟蹤實際上並不是那麼有用。 「請告訴我你到底在做什麼?」 :)