如果我们将病毒木马植入他人计算机,将会在他人电脑上运行多个实例,很有可能增加暴露的风险。所以为了防止这种风险发生,我们需要通过编程确保只出现一个实例。
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就可以判断是否出现重复进程。
第一个程序启动

第二个程序启动
red team