檢視程序是否被注入執行緒(不在系統模組)

2021-10-08 09:58:23 字數 2114 閱讀 2038

首先我們拿到該程序的程序模組,用來對比程序中線程的模組是否在這裡面

把這些模組放入到vector裡面

便利該程序的所有執行緒獲取模組的起始位址和大小,很快就可以得到偽裝執行緒。

#pragma region 依賴

typedef enum _threadinfoclassthreadinfoclass;

typedef struct _client_idclient_id;

typedef struct _thread_basic_informationthread_basic_information,*pthread_basic_information;

extern "c" long (__stdcall *zwqueryinformationthread)(

in handle threadhandle,

in threadinfoclass threadinformationclass,

out pvoid threadinformation,

in ulong threadinformationlength,

out pulong returnlength optional

) = null;

#pragma endregion

有些api或結構體是微軟未公開的,但是被某些大牛給分析出來了,就比如zwqueryinformationthread結構體。

以下是本菜手寫的api檢測**。

while (process32next(hprocesssnap,&process))

// 為快照分派記憶體空間

te32.dwsize = sizeof(threadentry32);

// 獲取第乙個執行緒的資訊

if (!thread32first(hthreadsnap, &te32))

// 拿程序所有模組資訊

handle hsnapshot = createtoolhelp32snapshot(th32cs_snapmodule,process.th32processid);

if (invalid_handle_value == hsnapshot)

moduleentry32 mi;

mi.dwsize = sizeof(moduleentry32);

bool bret = module32first(hsnapshot,&mi);

struct szmoudlestr;

vectorszmoudlevec;

while (bret)

// 遍歷執行緒

while (thread32next(hthreadsnap, &te32))

setlocale(lc_all,".acp");

hinstance hntdll = ::getmodulehandle("ntdll");

(farproc&)zwqueryinformationthread = ::getprocaddress(hntdll,"zwqueryinformationthread");

pvoid startaddr; // 用來接收執行緒入口位址

zwqueryinformationthread(

hthread, // 執行緒控制代碼

&startaddr, // 指向緩衝區的指標

sizeof(startaddr), // 緩衝區的大小

null

);int allflag = true;

int wgflag = 0;

int dbgflag = true;

if(dbgflag)cout << "startaddr :" << startaddr;

for(int i = 0; i < szmoudlevec.size(); i++)

}else

}if(allflag == true)

return true;}}

} }return false;

加油啦!

檢視檔案是否被其他程序訪問

專案中寫了乙個穿網閘檔案傳輸程式,定期掃瞄指定資料夾,並將檔案傳輸至網閘對側。但在使用過程中發現部分檔案經常被截斷傳輸,實際上程式中對該問題已經做了處理,linux系統使用lsof命令可以直接插到該檔案當前有沒有被寫入,windows系統使用嘗試重新命名檔案方式來確定檔案有沒有被占用。但實際應用中在...

window系統檢視埠被哪個程序占用了

一 在windows命令列視窗下執行 執行 cmd c netstat aon findstr 8080 或find tcp 127.0.0.1 80 0.0.0.0 0 listening 2448 埠被程序號為2448的程序占用,繼續執行下面命令 c tasklist findstr 2448 ...

window系統檢視埠被哪個程序占用了並殺死程序

一 在windows命令列視窗下執行 執行 cmd c netstat aon findstr 8080 tcp 127.0.0.1 80 0.0.0.0 0 listening 2448 埠被程序號為2448的程序占用,繼續執行下面命令 c tasklist findstr 2448 thread...