首先我們拿到該程序的程序模組,用來對比程序中線程的模組是否在這裡面
把這些模組放入到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...