進程守護

進程守護
 
進程守護是指防止進程被結束掉,用一些編程技術把它保護起來,一般是病毒採用的技術手段,它們hook一些api,或者注入其它進程空間,比較多的是注入explorer.exe,這些技術應該屬於單進程守護,因爲我的程序中還不會用到,所以也沒有研究。本文只是講解些一般的雙進程守護,可以達到進程守護的目的,在任務管理器中也可以看到相關的進程。
所謂的雙進程守護,就是兩個程序有部分相同的源代碼,一起啓動後,在一方被某種方式退出時再把它啓動起來,達到雙方都不會被退出的效果。一般的這種雙進程守護,可能會佔用比較多的CPU,本文實現的方法所佔用的CPU還是比較少的。
具體的思路是:
1. 定義一個全局句柄m_hProcess,用於存儲另一進程的句柄。
2. 程序啓動後,先枚舉所有的進程列表,查看是否有另一進程,如果有的話,通過OpenProcess得到其進程句柄,存儲在1中的變量中
3. 此時判斷該句柄是否爲NULL,不爲NULL就用WaitForSingleObject等待直到這個進程被終止,並且再把m_hProcess置NULL
4. 接着3,創建另一進程,因爲不論原來的另一進程被殺掉還是本來進程列表就沒有此進程,都要創建該進程。
5. 創建另一進程句柄,然後等待其結束,如果結束了,重複2,3,4
 
具體代碼:
void CProcWatchDlg::test()
{
         ProcessList();
 
         if( m_hProcess != NULL )
         {
                   WaitForSingleObject(m_hProcess, INFINITE);
                   m_hProcess = NULL;
         }
 
         CreateProcess();
}
 
void CProcWatchDlg::CreateProcess()
{
         // 創建另一進程
CreateProcess();
// 等待結束
         WaitForSingleObject(pi.hProcess, INFINITE);
         // 重複
         test();
}
 
// 枚舉所有進程
void CProcWatchDlg::ProcessList()
{}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章