2015-10-17 55 views
-1

我試圖創建一個軟件,允許用戶登錄和流式傳輸一個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,或者我只是想碰到同樣的問題,我使用的是什麼語言?這真的值得付出嗎?

+2

任何運行在用戶機器上的軟件都可以被反編譯/被黑客入侵如果他們有足夠的知識和動機,則由用戶/ /等等。你可以讓它變得更難,但並非不可能。 – TheUndeadFish

+0

你是什麼意思通過蒸汽一個DLL的字節[]?加載DLL並從中獲取一個字節數組?你擔心的是有人用另一個返回不同的字節替換DLL?也許你正在尋找的解決方案是代碼簽名,你知道你加載的DLL是你的。我想象的另一個潛在的含義是,您關心的是其他人打開您的DLL並獲取數據而無需通過您的前端應用程序。解決這個問題的方法是模糊處理,再加上應用程序和DLL之間的非握手協商。 DRM概率。 – harningt

+0

嗨,哈寧特感謝您的回覆。我用代碼片段更新了這篇文章,希望能夠展示我的意思。我正在使用下載的dll中的byte []注入進程。 –

回答

-2

我不是很清楚你的問題的第一段。但這裏有一些想法給你。

簡單反編譯不是一個問題,如果外人不能使用生成的代碼來劫持你的程序集。

據我所知,有很多工具可以「合理的反編譯」或瀏覽.NET程序集內容。 如果您使用C++或C,有反編譯器,它們生成的源代碼不準確,需要大量的手動工作。

其次,如果您使用的是C或C++等本機語言,則會存在大量漏洞。你必須使用所有的良好做法來避免注入一些問題。 https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637

有工具可以避免反編譯。你可以谷歌Obfuscator。一些着名的Dotfuscator,Secure Team。

而且你也可以考慮項目體系結構的變化。如將DLL代碼包含在主EXE等中...

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

2

你不能阻止反編譯任何東西,既不是C#,也不是C++或其他任何東西。
與例如C++相比,像C++這樣的語言需要更多的手動工作。 C#和混淆器可能會讓代碼更難理解,但是一切都會減慢執行代碼的速度,而不是阻止它。
(而像DLL和加密的東西不能幫助所有用於固定碼)

如果它是程序的某些用戶可以看到完整的代碼有問題,你做錯了什麼。任何密碼,如密碼等不屬於用戶獲得的文件,但在您控制的某些服務器上,只能通過網絡連接等方式訪問用戶。

相關問題