任務管理器的實現及原始碼

2021-07-05 10:11:22 字數 3699 閱讀 5566

任務管理器

這是培訓的第3個專案——任務管理器。

這個專案做起來比較坑爹,本人之前學的嵌入式的linux的qt,有了先入為主的嫌疑所以在短短1個星期實在不能完完全全的投入到mfc的介面編輯方式,乙個星期的時間在前期準備時試過在vs12上裝上qt外掛程式,但是感到用起來巨胃疼,於是乎只能用sdk寫。

這是小弟的任務管理器中的模組功能

其中遍歷程序/模組/執行緒是通過擷取時間片再通過 遍歷moduleentry32/threadentry32/processentry32結構體得到詳細資訊。貼出遍歷程序 + 殺死程序的模組**:

bool bianlijincheng::jincheng(vector &m_vecprocesslist)

; // 程序快照資訊

stcpe32.dwsize = sizeof(processentry32);

m_vecprocesslist .clear();

// 建立程序相關的快照控制代碼

if (!hprocesssnap)

// 通過程序快照控制代碼獲取第乙個程序資訊

if (!process32first(hprocesssnap,&stcpe32))

// 迴圈遍歷程序資訊

do ; // 獲取程序映像路徑

wcscpy_s(stcinfo.szprocess,stcpe32.szexefile); // 獲取優先順序資訊

hprocess = openprocess( process_query_information,false,stcpe32.th32processid);

if (hprocess)

// 獲取程序其他資訊 ↓

//stcinfo.dwpid = stcpe32.th32processid;

stcinfo.dwprinorityclass=stcpe32.pcpriclassbase;

stcinfo.dwthreadcount= stcpe32.cntthreads;

stcinfo.dwparentprocess= stcpe32.th32parentprocessid;

stcinfo.szprocess[max_path]=(wchar)stcpe32.szexefile;

stcinfo.name =stcpe32.cntusage;

// 獲取的資訊儲存到向量中

m_vecprocesslist.push_back(stcinfo);

} while (process32next(hprocesssnap,&stcpe32));

// 關閉控制代碼退出函式

closehandle(hprocesssnap);

return 1;

}

下面來詳解一下模組注入功能,先貼**

#pragma once

#include "stdafx.h"

#include "注入.h"

bool zhuru::injectdll (dword pid, const std::wstring & dllfullpath)

size_t size = (dllfullpath.length() + 1) * sizeof (wchar_t); //dll 路徑大小

lpvoid addr = virtualallocex ( //分配空間

hprocess, null, size,

mem_reserve | mem_commit,

page_execute_readwrite);

if (null == addr)

size_t sizewritten = 0;

if (false == writeprocessmemory ( // 寫入dll的路徑

hprocess, addr, dllfullpath.c_str(), size, &sizewritten) || sizewritten != size)

auto ploadlibraryw = getprocaddress ( //獲得loadlibraryw的函式位址

getmodulehandlew (l"kernel32.dll"),

"loadlibraryw");

if (null == ploadlibraryw)

handle hthread = createremotethread ( // 建立遠端執行緒

hprocess, null, 0,

(lpthread_start_routine) ploadlibraryw, addr,

0, null);

if (null == hthread || invalid_handle_value == hthread) //控制代碼是否有效

if (wait_object_0 != waitforsingleobject (hthread, 1000000)) //等待一秒

dword exitcode =0; //獲得執行緒的退出碼

if (false == getexitcodethread (hthread, &exitcode)) //如果沒有成功獲得退出碼

if (0 == exitcode) //退出碼是0 注入失敗

closehandle(hthread);

virtualfreeex (hprocess, addr, 0, mem_release);

closehandle (hprocess);

messagebox(0,l"inject successfully !",0,0);

return 1;

}

其實也沒什麼可「詳解」的,一句話建立遠端執行緒實現注入功能

#pragma once

#include "stdafx.h"

#include "解除安裝dll.h"

bool deledll::deledll(dword pid, handle d_handle)

// 3.建立遠端程序

hthread = createremotethread(hprocess,null,0,pfnthreadrtn,d_handle,0,null);

if(!hthread)

// 4.等待遠端執行緒終止

waitforsingleobject(hthread, infinite);

// 5.釋放相關資源並關閉控制代碼

if(hthread) closehandle(hthread);

if(hprocess) closehandle(hprocess);

return 1;

}

這段**其中相容性有問題在專案講解時的教師機就無法解除安裝

執行時的

over 歡迎大神指導。

任務管理器

dim url systemutil.run e 20111108 20111108 chinese hedexlite.exe process name inputbox 請輸入程序名 程序 hedexlite process list dialog windows 任務管理器 winlistvi...

linux任務管理器

在redhat2.4.20 8下編譯通過 由於本程式視窗部分由glad工具編制,源 不易貼出,現只給出部分 函式的 1,退出 按鈕 函式 void on button9 clicked gtkbutton button,gpointer user data 2,關機 按鈕 函式 void on bu...

遮蔽「任務管理器」

適用於win nt 2k xp,引數key為true,遮蔽 任務管理器 為false,任務管理器 可用 使用方法 disabletaskmgr true procedure disabletaskmgr key boolean var reg tregistry begin reg tregistr...