2013-08-19 29 views
1

我與變量X = 10,然後我有一個循環詢問用戶以改變可變和輸出一個簡單的控制檯應用程序。我附加一個調試器和編輯我的程序來改變變量X我能做些什麼來防止用戶編輯與存儲編輯這個變量X的內存區域,也有反正檢測(在我的程序),調試程序或內存編輯器,以便當訪問變量X時,將變量X移動到其他位置,並且當變量X被更改時,向用戶發送一條消息,表明您不應該這樣做?這只是我的一個教育實驗。檢測內存讀取和更改變量?

例如,在下面的代碼

 byte X = 10; 
     X = byte.Parse(Console.ReadLine()); // scan memory looking for X to change 
     Console.ReadKey(); // Change X before the output 
     Console.WriteLine("X = " + X); 

X可以容易地在節目輸出之前,甚至與其他幾個花式指針技巧它仍然可以用一個簡單的外部程序的輸出之前容易地編輯中進行編輯。

+0

請你能張貼代碼,代碼總是更容易理解則只有詞 –

+0

@CuongLe我想過上傳的代碼,但實際上這是這樣一個抽象的問題。基本上這是一個可以傳遞到任何程序的概念。我所擁有的只是一個帶有單個變量的簡單程序,我使用外部程序將該變量的內存更改爲我想要的任何內容。但是改變內存值非常容易,必須有某種方式來保護(99%)來自用戶的內存。編輯:添加一些代碼給我的例子。 – CodeCamper

回答

3

號從根本上說,如果你有足夠的訪問權限的用戶,他們可以在另一個進程的內存閒逛,有沒有很多可以做。

這是很少在我遇到的問題,但是。

如果是真的你的情況的問題,你可能只以加密的形式維持值減少攻擊空間 - 然後對加密數據的「工作空間」,這是隻有後立即信任解密,並在使用後擦除。它並沒有完全消除攻擊媒介,但它可以減少它。

+0

你能提供一個簡單的方法來加密程序中的大部分變量的例子嗎?每個變量最終都不得不成爲一個班級? – CodeCamper

+0

@CodeCamper:不,因爲*有*不容易。我所描述的可能會在一個程序中的「大多數變量」上滑稽地超過頂端。這根本不是一個好主意。你可能偶爾會爲非常敏感的數據做這件事(例如,這就是爲什麼'SecureString'類存在的原因),但這種情況非常罕見。 –

+0

在某些程序,如Flash看起來好像變量都被加密或圍繞這種方式防止排序內存編輯我擔心的混雜。這只是一個根本的區別? – CodeCamper