您好,登錄后才能下訂單哦!
簡單的HOOK OpenProcess函數(shù)、達到不讓任務管理器使用OpenProcess來獲取我們要保護的進程的句柄、
從而達到使任務管理器使用TerminateProcess無法結(jié)束該進程的目的、、、
當我們HOOK到OpenProcess的時候、我們要在自己的MyOpenProcess中、判斷一下、所打開的進程是否為我們要保護的進程、如果是簡單的返回錯誤碼0、如果不是就在我們的MyOpenProcess中調(diào)用真正的OpenProcess、
判斷的時候是這樣的、、
先通過我們進程窗口的名字得到窗口的句柄 涉及API FindWindow
再通過我們窗口的句柄得到創(chuàng)建窗口的進程ID、涉及API GetWindowThreadProcessId
這里獲得的ID是我們要保護進程的真實ID而任務管理器獲得ID即是第三個參數(shù)、
所以有下邊的代碼、、、
//獲取 要保護進程的標題 的窗口句柄系統(tǒng)API函數(shù)前使用::為了和類擴展函數(shù)區(qū)別
//為了代碼的健壯性使用TEXT宏、 HWND窗口句柄、
HANDLE WINAPI MyOpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)
{
HWND HProtect = ::FindWindow(NULL,TEXT("Windows當前所有進程"));
if(!HProtect)
{
return ( pRealOpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId) );
} //若不存在則調(diào)用返回
//獲取創(chuàng)建此窗口的進程的ID、保存在 &ProtectId 地址中、
DWORD ProtectId; //下邊找出某個窗口的創(chuàng)建者(線程或進程)
GetWindowThreadProcessId(HProtect,&ProtectId);
if(ProtectId == dwProcessId)//dwProcessId是任務管理器要結(jié)束的進程ID
{
return 0;//如果結(jié)束的是我們的進程則返回錯誤碼0、
}
return ( pRealOpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId) );
}
這樣就可以了
其中HOOK技術使用的是IAT HOOK 前邊已經(jīng)寫過這樣的代碼了、
DLL注入也是用的之前寫過的一個簡單的遠程線程注入技術、
演示、
打開任務管理器、使用DLL注入工具向其注入這個有著簡單保護進程功能的DLL、
然后再用任務管理器結(jié)束我們在DLL里邊保護的進程、此時沒有反映、進程沒有被結(jié)束、、
為什么不彈個框呢、、
因為任務管理器好像在會一直調(diào)用OpenProcess、如果使用MessageBox函數(shù)的話、會一直彈、效果當然很不好了、、
如果想要彈框可以去HOOK一下TerminateProcess函數(shù)、在TerminateProcess里邊實現(xiàn)、、
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。