2013-07-23 43 views
0

我正在和一位知道C#的朋友一起寫應用程序。 我想在最難以反編譯的代碼中編寫代碼。 C#和C++之間的安全區別是什麼? (在一個編譯的可執行文件查看代碼的條款)C#與C++安全性

+0

「在查看編譯的可執行文件中的代碼方面」,C#.NET不會幫助您隱藏它。 –

+1

我不明白這個奇怪的混淆二進制文件的迷戀。 對於什麼?有大量的開源項目的評論和所有被他們的作者放棄的 ,沒有人想要拿起它們。 不是他們是不好的項目,例如Gnome Do是好的,只是沒有人對此感興趣。 相信我,當有人感興趣足以反編譯一個二進制文件 - 沒有什麼會阻止他們。 但很可能沒有人會嘗試。 如果您通過默默無聞的方式來實現安全,那麼有更多更好的方法可以去。 –

+2

第一:這個問題不是關於實際的代碼,對於StackOverflow太模糊;它應該被關閉。第二:如果你不希望用戶能夠反編譯你的超級祕密令人敬畏的代碼,而沒有其他人能拿出來,**首先不要給你的客戶二進制文件**。將代碼保存在您的服務器上並提供服務。然後,你必須防範的是服務器攻擊。反編譯任何語言都很容易,並且**大量的人可以讀取機器代碼**。這不像機器代碼的祕密。 –

回答

4

很短,簡單的解釋,假設發行版本沒有調試信息:

C/C++:你會得到的彙編代碼,就是這樣。基於一個反編譯的知識,這可能相當容易理解或根本不可能。這裏沒有一般的答案,因爲這也取決於代碼本身的複雜性(即「它實際在做什麼?」)。

C#:至於所有.NET語言的反編譯都要容易得多,因爲生成的二進制本質上只包含直接語言代碼,您可以將其反編譯爲可讀代碼。這不一定會導致代碼中的第一位(變量名可能會丟失,沒有註釋和優化可能會掩蓋某些代碼),但最終理解和修改起來要容易得多。

有代碼混淆器可用,使閱讀反編譯的.NET代碼更難理解,但總的來說,你應該總是假設總是有人能夠理解和反向工程你的代碼,即使你的代碼只是一個黑色框。

+1

還有像SafeNet這樣的專業安全套件,例如Scramble/crypt native binary exe和DLL。 – alexbuisson

+1

真的不建議使用這些:某些防病毒程序可能會將其代碼/活動標記爲可疑(試圖隱藏代碼),特別是當您無法快速建立巨大聲望時(例如大型/流行遊戲或類似被接受你的程序的用戶列入白名單)。如果您擔心盜版問題,請儘量做出公平定價,提供人們想要付費的東西。如果我們正在談論某種服務器/客戶端的事情,請仔細檢查服務器端的所有內容,不要只信任客戶端。 – Mario

+0

如果我編譯它在單聲道? – CappyT