溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實現(xiàn)簡單的ring3進程保護、hook OpenProcess函數(shù)、簡單分析

發(fā)布時間:2020-08-06 22:41:22 來源:網(wǎng)絡 閱讀:3523 作者:天晴V587 欄目:安全技術

簡單的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)、、


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI