查詢了網上的資料,發現無非就是幾種:
1、用低階鉤子,但是這種方法試下發現根本就是假的,鉤子根本攔截不到ctrl+alt+del的訊息,只能遮蔽類似於alt+f4,之類的按鍵訊息。
而且第一次安裝安全軟體會提示使用者。
2、用登錄檔禁用,即程式向登錄檔的currentversion\system分支新增enabletaskmgr的值為0的reg_z?(是這樣寫的嗎)的鍵值,但是涉及到登錄檔操作,只要開啟了防毒軟體,防木馬等安全工具,就會被提前攔截,而且在按下快捷鍵時會跳出任務管理器已被管理員禁用的錯誤提示框。
3、先寫好遮蔽ctrl+alt+del的動態鏈結庫,再用程式在winlogon中動態開闢記憶體空間並裝載,即遠端注入。這種方法是最正確的了,但是程式涉及很複雜的**(網上找的好多都是彙編實現的),對於我這種菜鳥來說簡直就是天書。
4、下面這就是我要說的變通實現的方法了。
1)新建乙個mfc的程式工程,在類的宣告中公有成員中加入
cfile hooktaskmgr;
2)在需要遮蔽的地方加入如下**:
hooktaskmgr.open("c:\\windows\\system32\\taskmgr.exe", //任務管理器的檔案位址
cfile::sharedenyread|cfile::sharedenywrite, null); //不可被其他程式訪問
3)在解除遮蔽的地方加入如下**:
hooktaskmgr.close();
//**寫地比較簡便,其實還應該加入獲取系統目錄等**,在遮蔽前還要加入findwindow和postmessage來結束任務管理器(如已開啟)。
程式完成了。遮蔽後試試吧,是不是什麼都不彈出來了?
更新:由於任務管理器的位置具有不確定性,可能存在映像劫持,所以可以加入如下**預先判斷:
hkey hkey;
hkey hkeyroot = hkey_local_machine;
long ret = ::regopenkeyex(hkeyroot,
"software\\microsoft\\windows nt\\currentversion\\image file execution options\\taskmgr.exe",
0, key_read, &hkey);
if(ret != error_success)//如果無法開啟hkey,則中止程式的執行
afxmessagebox("taskmgr.exe not found");
_tchar getvalue[255] = 「」;
dword keytype = reg_sz;//定義資料型別
dword datalen = 80;//定義資料長度
cstring struser = _t("debugger");//要查詢的鍵名稱
long ret1=::regqueryvalueex(hkey, struser, null, &keytype, (lpbyte)getvalue, &datalen);
if(ret1!=error_success)
afxmessagebox("錯誤:無法查詢有關的登錄檔資訊");
return;
cstring a;
a.format("%s", getvalue);
afxmessagebox(a);
//所得到的getvalue即為任務管理器位址。如果不存在,則進行獲取系統目錄的操作,再獲取taskmgr.exe的位址,即可遮蔽了。
遮蔽「任務管理器」
適用於win nt 2k xp,引數key為true,遮蔽 任務管理器 為false,任務管理器 可用 使用方法 disabletaskmgr true procedure disabletaskmgr key boolean var reg tregistry begin reg tregistr...
遮蔽熱鍵 工作列 任務管理器
程式執行時用到taskkeyhook.dll,編譯時用到taskkeyhook.lib,並把下面的類新增到應用程式中,呼叫方法為 ctaskkeymgr disable ctaskkeymgr taskmgr ctaskkeymgr taskkeys ctaskkeymgr taskbar,fals...
任務管理器
dim url systemutil.run e 20111108 20111108 chinese hedexlite.exe process name inputbox 請輸入程序名 程序 hedexlite process list dialog windows 任務管理器 winlistvi...