2009-02-13 38 views
-1

我用C#.Net 2.0寫了一個windows應用程序,我想做一些隱藏源代碼的東西,所以當任何一個使用重構工具的人看不到源代碼。 我用dotfuscator,但它只是改變了函數名稱,但不是所有的源代碼。隱藏c#windows應用程序源代碼

更新: 我想隱藏源代碼,不是因爲隱藏密鑰,而是隱藏代碼的工作方式。

謝謝,

+0

可能已經回答了,嘗試搜索「c#混淆器」的stackoverflow – ng5000 2009-02-13 12:45:28

+0

這是不一樣的http://stackoverflow.com/questions/402430/how-do-i-use-net-without-loss-of-控制知識產權? – 2009-02-13 12:51:11

回答

2

嗯,源代碼是你的,除非你明確地提供它,你會perobably只提供編譯的二進制文件。

現在,這些編譯的二進制文件是IL代碼。爲了防止某人「反編譯」並將你的IL代碼逆向工程回到源代碼,你需要混淆IL代碼。這是通過代碼混淆器完成的。市場上有很多。

你已經用dotfuscator完成了這個,但是,你說它只改變了函數名,而不是所有的源代碼。聽起來你正在使用Visual Studio附帶的dotfuscator版本。這實際上是「社區版」,只包含「專業版」的一部分功能。請參閱this link瞭解社區版和專業版功能的比較矩陣。

如果您希望對代碼進行更多混淆處理(專門用於防止使用反射器等工具的用戶),則需要專業版的Dotfuscator或包含類似功能的其他代碼混淆器產品。

3

IL根據定義非常具有表現力,在體內仍然存在;你就得要麼:

  • 找到一個更好的(閱讀:更貴)混淆
  • 保持你的控制之下的主要來源(例如,通過Web服務,所以關鍵的邏輯是從來沒有在客戶端)。
0

模糊處理軟件可以去隱藏方法內容的長度是有限的,從根本上改變內部而不影響正確性(當然還有性能)是非常困難的。

值得注意的是,具有許多小方法的代碼在被混淆後往往變得難以理解,特別是當採用在似乎與眼睛碰撞但不與運行時碰撞的方法之間共享名稱的技術時。

某些混淆器允許未在任何目標語言可表示的構建體的產生,該組的所有操作在CIL允許的例如比可表達的方式通過多個C#或甚至C++/CLI。然而,這通常需要明確的設置來啓用(因爲它可能導致問題)。這可能會導致反編譯器失敗,但有些會盡力而爲,並且可以解決它(也許內聯它不能處理)。

如果您將pdb與應用程序一起發佈,那麼由於附加的符號可以推斷出更多。

1

只要人們接觸到二進制文件,他們就可以對其進行逆向工程。使用編譯爲字節碼的語言(C#和Java)更容易,編譯爲特定於CPU的二進制文件的語言比較困難,但總是可以的。面對它。

0

只是符號重命名是不足以逆向工程您的應用程序的障礙。您還需要控制流混淆,字符串加密,資源保護,元數據減少,防反射防禦等。嘗試Crypto Obfuscator支持所有這些以及更多。

0

爲您的應用程序創建安裝項目,並將安裝程序安裝到您的朋友計算機上,如軟件。有5個步驟使用Microsoft Visual Studio創建安裝項目。

第1步:創建一個示例.Net項目。在發佈模式下構建項目之後,我已將該項目命名爲「TestProject」。 步驟2:使用右鍵單擊您的解決方案添加新項目並選擇安裝項目,並將其名稱命名爲「TestSetup」。 第3步:右鍵單擊安裝項目並添加主輸出並選擇您的項目顯示。 步驟4:右鍵單擊安裝項目並選擇查看 - >文件系統 - >應用程序文件夾。現在複製你想要在安裝文件夾中。 第5步:現在轉到我們的項目文件夾並打開發布文件夾,您可以在此處獲取setup.exe文件。雙擊「TestSetup」文件並將您的項目安裝到您的計算機和其他計算機上。

相關問題