2012-06-23 31 views
0

我想爲我的服務器提供某種保護,以防有人能夠訪問服務器並試圖竊取服務器可執行文件。因此,如果黑客無法找到真正的服務器可執行文件,他將轉儲服務器進程。

保護就像那個:
我將有一個服務器加載應用程序和服務器本身編譯成.NET程序集
Server機器幾乎從不會有這樣的組裝,我將其寫入CD-R,並且將其插入時裝載機應用程序啓動後,它從CD-R讀取程序集字節,然後從該程序集加載並創建所需的類,這將導致主服務器應用程序啓動。
然後我從驅動器中刪除CD-R。是否有可能從它的進程二進制轉儲中恢復可執行文件,它有多難?

byte[] raw_assembly = File.ReadAllBytes("E:\\server.dll"); 
Assembly ass = Assembly.Load(raw_assembly); 
Type myclass = ass.GetType("Server.Form1"); 
object o = Activator.CreateInstance(myclass); 
Application.Run((Form)o); 
raw_assembly.Clear(); //pseudo Clear... no matter how, just delete from memory 
+0

服務器室門有一把鎖。也許用掃描儀,關鍵效果最好。你寫這樣的代碼,你永遠不會得到鑰匙。 –

+0

一些被稱爲黑客的人不需要任何密鑰就可以訪問服務器機器:D – Kosmos

回答

2

由於這是一個奇怪的問題,您現有的代碼幾乎沒問題。您只需從byte[]加載程序集到應用程序域。但是,一旦它們被加載,字節就必須存在於內存中,以便應用程序可以運行。您總是可以將程序集byte[]退出AppDomain。您不能從RAM中刪除程序集的字節。然而,將byte []加載到內存中並且沒有在文件系統上使用實際的.dll確實更安全。有人仍然可以從RAM中獲取字節,但這會變得更加困難和複雜。沒有什麼是100%安全的,但是你肯定可以讓黑客變得很難。

如果程序集中的業務邏輯非常敏感以致於不想讓任何人掌握它,那麼可以考慮將其放在公司LAN內的防火牆後面的計算機上, DMZ中的可訪問機器接受來自外部世界的請求,然後將請求轉發給LAN中的邏輯服務器。這將是黑客需要訪問的另外一臺機器,而且在局域網內部要更加困難(假設有人知道他們在做什麼設置了防火牆)。

+0

當我們應該從AppDomain卸載程序集時?換句話說,我怎麼知道裝配不再需要? –

相關問題