2011-12-30 87 views
8

我想檢查一個應用程序是否試圖操縱一個特定的進程(例如鉤子本身)。我無法找到一個合適的方法來完成這一點。計算校驗和是否可以運行?如果不是我怎麼能檢測到這種情況?檢測內存訪問進程

+0

你知道有問題的應用程序嗎?你知道如何檢測你的應用操縱嗎? – rene 2011-12-30 12:19:07

+0

對不起,我沒有得到你的問題。我不知道如何檢測操縱,所以我不知道檢測操縱事件。這就是我尋求幫助的原因。 – 2011-12-30 12:33:37

+0

你想實現的目標是什麼?如果您試圖在自己的應用程序中避免/檢測篡改,那麼沒有任何事情可以100%發揮作用。 – 2011-12-30 12:46:44

回答

4

其他進程不能在你的進程中掛鉤,可以修改內存但是爲了掛鉤這個代碼必須在你的地址空間,這可以在啓動時將DLL注入到你的進程中(在運行時注入dll是一個很難),你可以通過在你的程序中列出DLL並在其代碼中搜索一些ReadProcessMemory,WriteProcessMemory,OpenProcess,CallNextHookEx函數調用來容易地檢查這個。要做到這一點,得到的代碼中的函數和搜索值的地址(GetProcAddress)(您可以添加一些asm call預測用於嚴格範圍結果)。

您可以檢查什麼是錯的,在磁盤和內存中您的PE文件,當DLL注入在啓動的時候是發生在此之後,從文件複製到記憶您的PE文件應該被損壞,最後的dll庫後您應該用附加的dll導入覆蓋調試符號。這種修改可以在文件中完成,與內存相同。

當您使用C#語言時,最好的方法但可能不會容易的是混淆您的代碼。我認爲這是一個很好的方法,因爲你不掛鉤你不知道如何工作,因爲你不知道你必須做什麼鉤子和在哪裏。但是,爲了好的混淆C#代碼,你必須找到好的軟件,並且可能付出的代價並不低。

+0

@gcx:ReadProcessMemory,WriteProcessMemory也會捕獲運行時注入,運行時注入是從其他進程注入函數放置的時候會用加載庫代碼執行(在目標內存中不像目標中的鉤子)內存,但調用函數位於DLL) – Svisstack 2011-12-30 12:35:14

+0

我看到你提到混淆。我想,你說這是因爲我的「我的過程」的承諾。我通過說我的過程來提到一個特定的過程。我編輯了原文。對困惑感到抱歉。 – 2011-12-30 12:38:33

+1

這是我所知道的最好的免費混淆器:[Eazfuscator.NET](http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx) – ken2k 2011-12-30 12:48:59