2012-04-28 29 views
2

有沒有什麼辦法可以防止加載到內存中的純C#程序集可執行文件的轉儲,該內存最初受32位本地代碼包裝器的保護。防止Packed .Net可執行文件的內存轉儲?

+0

我有同樣的問題,你有沒有找到解決辦法? – 2014-11-11 12:01:58

回答

3

@Hasan說得沒有辦法阻止內存轉儲。不過,我認爲這裏有一個更深層次的問題。當你寫一個C#程序集「原本是受保護的由32 Bit Exe Native Code Wrapper」(強調我的)時,似乎你想阻止某人檢查C#程序集本身的內容。

只要有人親手參加那個集會,他們就可以打開它,並對它進行更多的瞭解,超出預期。例如,他們可以使用dotPeekILSpy將其反編譯爲C#源代碼。對於使用這些工具的人來說,你可以使用混淆器來讓你的生活變得更加困難,但即使是混淆現象也是如此。

底線是:一旦你把它提供給其他人,它已經失去了你的手。 預計其他人會反編譯你的代碼並在torrent站點上發佈副本(除非它是免費的)。 請勿將將您的超級密碼數據庫密碼放入您的代碼中,因爲有人可以反編譯代碼並以純文本形式讀取密碼。即使您在服務器上運行此代碼,也不要將密碼放在代碼中,原因是我在另一個SO回答here中描述的原因。

N.B.一旦開始分發軟件,也無法阻止某人將調試器附加到正在運行的可執行文件,因此,爲了檢查運行時信息,禁止檢查可執行文件本身的問題,某人甚至不需要內存轉儲。

2

有沒有防止內存轉儲的傻瓜證明方式。您可以將值設置爲secure strings。因此,如果有人需要內存轉儲,哪些是加密的;他們將無法從中理解。

0

編寫一個作爲受保護進程運行的Windows驅動程序。只有通過這個驅動程序啓動你的程序,並啓動它作爲一個受保護的過程。

如果你這樣做,即使反病毒程序也不能掃描你程序的內存。這就好像您嘗試調用受保護進程的openprocess或readprocessmemory一樣,您將收到拒絕訪問。

這裏的主要問題是驅動程序必須是一個Windows認證的驅動程序,這是耗時的實現。

此外,你將不得不實施一種方法來檢查程序已被保護的進程驅動程序調用,如果它不是無法打開程序。這種檢查可以很容易地刪除。