天天看点

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