目录

枚举进程的多开检测

互斥对象多开检测

信号量多开检测

窗口多开检测

共享内存检测多开

示例代码汇总


游戏多开检测只是对游戏的进程数进行限制,分为事前检测、事中检测、和事后检测。

事中检测和事后检测往往没有提示,是游戏公司封号、处罚的手段,事前检测即禁止游戏多开,本文介绍常见的几种禁止游戏多开的方法,并给出破解方法,仅供参考。

枚举进程的多开检测

基本原理就是枚举所有系统进程,如果发现游戏进程名已经存在则无法继续打开新的进程。

bool isMulOpenByProcess()
{HANDLE hProShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);if (hProShot == INVALID_HANDLE_VALUE) return false;PROCESSENTRY32 pw{ sizeof(pw)};int count = 0;BOOL  bRet = Process32First(hProShot, &pw);if (!bRet) return false;do{_wcslwr_s(pw.szExeFile, wcslen(pw.szExeFile) + 1);if (wcscmp(pw.szExeFile, L"muldectection.exe") == 0) count++;//wprintf(L"%s\n", pw.szExeFile);} while (Process32Next(hProShot, &pw));if (count > 1) return true;return false;
}

参考破解方法—程序运行时修改进程名

互斥对象多开检测

互斥对象是内核对象,当创建带名称的互斥对象时,如果该互斥对象存在,则创建失败。可以利用这一点实现躲开检测。

bool isMulOpenByMutex()
{HANDLE hMutex = CreateMutexA(NULL, FALSE, "MulDectection");if (ERROR_ALREADY_EXISTS == GetLastError()) return true;return false;
}

参考破解方法—可以在PE文件结构中删除互斥对象的句柄;hook CreateMutexA函数 等

信号量多开检测

信号量是内核对象,同互斥对象的原理类似,创建信号量时可以指定信号量的最大数量,程序运行时,可以让信号量加一,如果没法加一,说明信号量数量达到了设置最大值,以此来进行躲开检测

bool isMulOpenBySemaphore()
{HANDLE hSema;hSema  = OpenSemaphoreA(SEMAPHORE_ALL_ACCESS, FALSE, "MulDectection");if (!hSema) hSema =  CreateSemaphoreA(NULL, 0, 3, "MulDectection");if (!ReleaseSemaphore(hSema, 1, 0)) return true;return false;
}

参考破解方案——可以调用WaitForSingleObject减少信号量数量

窗口多开检测

程序运行时寻找是否有同名窗口,如果已经存在则为程序多开。

HWND hWnd=FindWindowA(NULL,"ConsoleWindowClass");if (hWnd != NULL) return true;

参考破解方案——修改窗口名

共享内存检测多开

通过进程间共享内存段的方式来检测多开

#pragma data_seg("_hdata")
int g_count = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:_hdata,RWS")bool isMulOpenByMemory()
{g_count++;if (g_count > 1)return true;return false;
}

参考破解方案——修改共享内存段的变量的值

示例代码汇总

#include<Windows.h>
#include<iostream>
#include<tlhelp32.h>#pragma data_seg("_hdata")
int g_count = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:_hdata,RWS")bool isMulOpenByProcess()
{HANDLE hProShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);if (hProShot == INVALID_HANDLE_VALUE) return false;PROCESSENTRY32 pw{ sizeof(pw)};int count = 0;BOOL  bRet = Process32First(hProShot, &pw);if (!bRet) return false;do{_wcslwr_s(pw.szExeFile, wcslen(pw.szExeFile) + 1);if (wcscmp(pw.szExeFile, L"muldectection.exe") == 0) count++;//wprintf(L"%s\n", pw.szExeFile);} while (Process32Next(hProShot, &pw));if (count > 1) return true;return false;
}bool isMulOpenByMutex()
{HANDLE hMutex = CreateMutexA(NULL, FALSE, "MulDectection");if (ERROR_ALREADY_EXISTS == GetLastError()) return true;return false;
}bool isMulOpenBySemaphore()
{HANDLE hSema;hSema  = OpenSemaphoreA(SEMAPHORE_ALL_ACCESS, FALSE, "MulDectection");if (!hSema) hSema =  CreateSemaphoreA(NULL, 0, 3, "MulDectection");if (!ReleaseSemaphore(hSema, 1, 0)) return true;return false;
}bool isMulOpenByFindWindow()
{HWND hWnd=FindWindowA(NULL,"ConsoleWindowClass");if (hWnd != NULL) return true;return false;
}bool isMulOpenByMemory()
{g_count++;if (g_count > 1)return true;return false;
}
int main()
{if (isMulOpenByMemory()){MessageBoxA(NULL, "程序禁止多开", "MulDectection", MB_OK);return -1;}MessageBoxA(NULL, "打开成功!", "MulDectection", MB_OK);return 0;
}

游戏多开检测的几种实现方法及破解方法参考相关推荐

  1. 计算机中十二种常用密码的破解方法(转)

    计算机中十二种常用密码的破解方法(转)[@more@] 在日常操作中,我们经常要输入各种各样的密码,例如开机时要输入密码,QQ时也要先输入密码,假如你忘记了这些密码,就有可能用不了机器.打不开文件.不 ...

  2. 电脑不能开热点的一种可以尝试的解决方法

    1.说明: 方法不一定万能 个人情况: win10 以前可以开热点,不知何时起不能再开,会显示:我们无法设置移动热点 2.解决办法 1.管理员方式打开cmd 2.运行命令 netsh int ip r ...

  3. 游戏人工智能开发之6种决策方法

    人工智能遵循着:感知->思考->行动 决策方法:有限状态机(Finite-State Machines),分层状态机(Hierarchical Finite-State Machines) ...

  4. 游戏里的多开-检测和反检测

    一.从生命周期的角度看游戏的多开检测 0x0 事前检测 当你启动第二个游戏的瞬间阻止你这个行为,防患于未然. 特点:不会涉及到封号,这是人为的一个功能. 0x1 事中检测 在游戏运行的过程中进行悄咪咪 ...

  5. VM虚拟机游戏多开防检测 游戏不能登录处理详解

    爱,玩游戏的小伙伴们,  是不是经常多开多个账号游戏同时在线玩呢! 也经常遇到 游戏窗口开的太多, 被提示:"无法再开启新的游戏了!" 对不对,这里偶就教大家如何利用 虚拟机无限多 ...

  6. 手游多开检测新招式,阻止手游外挂满天飞

    在2019年手机游戏用户达到6亿多人,市场规模高达1500多亿元,手游市场繁荣,同时也伴随着手游外挂的泛滥. 现如今手游行业里普遍存在的一个现象,部分恶意玩家使用多开,外挂等程序,给游戏厂商造成了不小 ...

  7. 【免杀前置课——Windows编程】十三、事件与信号量——事件与互斥体区别、操纵信号量实现游戏多开访问控制(附代码)

    事件 事件可以完全控制,其他无法控制线程的执行顺序,但是事件对象可以做到. ***事件(Event)***是在线程同步中最常使用的一种同步对象,事件包含一个使用计数,一个是用来表示自动重置/手动重置的 ...

  8. 降低指定进程的CPU占用率(适合游戏多开)

    应用场景举例 推荐BES软件 应用场景举例 游戏多开,比如<天书世界>网页游戏,单开占用CPU30%左右:最小化能够降低到10%以下. 如果多开,那么CPU就是叠加累计,非常占用CPU资源 ...

  9. 大漠沙盘sandboxie游戏多开易语言大漠后台绑定的实现

    沙盘sandboxie.虚拟机.影子系统都是用来多开,保护应用,防止多开检测的第三方工具,但是很多游戏也是有检测的,特别是不支持后台的绑定.下面我们具体来分享一下. 沙盘sandboxie 1.官网: ...

  10. 游戏多开的若干对抗方法

    第一,进程隐藏 部分游戏通过探测游戏客户端进程是否已经存在来防止重复打开. 游戏多开的办法为启动一个游戏客户端后,将该游戏所有启动的进程全部隐藏.(进程隐藏的办法多了,这个后面一点点学习) 第二,窗口 ...

最新文章

  1. python可以从事什么工作-学Python能干什么工作?工作前景怎么样?
  2. matlab for 取数组,for循环中的MATLAB和单元格数组处理
  3. 现代软件工程讲义 源代码管理
  4. 用vbs运行CMD不显示窗口的方法汇总
  5. Redis(一)面试总结精讲
  6. 数据库设计中的14个技巧(转载)
  7. CodeVs天梯青铜Bronze题解
  8. python标准库之random模块
  9. eclipse为什么文件夹路径真实存在但运行显示路径不存在
  10. 微软苏州校招1月3日在线编程题2——Disk Storage
  11. 关于 nor it's doXxx() equivalent is defined in action class 的问题解决办法
  12. be idle sometimes to_一生中不该错过的经典语录,深刻有道理,看了让人爱不释手!...
  13. android手游直播怎么推流,安卓手机直播,Total Control手游投屏教程
  14. docker安装memos
  15. [COPY]《京东技术解密》——海量订单处理
  16. 二极管反向恢复时间和反向恢复电流
  17. 微信小程序地图逆地址解析使用实战
  18. HTML头部结构详解
  19. 如何判断平面上两条线段(注意是线段)是否相交?
  20. 外部用户加入Teams 实时事件(Live Event)注意事项

热门文章

  1. arcgis中python计算面积的表达式_ArcGIS应用——四种计算图斑面积的方法
  2. matlab常用了滤波函数小结
  3. javaweb项目JSP网上书店购物电商系统毕业设计
  4. 基于Flask+Echarts+爬虫的疫情监控系统
  5. 看单片机原理图-输入输出电路LED指示、按键输入
  6. 三极管开关电路_简析三极管开关电路设计
  7. Scintilla教程(2): 文本检索与修改
  8. 管理者如何做好“冲突管理”
  9. 怎么安装mapinfo破解和符号库
  10. gtx1050ti最稳定的驱动_笔记本1050ti显卡安装最新驱动版本 (415.27) 记录 NVIDIA显卡GeForce系列...