标题: [其他] 求问批处理不影响程序本身批量多开窗口如何做? [打印本页]
作者: qianjiaren 时间: 2024-3-12 23:09 标题: 求问批处理不影响程序本身批量多开窗口如何做?
游戏本身是有账号登录的,
因为本身我并没有影响游戏,就是为了多开窗口,方便做任务,不需要一个一个账号切换来点击做任务,因为某些不能跳过的动态时间很耗费时间,而这个时间我可以去做其他号任务,游戏叫以闪亮之名,结果我多开了窗口,但是提示我检测还是有窗口存在然后自动关闭,- @echo off
- echo Starting QQ...
- start "" "C:\LifeMakeoverLauncher_ob_zh_20\LifeMakeoverGame_ob_zh_20\Azure\Binaries\Win64\Azure-Win64-Shipping.exe"
- echo Starting WangWang...
- reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "C:\LifeMakeoverLauncher_ob_zh_20\LifeMakeoverGame_ob_zh_20\Azure\Binaries\Win64\Azure-Win64-Shipping.exe" /t REG_SZ /d RunAsInvoker
- start "" "C:\LifeMakeoverLauncher_ob_zh_20\LifeMakeoverGame_ob_zh_20\Azure\Binaries\Win64\Azure-Win64-Shipping.exe"
复制代码
求问,以上如何改?
我只是想绕过他的恶心事前检测,也并没有更改他的程序本身,毕竟这是联网的游戏,就是想多开两个窗口,毕竟她这里面动态不能跳过太耗费时间了,然后还占用我电脑,,因为是64位程序,互联网常见的甚至大佬分享的多开软件全部都不能使用
作者: qianjiaren 时间: 2024-3-12 23:19
戏多开检测只是对游戏的进程数进行限制,分为事前检测、事中检测、和事后检测。
事中检测和事后检测往往没有提示,是游戏公司封号、处罚的手段,事前检测即禁止游戏多开
枚举进程的多开检测
基本原理就是枚举所有系统进程,如果发现游戏进程名已经存在则无法继续打开新的进程
————————————————
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;
}
参考破解方案——修改共享内存段的变量的值
作者: qianjiaren 时间: 2024-3-12 23:23
我只是想绕过他的恶心事前检测,也并没有更改他的程序本身,毕竟这是联网的,就是多开两个窗口,毕竟她这动态不能跳过太耗费时间了,然后还占用我电脑,,因为是64位程序,互联网常见的多开软件全部都不能使用
作者: Batcher 时间: 2024-3-13 08:28
回复 3# qianjiaren
使用VMware或VirtualBox创建几个虚拟机,每个虚拟机开一个游戏试试。
作者: czjt1234 时间: 2024-3-13 09:58
还是虚拟机走起
作者: qianjiaren 时间: 2024-3-13 11:53
本帖最后由 qianjiaren 于 2024-3-13 12:06 编辑
回复 4# Batcher
这个游戏和阴阳师一样的电脑桌面,等于我要先隔离安装一个新系统,然后再在这个新系统里面安装这占内存gpu超大的破游戏,然后等于我要切换新系统,在运行该游戏,,,,,然后原来桌面哪个游戏我又要切换系统运行游戏,,,,我的天,,,就没办法隔离软件操作吗?批量开窗口代码是能用,还没进登录界面就强制性的弹出窗口把窗口关闭,,,所以我就卡在这一步,不知道用批量处理如何绕过
作者: qianjiaren 时间: 2024-3-13 11:57
还是虚拟机走起
czjt1234 发表于 2024-3-13 09:58
这是和阴阳师差不多的电脑桌面,而且他是64位,不能隔离软件开虚拟要隔离系统,切换起来特别麻烦,所以我才来求助的
作者: czjt1234 时间: 2024-3-13 12:39
虚拟机就是你说的隔离软件,而不是要切换系统
作者: qianjiaren 时间: 2024-3-13 13:05
回复 8# czjt1234
不行啊,这里我无法发送图片什么鬼,打开另外一个窗口就自动弹出一个小窗口,说已存在请关闭
作者: Batcher 时间: 2024-3-13 13:47
回复 9# qianjiaren
如果需要上传文件,请用使用网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: Batcher 时间: 2024-3-13 13:54
回复 6# qianjiaren
2楼前4行描述的非常清楚,相信是你搜索到的内容。但是你可能没有理解它的含义。
简单来说,BAT脚本自身无法突破某些游戏多开的强检测机制(判断进程数或其它)。不必在这条路上浪费时间。
顶楼代码使用start命令只能应付微信等这种弱检测机制。
作者: qianjiaren 时间: 2024-3-13 13:57
https://ibb.co/MsjfNQ2
查看https://ibb.co/MsjfNQ2
作者: qianjiaren 时间: 2024-3-13 13:58
回复 11# Batcher
就是弹出这个我无法关闭,想知道如何关闭
作者: czjt1234 时间: 2024-3-13 14:55
程序员想不让你多开,如果一个简单的批处理都能绕开程序员的限定,那这个程序员是不是该下岗?
再说,就算你找到办法多开了,一旦程序员发现了,他发布个更新就可以再把这个办法禁掉
所以说,最保险的还是VMware虚拟机
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |