游戏多开检测的几种实现方法及破解方法参考
目录
枚举进程的多开检测
互斥对象多开检测
信号量多开检测
窗口多开检测
共享内存检测多开
示例代码汇总
游戏多开检测只是对游戏的进程数进行限制,分为事前检测、事中检测、和事后检测。
事中检测和事后检测往往没有提示,是游戏公司封号、处罚的手段,事前检测即禁止游戏多开,本文介绍常见的几种禁止游戏多开的方法,并给出破解方法,仅供参考。
枚举进程的多开检测
基本原理就是枚举所有系统进程,如果发现游戏进程名已经存在则无法继续打开新的进程。
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;
}
游戏多开检测的几种实现方法及破解方法参考相关推荐
- 计算机中十二种常用密码的破解方法(转)
计算机中十二种常用密码的破解方法(转)[@more@] 在日常操作中,我们经常要输入各种各样的密码,例如开机时要输入密码,QQ时也要先输入密码,假如你忘记了这些密码,就有可能用不了机器.打不开文件.不 ...
- 电脑不能开热点的一种可以尝试的解决方法
1.说明: 方法不一定万能 个人情况: win10 以前可以开热点,不知何时起不能再开,会显示:我们无法设置移动热点 2.解决办法 1.管理员方式打开cmd 2.运行命令 netsh int ip r ...
- 游戏人工智能开发之6种决策方法
人工智能遵循着:感知->思考->行动 决策方法:有限状态机(Finite-State Machines),分层状态机(Hierarchical Finite-State Machines) ...
- 游戏里的多开-检测和反检测
一.从生命周期的角度看游戏的多开检测 0x0 事前检测 当你启动第二个游戏的瞬间阻止你这个行为,防患于未然. 特点:不会涉及到封号,这是人为的一个功能. 0x1 事中检测 在游戏运行的过程中进行悄咪咪 ...
- VM虚拟机游戏多开防检测 游戏不能登录处理详解
爱,玩游戏的小伙伴们, 是不是经常多开多个账号游戏同时在线玩呢! 也经常遇到 游戏窗口开的太多, 被提示:"无法再开启新的游戏了!" 对不对,这里偶就教大家如何利用 虚拟机无限多 ...
- 手游多开检测新招式,阻止手游外挂满天飞
在2019年手机游戏用户达到6亿多人,市场规模高达1500多亿元,手游市场繁荣,同时也伴随着手游外挂的泛滥. 现如今手游行业里普遍存在的一个现象,部分恶意玩家使用多开,外挂等程序,给游戏厂商造成了不小 ...
- 【免杀前置课——Windows编程】十三、事件与信号量——事件与互斥体区别、操纵信号量实现游戏多开访问控制(附代码)
事件 事件可以完全控制,其他无法控制线程的执行顺序,但是事件对象可以做到. ***事件(Event)***是在线程同步中最常使用的一种同步对象,事件包含一个使用计数,一个是用来表示自动重置/手动重置的 ...
- 降低指定进程的CPU占用率(适合游戏多开)
应用场景举例 推荐BES软件 应用场景举例 游戏多开,比如<天书世界>网页游戏,单开占用CPU30%左右:最小化能够降低到10%以下. 如果多开,那么CPU就是叠加累计,非常占用CPU资源 ...
- 大漠沙盘sandboxie游戏多开易语言大漠后台绑定的实现
沙盘sandboxie.虚拟机.影子系统都是用来多开,保护应用,防止多开检测的第三方工具,但是很多游戏也是有检测的,特别是不支持后台的绑定.下面我们具体来分享一下. 沙盘sandboxie 1.官网: ...
- 游戏多开的若干对抗方法
第一,进程隐藏 部分游戏通过探测游戏客户端进程是否已经存在来防止重复打开. 游戏多开的办法为启动一个游戏客户端后,将该游戏所有启动的进程全部隐藏.(进程隐藏的办法多了,这个后面一点点学习) 第二,窗口 ...
最新文章
- python可以从事什么工作-学Python能干什么工作?工作前景怎么样?
- matlab for 取数组,for循环中的MATLAB和单元格数组处理
- 现代软件工程讲义 源代码管理
- 用vbs运行CMD不显示窗口的方法汇总
- Redis(一)面试总结精讲
- 数据库设计中的14个技巧(转载)
- CodeVs天梯青铜Bronze题解
- python标准库之random模块
- eclipse为什么文件夹路径真实存在但运行显示路径不存在
- 微软苏州校招1月3日在线编程题2——Disk Storage
- 关于 nor it's doXxx() equivalent is defined in action class 的问题解决办法
- be idle sometimes to_一生中不该错过的经典语录,深刻有道理,看了让人爱不释手!...
- android手游直播怎么推流,安卓手机直播,Total Control手游投屏教程
- docker安装memos
- [COPY]《京东技术解密》——海量订单处理
- 二极管反向恢复时间和反向恢复电流
- 微信小程序地图逆地址解析使用实战
- HTML头部结构详解
- 如何判断平面上两条线段(注意是线段)是否相交?
- 外部用户加入Teams 实时事件(Live Event)注意事项
热门文章
- arcgis中python计算面积的表达式_ArcGIS应用——四种计算图斑面积的方法
- matlab常用了滤波函数小结
- javaweb项目JSP网上书店购物电商系统毕业设计
- 基于Flask+Echarts+爬虫的疫情监控系统
- 看单片机原理图-输入输出电路LED指示、按键输入
- 三极管开关电路_简析三极管开关电路设计
- Scintilla教程(2): 文本检索与修改
- 管理者如何做好“冲突管理”
- 怎么安装mapinfo破解和符号库
- gtx1050ti最稳定的驱动_笔记本1050ti显卡安装最新驱动版本 (415.27) 记录 NVIDIA显卡GeForce系列...