• 首頁
  • 產品
    • 所有產品
    • 歐維斯瀏覽器
  • 關於我們
facebook Email

歐維斯福利設

Always Security Blog

之前我有寫一篇文章說明如何透過視窗的名稱來得知程式是否有在執行(請參考這裡),但是有時視窗名稱是無法得知(背景程式)或無法預期的,像是"工作管理員"這個程式在WIN10叫"工作管理員",但在WIN7叫"Windows 工作管理員",為了提高程式相容性,我們還有一個辦法:透過執行檔的名稱來確定。
我用的方法是把所有處理程序列舉出來再一一檢查是否有我們要找的執行檔。
我們可以利用tlhelp32.h中所提供的API函式:CreateToolhelp32Snapshot()、Process32First()、Process32Next() 來完成我們要做的事。
先利用函式CreateToolhelp32Snapshot()取得一個處理程序的串列

PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);

上述程式碼中的entry是一個PROCESSENTRY32的結構,宣告在tlhelp32.h內,其原型如下:

typedef struct tagPROCESSENTRY32 {
    DWORD dwSize;
    DWORD cntUsage;
    DWORD th32ProcessID;
    ULONG_PTR th32DefaultHeapID;
    DWORD th32ModuleID;
    DWORD cntThreads;
    DWORD th32ParentProcessID;
    LONG pcPriClassBase;
    DWORD dwFlags;
    CHAR szExeFile[MAX_PATH];
  } PROCESSENTRY32;
  typedef PROCESSENTRY32 *PPROCESSENTRY32;
  typedef PROCESSENTRY32 *LPPROCESSENTRY32;

總之他是用來儲存一些有關處理程序控制代碼等的結構,在這邊是snapshot上的一個「迭代器」

再來用Process32First()來初始化entry

Process32First(snapshot,&entry)

之後就可以用Process32Next()來「暴力」求解了,就是在CreateToolhelp32Snapshot()回傳的串列中一一往下找,並且比對entry中的szExeFile是否與要搜尋的程式執行檔名稱相同就行了。

while (Process32Next(snapshot,&entry)==TRUE){
   string binPath = entry.szExeFile;
   if(binPath.find("test.exe") != wstring::npos){
    cout<<"該程式已開啟,PID:"<<entry.th32ProcessID<<endl;
   }
  }

上述程式碼中的test.exe為要找的程式執行檔名稱。
最後完整的程式碼如下,供各位參考:

#include <windows.h>
#include <stdlib.h>
#include <tlhelp32.h>
#include <string>
#include <iostream>
using namespace std;

int main(){
 PROCESSENTRY32 entry;
 entry.dwSize = sizeof(PROCESSENTRY32);
 HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
 if(Process32First(snapshot,&entry)==TRUE){
  while (Process32Next(snapshot,&entry)==TRUE){
   string binPath = entry.szExeFile;
   if(binPath.find("test.exe") != wstring::npos){
    cout<<"該程式已開啟,PID:"<<entry.th32ProcessID<<endl;
   }
  }
 }
 CloseHandle(snapshot);
 system("pause");
 return 0;
}



Share
Tweet
Share
2 意見

1.到【這裡】下載Immunity Debugger(要填些資料,亂打即可)。
2.安裝Immunity Debugger。
3.在桌面建立一個資料夾。
4.把你用VC編譯的執行檔拉到Immunity Debugger裡面(注意喔,VC2017的專案位置預設是在使用者目錄下一個叫做source的資料夾裡,跟之前不一樣)。


5.點選左上角的"View",再點彈出選單的第二項。

6.照著右手邊那一欄的路徑一一把對應的檔案複製到你剛才建 立的資料夾(當然,執行檔也要)。

7.然後把你所建立的資料夾拿給別人就行了,別人只要點開資料夾內的執行檔無論有無裝VC都可以執行了。



今天的教學就到這邊結束,有問題可以在下面留言或到粉絲專頁發問喔!!
Share
Tweet
Share
No 意見
較新的文章
較舊的文章

FACEBOOK

歐維斯福利社

熱門文章

  • 【Windows 全攻略】各版本Windows ISO 下載
  • 【超狂】微軟各產品KMS序號大全!!!
  • 【c++範例】輸出、入變數的值
  • 【電腦秘笈】如何下載YouTube的影片?只需兩個步驟!!!(不用安裝軟體)
  • 最詳盡的CMD命令大全

標籤

C語言範例 C++ C++範例 駭客教學 電腦秘笈 Windows Windows高手秘笈 資安Q&A 病毒 C語言 程式設計 免費軟體 新鮮事 木馬程式 C語言病毒 Python SQL 檔案下載 硬體 Tor 序號大全 沙盒 測試樣本 登錄檔操作 GTA5 信息蒐集 外掛 底層 影音相關軟體 遊戲

開站以來瀏覽量

文章存檔

  • 7月 2019 (1)
  • 5月 2019 (1)
  • 12月 2018 (3)
  • 8月 2018 (2)
  • 7月 2018 (1)
  • 6月 2018 (1)
  • 4月 2018 (3)
  • 3月 2018 (4)
  • 2月 2018 (2)
  • 12月 2017 (2)
  • 11月 2017 (4)
  • 10月 2017 (3)
  • 9月 2017 (18)
  • 8月 2017 (28)
  • 7月 2017 (7)
  • 6月 2017 (3)
  • 5月 2017 (3)

歐維斯版權所有|未經許可禁止轉載