2011-07-09 68 views
1

在C#winforms應用程序中隱藏/保護包含我的服務器IP地址的字符串的最佳方法是什麼?如何在winforms應用程序中隱藏我的服務器IP變量

這是事情,爲了激活我創建的應用程序,用戶應填寫一些包含用戶名和密碼文本框的表單,然後連接到我的服務器以驗證他輸入的詳細信息。

現在我想隱藏/保護或者可能以某種方式加密包含服務器地址的字符串,所以沒有人可以真正改變/訪問它,或者至少使它很難被顛倒。這可能嗎?

我不知道如果我有問題清楚,但我希望你們得到了主意..

+0

似乎有點毫無意義,如果一個簡單的數據包嗅探器會發出請求時顯示您的服務器的IP。那些關心你的服務器IP的人也是使用數據包嗅探器的人。 –

+0

如果他們知道IP,那很好。但我不希望他們能夠改變它..這就是我想要的.. – SolidSnake

+0

這沒有任何意義。如果他們更改IP地址,則您的程序將無法再與服務器聯繫。 –

回答

7

這是一個可笑的做法。通過默默無聞的安全性非常薄弱,您所連接的IP地址不僅顯示在您的源代碼中,而且還顯示在傳出數據包,防火牆日誌,連接表,數據包捕獲等中。

隱藏連接的對等IP地址是一個值得關注的領域,並導致諸如onion routing之類的技術。隱藏您的源代碼中的地址是您最擔心的問題。而且,當您使用洋蔥路由時,目標IP地址甚至不會出現在您的源代碼中,只有一些僅對下一躍點洋蔥路由器有意義的cookie,因此混淆源代碼不成問題。


編輯:基於評論,現在很清楚,所需要的是驗證發送響應的遠程計算機的身份。有辦法實現這一點,但保護源代碼不是其中之一。 IP地址可以被欺騙,並且很容易。存儲在應用程序二進制文件中的公鑰可以被覆蓋,或者認證碼可以完全繞過。

真的,你需要程序中的一些重要功能來不包含在安裝程序中,但作爲認證過程的一部分下載(如果認證失敗,服務器可以選擇不發送它)。響應可能會被盜用,並且可能會在未經身份驗證的情況下激活其他安裝,但這隻能由能夠有效驗證至少一次的用戶完成。

如果您擔心這一點,那麼您需要使用隱寫術來在響應中對客戶端的身份進行編碼。然後,當非法拷貝開始出現時,您知道哪個有效用戶創建了第一個副本。

或者將軟件的專有部分保留在服務器上,並且永遠不要將它們下載到客戶端。這是最安全的方法。

+0

以及我只是不希望任何人改變它。它確定,如果他們可以通過傳出的數據包看到它... – SolidSnake

+0

@ermac:我不需要更改您的代碼...我只需要iptables(或等效的)http://linux-tips.org/article/91/rewriting-destination-ip-address –

+0

,無論如何要解決這個問題?我真的不想分發我的應用程序,如果任何人都可以這樣做,並繞過我的所有檢查例程。 – SolidSnake

1

爲什麼你需要掩蓋你的服務器的IP地址?

推測,您的應用程序將聯繫您的服務器,並在激活之前等待一些響應。在這種情況下,我不認爲隱藏IP地址是做到這一點的方法。不僅僅是因爲IP地址可能是不穩定的。相反,你應該簡單地在客戶端和服務器之間使用相互認證。我會建議:

  1. 使用DNS來解析您的服務器的IP地址。不要擔心,這可以被嗅探,甚至欺騙。
  2. 使用標準的公鑰/私鑰加密。

應用程序使用公鑰將數據加密到服務器。然後服務器用私鑰解密。假的服務器將無法解密數據,假應用程序將無法加密數據。

然後,服務器使用私鑰對響應進行加密,應用程序使用公鑰將其解密。

實現公鑰/私鑰的最佳方式是使用證書。在服務器上安裝專用證書。讓應用程序安裝程序安裝公用證書(通常是從專用證書生成的.cer文件),並將其標記爲不可導出(以防止有人將其複製到另一臺機器)。

編輯:本提出了一個有效的觀點,我只是在調查過程中。比安裝證書更好的方法是將其嵌入到隨應用程序一起提供的程序集中,並使用強名稱(.snk文件)對該程序集進行簽名。這將確保證書可用於加密/解密流量,但不能被修改(因爲如果程序集被篡改,程序集不會加載)。

然後使用CryptoAPI來加密/解密您的數據。

哦,你也可以選擇使用HTTPS與你的服務器通信。

不要試圖推出自己的加密/解密。你不會像已經完成它的人或那些試圖破解它的人那麼好。

+0

如果在客戶端中可以覆蓋「公鑰」,這也無濟於事。 –

+0

證書仍可以修改。沒有用戶的知識,強名稱可以防止篡改......但是如果用戶打算使用修改後的副本,他們根本沒有任何幫助。 –

+0

有效評論,本。我建議把證書放在簽名的程序集中。但是,另一種方法是將證書指紋放入簽名的程序集(只要程序集已簽名,直接在源代碼中執行)並使用它來解析證書存儲區中的證書。 –

相關問題