Dot-Net

混淆的效果如何?

  • February 16, 2009

另一個問題,即Best .NET obfuscation tools/strategy,詢問混淆是否易於使用工具實現。

我的問題是,**混淆有效嗎?**在回复這個答案的評論中,有人說“如果你擔心原始碼被盜……對於真正的破解者來說,混淆幾乎是微不足道的”。

我查看了 Dotfuscator 社區版的輸出:它看起來讓我感到困惑!我不想保持這種狀態!

我知道簡單地“破解”混淆軟體可能相對容易:因為您只需要找到軟體中的任何位置實現您想要破解的任何內容(通常是許可證保護),然後添加一個跳轉來跳過它。

如果擔心不僅僅是最終使用者或“盜版”破解:如果擔心是“來源盜竊”,即如果您是軟體供應商,而您擔心的是另一個供應商(潛在的競爭對手)反向 -設計您的原始碼,然後他們可以將其用於或添加到他們自己的產品中……在何種程度上簡單的混淆是對這種風險的充分或不充分的保護?


第一次編輯:

有問題的程式碼大約是 20 KLOC,它在最終使用者機器上執行(使用者控制項,而不是遠端服務)。

如果混淆真的“對真正的破解者來說幾乎是微不足道的”,我想了解它為什麼無效(而不僅僅是“多少”它無效)。


第二次編輯:

我不擔心有人反轉算法:更擔心他們將算法的實際實現(即原始碼)重新用於他們自己的產品。

考慮到 20 KLOC 需要幾個月的時間來開發,是否需要更多或更少的時間(幾個月)才能對所有內容進行去混淆處理?

是否有必要對某些東西進行去混淆以“竊取”它:或者一個理智的競爭對手可能只是將它批發到他們的產品中,同時仍然被混淆,接受它是維護的噩夢,並希望它幾乎不需要維護?如果這種情況可能的,那麼混淆的 .Net 程式碼是否比編譯的機器程式碼更容易受到這種攻擊?

大多數混淆的“軍備競賽”是否主要旨在防止人們甚至“破解”某些東西(例如查找和刪除實現許可保護/執行的程式碼片段),而不是防止“來源盜竊”?

我已經討論了為什麼我不認為混淆是防止破解的有效手段:

Protect .NET Code from reverse engineering

但是,您的問題專門針對源盜竊,這是一個有趣的話題。在 Eldad Eiliams 的書“逆向:逆向工程的秘密”中,作者在前兩章討論了原始碼盜竊是逆向工程背後的原因之一。

基本上,歸根結底,你成為源盜竊目標的唯一機會是,如果你有一些與你的領域相關的非常具體、難以設計的算法,可以讓你在競爭中占得先機。這幾乎是唯一一次嘗試對應用程序的一小部分進行逆向工程具有成本效益。

因此,除非您有一些絕密算法,您不希望您的競爭對手擁有,否則您無需擔心來源被盜。從應用程序中撤消大量原始碼所涉及的成本很快超過了從頭開始重寫的成本。

即使您確實有一些您不希望他們擁有的算法,您也無法阻止有決心和熟練的人獲得它(如果應用程序正在他們的機器上執行)。

一些常見的防倒車措施有:

  • 混淆 - 在保護您的來源或防止其被破解方面沒有多大作用。但我們不妨不要讓它完全容易,對吧?
  • 3rd Party Packers - Themida是最好的之一。將執行檔打包到加密的 win32 應用程序中。如果應用程序也是 .NET 應用程序,則防止反射。
  • 自定義打包程序 - 如果您有能力編寫自己的打包程序,有時會很有效,因為在破解場景中關於如何解壓您的應用程序的資訊非常少。這可以阻止沒有經驗的 RE。本教程提供了一些關於編寫自己的打包程序的好資訊。
  • 使行業機密算法遠離使用者機器。將它們作為遠端服務執行,因此指令永遠不會在本地執行。唯一“萬無一失”的保護方法。

但是,打包程序可以被解包,並且混淆並不會真正阻礙那些想要查看您的應用程序正在做什麼的人。如果程序在使用者機器上執行,那麼它很容易受到攻擊。

最終,它的程式碼必須作為機器程式碼執行,這通常是啟動調試器、設置一些斷點並監視在相關操作期間正在執行的指令以及花一些時間仔細研究這些數據的問題。


您提到您花了幾個月的時間為您的應用程序編寫 ~20kLOC。如果您採取最低限度的預防措施,將那些等效的 20kLOC 從您的應用程序轉換為可用源幾乎需要一個數量級的時間。

這就是為什麼從您的應用程序中反轉小型的行業特定算法才具有成本效益。其他任何事情都不值得。

舉以下虛構的例子:假設我剛剛為 iTunes 開發了一個全新的競爭應用程序,它有大量的花里胡哨。比方說,它花了幾個 100k LOC 和 2 年的時間來開發。我擁有的一個關鍵功能是一種根據您的音樂聆聽品味為您提供音樂的新方式。

Apple(他們是海盜)對此有所了解,並決定他們真的很喜歡您的音樂建議功能,因此他們決定扭轉它。然後,他們將只研究該算法,逆向工程師最終將提出一種可行的算法,該算法在給定相同數據的情況下提供等效的建議。然後他們在自己的應用程序中實現上述算法,稱其為“天才”並賺取下一個 10 萬億美元。

這就是來源盜竊減少的方式。

沒有人會坐在那裡並反轉所有 100k LOC 來竊取您已編譯應用程序的重要部分。這將太昂貴且太耗時。大約 90% 的時間,他們會反轉無聊的、非行業機密的程式碼,這些程式碼只是處理按鈕按下或處理使用者輸入。相反,他們可以聘請自己的開發人員以更少的錢從頭開始重新編寫大部分內容,並簡單地逆轉那些難以設計並為您帶來優勢的重要算法(即音樂建議功能)。

引用自:https://stackoverflow.com/questions/551892