簡體   English   中英

我應該擔心我的軟件被反編譯嗎?

[英]Should I worry about my software being decompiled?

我正在嘗試創建一個軟件,允許用戶登錄並流式傳輸要用於注入的 dll 的字節 []。 例如

public static byte[] getDLL()
{
    using (WebClient wc = new WebClient())
    {
        Uri url = new Uri("http://mysite/dll.dll");
        return wc.DownloadData(url);
    }
}

我成功地使用 Visual Studio 在 C# 中做到了這一點。 但是,您可以輕松地反編譯該程序並使其在您計算機上的特定位置創建 dll,從而泄漏它。 我幾乎沒有辦法阻止這種情況。

我會更好地使用一種更難反編譯的語言,例如 C++ 或 C,還是我會遇到同樣的問題,無論我使用什么語言? 是否真的值得付出努力。

你無法阻止反編譯任何東西,無論是 C# 還是 C++ 或其他任何東西。
與例如相比,像 C++ 這樣的語言需要更多的手動工作。 C# 和混淆器會使代碼更難理解,但一切只會減慢執行者的速度,而不是阻止它。
(像 DLL 和加密之類的東西對保護代碼根本沒有幫助)

如果程序的某些用戶可以看到完整代碼是一個問題,那么您就做錯了。 密碼等任何秘密都不屬於用戶獲取的文件,而是在由您控制的某些服務器上,並且用戶只能通過網絡連接等訪問。

我對你問題的第一段不是很清楚。但這里有一些想法供你參考。

如果外人無法使用生成的代碼來劫持您的程序集,那么簡單的反編譯不是問題。

據我了解,有很多工具可以“合理地反編譯”或瀏覽 .NET 程序集內容。 如果你使用C++或C,有反編譯器,他們生成的源代碼不准確,需要大量的手工工作。

其次,如果您使用諸如 C 或 C++ 之類的本地語言,則它們有很多漏洞。 您必須使用所有良好做法來避免注入類型的問題。 https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637

有一些工具可以避免反編譯。 你可以谷歌Obfuscator 一些著名的是 Dotfuscator,安全團隊。

你也可以考慮項目架構的變化。 例如將 DLL 代碼包含在主 EXE 等中...

您也可以使用密鑰生成機制來驗證 DLL。 剛剛加載DLL exe后調用DLL中的通用函數並獲取one time key並進行驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM