天天看點

c++黑客之單一程序執行個體

  如果我們将病毒木馬植入他人計算機,将會在他人電腦上運作多個執行個體,很有可能增加暴露的風險。是以為了防止這種風險發生,我們需要通過程式設計確定隻出現一個執行個體。

CreateMutex

建立或打開一個已命名或未命名的互斥對象。

函數聲明

具體可直接查詢msdn

CreateMutex(a,b,c)

參數

參數a為指向SECURITY_ATTRIBUTES結構的指針。若值為NULL,則句柄不能由子程序繼承。

參數b值為TRUE并且調用者建立了互斥鎖,則調用的線程将獲得互斥鎖對象的初始所有權。否則,調用線程不會獲得互斥鎖的所有權。

參數c是互斥對象的名稱。區分大小寫,如果為NULL,則建立不帶名稱的互斥對象,若與其他變量名稱比對,則函數報錯。GetLastError會傳回ERROR_INVALID_HANDLE。

傳回值

若函數成功,則傳回新建立的互斥對象的句柄。

若函數失敗,則傳回NULL,要獲得詳細資訊 需要用到GetLastError。

若互斥鎖是一個已命名的互斥鎖,則GetLastError會傳回ERROR_INVALID_HANDLE。

原理

原理其實很簡單,因為第一個程式已經建立了一個有名字的互斥鎖對象,第二個程式去建立時,會檢測到同名互斥鎖,傳回ERROR_ALREADY_EXISTS的狀态碼。

我們隻需檢測GetLastError函數的傳回值是否為ERROR_ALREADY_EXISTS就可以判斷是否出現重複程序。

第一個程式啟動

c++黑客之單一程式執行個體

第二個程式啟動

c++黑客之單一程式執行個體

red team