游戏控制双开的解决办法
游戏多开原理
游戏多开原理在计算机领域,游戏多开是指在同一台电脑上同时运行多个游戏客户端的技术。
这项技术在玩家群体中非常受欢迎,因为它可以让玩家同时在多个游戏账号上进行游戏,提高游戏效率和体验。
那么,游戏多开的原理是什么呢?接下来我们将详细介绍游戏多开的原理及其实现方式。
首先,游戏多开的原理是基于操作系统的多任务处理能力。
现代操作系统都具有多任务处理的能力,可以同时运行多个程序,每个程序都在独立的内存空间中运行。
游戏多开利用了这一特性,通过一些技术手段,让多个游戏客户端在不同的进程中运行,从而实现了多个游戏账号的同时登录和游戏。
其次,游戏多开的实现方式有多种,其中比较常见的方式是使用虚拟机或者多开器。
虚拟机是一种软件,可以在一台物理计算机上模拟出多台虚拟计算机,每台虚拟计算机都可以独立运行操作系统和程序。
通过在虚拟机中安装游戏客户端,玩家可以实现多个游戏账号的同时登录和游戏。
而多开器则是一种专门针对某款游戏进行开发的软件,它可以绕过游戏客户端的限制,让玩家同时启动多个游戏客户端,实现多开的效果。
另外,游戏多开的原理还涉及到游戏客户端和服务器之间的通讯机制。
游戏客户端和服务器之间的通讯是通过网络实现的,每个游戏账号在服务器上都有唯一的标识。
游戏多开需要绕过游戏客户端对账号标识的限制,让多个游戏客户端能够同时登录到服务器上,这就需要对游戏客户端进行一定程度的修改和破解。
总的来说,游戏多开的原理是基于操作系统的多任务处理能力,利用虚拟机或者多开器等技术手段,绕过游戏客户端对账号标识的限制,实现多个游戏账号的同时登录和游戏。
当然,需要注意的是,游戏多开有时会违反游戏运营商的规定,可能会导致账号被封禁或者其他风险,因此玩家在使用游戏多开的技术时需要谨慎使用,遵守游戏运营商的规定,以免造成不必要的损失。
龙之谷 双开
龙之谷双开介绍《龙之谷》是一款由韩国公司Eyedentity Games开发并运营的大型多人在线角色扮演游戏(MMORPG)。
游戏于2005年在韩国上线,并在全球范围内获得了相当大的成功。
随着游戏的不断发展,玩家们开始追求更多的乐趣体验,其中之一就是“双开”。
双开指的是在一台计算机上同时运行两个或多个游戏客户端。
在《龙之谷》中,双开允许玩家同时控制两个游戏角色,从而可以更高效地完成任务、获取装备和经验值。
本文将介绍如何实现《龙之谷》的双开,并提供一些有用的技巧和建议。
实现双开的方法实现《龙之谷》的双开有一些不同的方法,下面我们将介绍两种常用的方法。
方法一:使用虚拟机虚拟机是一种软件,可以在计算机上创建一个虚拟的操作系统环境,从而可以在同一台电脑上运行多个独立的操作系统。
1.首先,下载并安装一款虚拟机软件,比如VMwareWorkstation或VirtualBox。
2.启动虚拟机软件,并创建一个新的虚拟机。
在创建过程中,选择一个合适的操作系统,比如Windows 10。
3.在虚拟机中安装《龙之谷》游戏客户端,然后登录一个游戏角色。
4.在虚拟机中,打开一个新的浏览器窗口,并访问《龙之谷》的官方网站。
下载游戏客户端并安装。
5.在主机和虚拟机中分别启动《龙之谷》游戏客户端,并登录不同的游戏角色。
现在,你可以同时控制两个游戏角色了。
方法二:使用多账户登录这种方法需要使用多个游戏账户。
以下是具体步骤:1.在电脑上安装游戏客户端。
2.打开一个游戏客户端,并登录一个账号。
3.使用第二个游戏客户端登录另一个游戏账号。
你可以在同一台电脑上使用不同的游戏账号登录。
4.现在,你可以同时操控两个游戏角色。
需要注意的是,使用多账户登录可能会需要更多的系统资源,因此建议确保你的电脑具备足够的内存和处理器性能。
双开的优势使用双开技术在《龙之谷》中具有一些明显的优势:1.任务效率提高:通过同时操纵两个游戏角色,你可以更快地完成任务,节省时间。
系统游戏双开及实现窗口
游戏双开及窗口化
一:切屏
1:右击飚车世界图标属性快捷方式运行方式改为最大化
2:重启电脑
3:打开进程管理器点击飚车世界图标登陆游戏
4:Alt+Tab 实现随意切屏且不掉线
二:窗口化
1:游戏中分辨率设置为[800*600]
2:切屏至桌面点击显示桌面设置桌面分辨率为最大即可
[尽量在进游戏之前关闭桌面及窗口特效,方法请百度]
三:双开
1:切屏出来后打开控制面板进入用户帐户管理账户创建一个标准用户
2:下载:软媒WIN7优化大师如图设置
3:点击开始切换用户
4即可在另一用户中登陆另一个游戏帐号
By: k1
QQ:497574802
2013-5-10
请低调使用,谨防封号。
tgp的dnf怎么双开
tgp的dnf怎么双开dnf双开能够解决玩家许多的烦恼,那么tgp如何双开dnf呢?下面是小编为你整理的tgp的dnf双开的方法,希望对大家有帮助!tgp的dnf双开的方法登录TGP,用第一个账号进人TGP主界面。
02点击DNF游戏,然后在点击右下角“开始游戏”。
03则第一个游戏已经登录号了,然后返回TGP。
04在TGP主界面中,找到DNF游戏右上角的向下的箭头点击一下,然后点击“选择账号”。
05然后点击“添加小号”,输入小号,并点击“开始游戏”。
06第二个小号则登陆成功了,完成了DNF的双开。
如何让你成为真正的商人什么是商人,商朝的商业十分繁荣,有“商葩翼翼,四方之极”之称。
商民善于经商,后世将经商的人称为“商人”.就是买东西,把东边的买卖到西边去,变贵贱,调余缺,度远近。
了解了商人这个词的来历,我想对与喜欢生活和游戏中做买卖的人都有好处,DNF中最大的人群是什么呢,不是商人而是普通的玩家,或者说是老百姓,百姓中有老玩家也有新手,就好象现实社会中有成年人也有未成年人一样。
玩的久的老百姓了解了自己需要什么装备,任务需要什么道具,然而自己又没能力去收集齐全,从而他们为了满足自己的需求,就出现了交易,这是商人出现的最原始要求,那就是先满足自己的需求。
当满足自己的一切需求后,他突然发现,原来还有很多人很多职业都有和自己一样的需求,甚至有人出价比自己还高,聪明的马上就发现了利润的空间,从而买卖自己的存货,低收高出,市场诞生了。
说了这么多概念上的话,那么你到底是不是个商人,商人是做买卖的人,但是做买卖的不一定就都是商人,大道理不说了,举个例子,去6线辛达那条街,一看你就明白商人和非商人的区别,那条街上一般出售的都是粉装和齐全的套装,很多人都惊讶怎么可能有这么多粉的卖啊!其实他们是所谓的商人!(为什么是所谓的,后文说明)他们的区别就是用各种方法赚取利润,一句话只要赚钱就可以。
他们收集极品给需要的人这是商人该做的但是具体有什么手段得到商品就不得而知了。
本栏目主要讲解如何解除禁止双开方面的各种方案
本栏目主要讲解如何解除禁止双开方面的各种方案.为什么要禁止双开或多开呢?原因很多.但我们的软件中若能有解开多开的功能,可以有很多的好处.比如一台机子可以同时登陆多个帐号上去玩.要想解除中禁止双开的功能,就得先了解禁止双开方面的原理.其实想要禁止双开并不难. 禁止双开的方法也有很多.但其基本的方式,本栏目会都给介绍一下.在操作系统中每个在运行的进程都是独立的.禁双开的程序在运行时,需要留下一些专有的特征供第二次运行时检测用,当第二次运行时,会去尝试检测有没有某个专有的特征.若该特征已存在则结束自身进程.若不存在则继续运行.通过这种方式,就能简单的达到禁止双开的目的.本文介绍第一种,是比较常用的.通过窗口标题与窗口类名的特征来达到禁止双开的功能.如果我们的程序的主要窗口类名与窗口标题是唯一的,一般不会与他人的程序出现相同的情况时,可以用如下API来实现禁止双开功能.查找窗口的API在程序运行载入主窗口之前,先通过该API检测一下是否已有存在相应标题的窗口了,若已存在时,自结束自身进程的运行.反之继续运行.利用窗口标题与类名来防止程序被多开上面的这段代码,简单的示例了如何使用这个API来达到禁止双开的方式.根据这种禁止双开的方式.只要我们在运行第二个进程之前,先把第一个进程的标题修改成别的后,就能正常运行第二个进程,也就能达到解除双开的功能了..呵呵,简单吧! 见下面的代码,就能说明这个方法的使用了.通过修改窗口的标题达到破解利用标题禁多开的程序方式与效果上面的代码,就是一种极简单的解除窗口标题方式的禁止双开的功能了...但有些时候,事情可能并不是这么容易能解决的,我们修改了其窗口标题,虽然能使其正常运行了,但该进程若在后期运行过程中,若取自已标题进行一次判断有没有被改变的话,马脚自然就露出来了.对于这种情况,需要在创建第二个进程之前,修改已存在的进程的窗口标题后,新进程创建出来后马上把其窗口标题改回去.但是,这很难操作.所以并不推荐.所以若不想通过修改其原窗口标题来达到多开,必需得HOOK其用来检测窗口禁止多开时的那些API.如这里使用的FindWindowA 这个API.只要在创建进程时,注入个DLL,对该API进行HOOK.在HOOK到的参数时,判断窗口标题.进行返回0即可.下面贴上EXE的代码采用安装线程DLL()的方式注入mydll.dll文件在注入EXE的代码中,采用2.0版模块中新增的安装线程DLL() 方式进行注入. 下面再贴上DLL的代码.采用APIHOOK来拦截FindWindowA例子程序运行效果工具、源码可在网站首页公布的网盘中下载很多的或一些共享软件,都在采用窗口标题方式来进行禁止多开.大家可以试试修改前个已创建进程的窗口标题一段时间,那个进程会不会出错.若不会出错说明修改标题无影响.然后再运行第二个进程看看能不能运行起来.需要注意的是,并不定都会采用FindWindowA 该API来检测窗口,事实上,可用来查窗口的API有很多.只是FindWindowA 相对比较常用罢了.对于其它的API检测窗口,可就得调试分析了. 另外有些是用文件名来判断的,只要复制一份EXE重新命令后就能双开了前文讲解了有些使用窗口的标题类名特征来禁止程序双开.本文接着讲解使用进程名来禁止双开与解除的方式.采用程序名来限制双开的情况很多.这类程序进程被创建时,会枚举系统里现有的所有进程,进行名称对照,发现与已相同存在时,就结束自身进程.见下面的简单例子使用枚举进程来禁止程序被多开上述的代码在进程创建后,会枚举所有进程,然后进行程序名称的判断,发现有存在同名时就结束.对于这类的,可以做个简单的解禁功能,只要把要运行的程序文件复制一份为别的文件名,然后运行之即可.见下面代码.先复制为临时文件再用创建进程并指定原程序目录来运行上述代码把目标程序复制一份临时文件,运行之,就可能达解除双开的目的了.但有些时候,情况并没有这么简单,比如,有些程序进程被运行后,自已再检测自身的进程文件名是不是被改成别的了,禁止被改名的情况下,上述的方式就行不通了. 下面再贴一段APIHOOK枚举进程时的一个API.Process32Next只需要APIHOOK Process32Next 进行程序名的判断,发现同名时,就再调用一次Process32Next 取下个进程结构去即可. EXE的代码与上文的一致,下面为DLL的代码.mydll.dll 代码.采用APIHOOK拦截Process32Next实现解除多开限制工具、源码可在网站首页公布的网盘中下载很显然,这一切并不太难..可以通过APIHOOK实现一些简单的进程隐藏,DLL隐藏等.文章中介绍得简单,只能给大家开扩一下思路.不过需要注意的是,可以用来枚举出进程和DLL模块等的API还是蛮多的,例如作坊2.5模块里的枚举进程线程模块等功能不使用R3层的API实现的,无法被APIHOOK给拦截到.本文再介绍一种常用的禁双开的方式,英文名叫Mutex 中文名叫突变体或互斥体等. 作坊教程里称它为互斥体.相同名称的互斥体对象在系统里也是唯一的. 也就是说,若有一个进程已经创建了某个名称的互斥体对象后,其它的进程再去创建该名称的互斥体对象时.不会新建,而且把之前已创建的互斥体对象打开,返回该互斥体对象句柄.如果是打开的话另外会设置API错误码183 .所以在很多程序中就会使用这个方式来实现禁止多开.例如QQ遊戲大厅就是这种方式.下面为使用互斥体进行禁止多开的简单例子.先贴上本例用到的几个API下面是如何使用互斥体来实现禁止双开的代码.使用互斥体实现禁止程序多开采用互斥体的程序可以用procexp.exe这个程序查看到.要解除这类的双开,只要在运行新进程前,先尝试着把所有进程中的该名称的互斥体句柄全关掉即可.下面贴上如何枚举所有进程中的句柄,并且取出这些互斥体句柄对象的名称.判断是否是\BaseNamedObjects\禁止双开示例” 如果是的话,则使用一个远线程在目标进程里执行CloseHandle 这个API来关掉句柄.注意,枚举出来的其它进程里的句柄,只属于那个进程才能用的,在我们的进程里是不能直接使用的,需要把那个句柄拷贝一份过来,才能在我们的进程中使用.枚举出所有的句柄,找到目标进程里的某种对象句柄使用远线程进行关闭上面的代码有些技术性和技巧性.大家慢慢的试着理解吧!同样的,本文也给出了一个APIHOOK的方案,DLL中的代码见下面.因为创建互斥体时,若互斥体已存在时,会设置API错误码为185.所以我们只需要HOOK创建互斥体时的那个API,判断其参数三的互斥体名称.然后把API错误码置为0即可.采用APIHOOK拦截CreateMutexA 达到解除双开限制功能工具、源码可在网站首页公布的网盘中下载本文介绍完毕,采用互斥体进行禁止双开的使用率是很高的.除了这三文所介绍的这些方式禁双开外,还有其它如独占方式打开文件或共享内存或注册表等等都可以做到禁止双开的目的.本节教程采用解除双开限制-01 里的禁止双开示例.exe 进行.先运行一个禁止双开示例.exe 进程再用OD载入第二个禁止双开示例.exe 进程.分别下断点在以下两个API上.目的在于断在双开判断后将要终止进程时.ExitProcessTerminateProcess按F9运行OD.会中断在ExitProcess .见堆栈窗口内容0012FE54 1002A273 /CALL 到ExitProcess 来自krnln.1002A26D0012FE58 00000000 \ExitCode = 0然后在汇编里转到1002A26D 处这里krnln是易语言的核心支持库.1002A258 55 push ebp ; 核库某入口1002A259 8BEC mov ebp, esp1002A25B 8B45 08 mov eax, dword ptr [ebp+8]1002A25E 50 push eax1002A25F B9 E8B91310 mov ecx, 1013B9E81002A264 E8 D7270300 call 1005CA401002A269 8B4D 08 mov ecx, dword ptr [ebp+8]1002A26C 51 push ecx1002A26D FF15 E8830D10 call dword ptr [<&KERNEL32.ExitProcess>] ; ExitProcess1002A273 5D pop ebp1002A274 C3 retn ; 函数尾为了能追查到是什么地方CALL这个核心库.在该核库函数入口处1002A258下断点,然后OD重载禁止双开示例.exe .我的的目的需要是一直的往向走,直到在EXE的领空里为止,因为禁止双开的判断函数都是在EXE里的,不太可能会在别的地方.按F9运行,会中断在该核库函数入口1002A258处.见堆栈窗口内容0012FE60 00403367 返回到禁止双开.00403367 来自禁止双开.004033E1回到在汇编里转到00403367 处. 这里的00403367已经是禁止双开示例.exe领空了.可以见到如下汇编代码段00403321 55 push ebp ; 子程序入口00403322 8BEC mov ebp, esp00403324 81EC 10000000 sub esp, 100040332A 8965 FC mov dword ptr [ebp-4], esp0040332D 68 D3304000 push 004030D3 ; 入栈窗口标题00403332 68 E0304000 push 004030E0 ; ASCII "Afx:10000000:b:10011:1900015:0" 00403337 B8 00000000 mov eax, 0 ; 设置EAX=00040333C E8 BE000000 call 004033FF ; 第一个CALL 调用FindWindowA00403341 3965 FC cmp dword ptr [ebp-4], esp00403344 74 0D je short 00403353 ; 跳转指令00403346 68 06000000 push 60040334B E8 A9000000 call 004033F9 ; 第二个CALL00403350 83C4 04 add esp, 400403353 8945 F4 mov dword ptr [ebp-C], eax ; EAX值入栈00403356 837D F4 00 cmp dword ptr [ebp-C], 0 ; 比较值<>00040335A 0F84 0A000000 je 0040336A ; 跳转指令00403360 6A 00 push 000403362 E8 7A000000 call 004033E1 ; 调用易核库函数结束()00403367 83C4 04 add esp, 4 ; 核库函数调用返回到这里0040336A 68 02000080 push 800000020040336F 6A 00 push 000403371 68 01000000 push 100403376 6A 00 push 000403378 6A 00 push 00040337A 6A 00 push 00040337C 68 01000100 push 1000100403381 68 00000106 push 601000000403386 68 01000152 push 520100010040338B 68 03000000 push 300403390 BB 20030000 mov ebx, 32000403395 E8 59000000 call 004033F30040339A 83C4 28 add esp, 280040339D B8 00000000 mov eax, 0004033A2 E9 00000000 jmp 004033A7004033A7 8BE5 mov esp, ebp004033A9 5D pop ebp004033AA C3 retn ; 子程序结尾见上面的这段汇编代码,这段汇编子程序正是禁止双开的关健段.从核心库返回到的00403367 上一个CALL 是调用核心库最终会调用ExitProcess API来终止进程的.再上面的就是一个比较跳转指令,可以跳过这个核心库的结束()命令00403353 8945 F4 mov dword ptr [ebp-C], eax ; EAX值入栈00403356 837D F4 00 cmp dword ptr [ebp-C], 0 ; 比较值<>00040335A 0F84 0A000000 je 0040336A ; 跳转指令这个跳转指令,比较了一个EAX值与0的大小.一般情况下,EAX寄存器中的值都是来自某CALL执行后的返回值.所以我们得再看看,距离这个EAX最近的CALL里会不会有禁止双开的检测.最近的CALL是0040334B E8 A9000000 call 004033F9 ; 第二个CALL我们在这第二个CALL下断点,然后进行OD重载,准备分析这个CALL,但很奇怪,居然没有断在这个断点的第二个CALL上..那么就得继续往上分析了.以第二个CALL之前,有个比较跳转命令,该命令会跳过第二个CALL.00403341 3965 FC cmp dword ptr [ebp-4], esp00403344 74 0D je short 00403353 ; 跳转指令此时可以决定第二个CALL与禁止双开无关,那么,再往上找,还有个CALL.看来这个CALL一定会是了,因为再之上已经没有其它的CALL指令了.下面是第一个CALL的指令,可以在第一个CALL处下断点,0040332D 68 D3304000 push 004030D3 ; 入栈窗口标题00403332 68 E0304000 push 004030E0 ; ASCII "Afx:10000000:b:10011:1900015:0"00403337 B8 00000000 mov eax, 0 ; 设置EAX=00040333C E8 BE000000 call 004033FF ; 第一个CALL 调用FindWindowA然后OD重载EXE进行调试,断在了第一个CALL处.在这个CALL之前入栈了两次,可以在查看被入栈了两个参数正好分别是"禁止双开示例" 与"Afx:10000000:b:10011:1900015:0".现在我们跟进这个CALL,需要去更详细的了解它出来如下指令.004033FF - FF25 95324000 jmp dword ptr [403295] ; krnln.1002996F一个JMP指令,无条件继续跟进.这回跟到了krnln 里了,核心库.已经离开了EXE的领空.1002996F 50 push eax ; 核心库函数体入口10029970 E8 E7FFFFFF call 1002995C ; 返回FindWindowA 入口10029975 83C4 04 add esp, 410029978 FFE0 jmp eax ; 跳向API这段汇编指令不多,一个CALL与一个JMP.需要一步步仔细的调试他的变化了.记得注意EAX的变化,因为EAX中的值最终会被用来比较而跳向API函数ExitProcess 去第一条指令1002996F 不重要.第二条指令是一个CALL,很显然很有必要跟进去了解其详情.但是第三条指令平衡一下堆栈用.第四条指令jmp eax 说明了,第二条指令的CALL会返回EAX里的值会是某个函数地址.如果不是地址的话,不该出现JMP EAX 进行跳转的.现在我想,先不急着跟进第二条指令CALL.打算先分析第四条指令的JMP会搞些什么.于是,按F8单步步过10029970 E8 E7FFFFFF call 1002995C 这条指令结果奇迹发生了,见右边的寄存器中的EAX值状态.EAX 77D2DE87 USER32.FindWindowAECX 0012FFE0EDX 1013C4F4 krnln.1013C4F4EBX 0012FEC0 ASCII "\krnln.fne"ESP 0012FE58EBP 0012FE78ESI FFFFFFFFEDI 7C930738 ntdll.7C930738EIP 10029975 krnln.10029975EAX中的值是一个user32.dll 里的API FindWindowA .下面的JMP指令就是跳向该API的.10029978 FFE0 jmp eax下面的进入了FindWindowA 函数体77D2DE87 > 8BFF mov edi, edi ; ntdll.7C93073877D2DE89 55 push ebp77D2DE8A 8BEC mov ebp, esp77D2DE8C 33C0 xor eax, eax77D2DE8E 50 push eax77D2DE8F FF75 0C push dword ptr [ebp+C]77D2DE92 FF75 08 push dword ptr [ebp+8]77D2DE95 50 push eax77D2DE96 50 push eax77D2DE97 E8 4CFFFFFF call 77D2DDE877D2DE9C 5D pop ebp77D2DE9D C2 0800 retn 8堆栈状态0012FE5C 00403341 /CALL 到FindWindowA 来自禁止双开.0040333C0012FE60 004030E0 |Class = "Afx:10000000:b:10011:1900015:0"0012FE64 004030D3 \Title = ""BD," 顾",AB,"开示例"执行完该API后就回到了EXE领空0040333C E8 BE000000 call 004033FF ; 第一个CALL 调用FindWindowA00403341 3965 FC cmp dword ptr [ebp-4], esp00403344 74 0D je short 00403353 ; 跳转指令现在可以总结,造成禁止双开的祸根就是在执行了FindWindowA 这个API之后.会比较它的返回值是不是0?不为0时就会跳向ExitProcess 终止进程的运行. 清楚了禁止双开的原因后,接着就可以对症下药了.可以HOOK掉该API就行了.正所谓,光说不练假把式.本篇内容是以QQ游戏大厅程序为例子,本来我是很不情愿再写这篇的,因为此时写的这篇文章,很可能会在一段时间后,游戏更新了,未来本文就会失效.但还是写了,为了大家,也给前面的第四文做个佐证与一点补充.先创建一个游戏进程,然后去创建第二个进程时,会创建失败,并且第一个进程的大厅窗口会被激活置为前台,另外任务栏下的QQ游戏按钮也会被闪烁几下.会闪烁可是好事啊,可以给我们找关键的禁止双开的CALL提供很多的帮助.QQ游戏闪烁时的效果,是蓝色的,连着闪好几次下面我们在开着第一个大厅的情况下,用OD载入第二个QQ游戏大厅程序,然后下断点在以下两个会终止进程的API上ExitProcessTerminateProcess在OD里按F9运行,会中断在ExitProcess 上.见堆栈情况0012FF04 77C09D45 /CALL 到ExitProcess 来自MSVCRT.77C09D3F0012FF08 00000000 \ExitCode = 0看堆栈提示,是MSVCRT 领空的77C09D3F 处指令MSVCRT 是VC++的运行时库,与易语言的核心库一样的概念.另外就是易语言与易核心库是用VC++编的,所以我们编写的易程序在运行时,也会加载这个MSVCRT 运行库的现在我们在反汇编代码处转到77C09D3F .77C09D13 8BFF mov edi, edi ; VC运行时库某函数77C09D15 55 push ebp77C09D16 8BEC mov ebp, esp77C09D18 68 A440BE77 push 77BE40A4 ; ASCII "mscoree.dll"77C09D1D FF15 E810BE77 call dword ptr [<&KERNEL32.GetModuleHandleA>] ; kernel32.GetModuleHandleA77C09D23 85C0 test eax, eax77C09D27 68 9440BE77 push 77BE4094 ; ASCII "CorExitProcess"77C09D2C 50 push eax77C09D2D FF15 D010BE77 call dword ptr [<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress77C09D33 85C0 test eax, eax77C09D35 74 05 je short 77C09D3C77C09D37 FF75 08 push dword ptr [ebp+8]77C09D3A FFD0 call eax77C09D3C FF75 08 push dword ptr [ebp+8]77C09D3F FF15 1C12BE77 call dword ptr [<&KERNEL32.ExitProcess>] ; kernel32.ExitProcess77C09D45 CC int377C09D46 CC int3我们当前要做的事就是一级一级的往上找,直到EXE领空为止,所以这次接着在这段汇编段入口处下断,然后用OD重载,按F9,运行到77C09D13 处. 可以在堆栈中看到如下情况0012FF10 77C09E78 返回到MSVCRT.77C09E78 来自MSVCRT.77C09D13再在汇编里转到77C09E78 处.77C09DDA CC int377C09DDB 8BFF mov edi, edi ; VC++运行库中的某个函数入口处77C09DDD 55 push ebp77C09DDE 8BEC mov ebp, esp77C09DE0 56 push esi77C09DE1 6A 08 push 877C09DE3 E8 D3070000 call _lock77C09DE8 33F6 xor esi, esi77C09DEA 46 inc esi77C09DEB 3935 541AC377 cmp dword ptr [77C31A54], esi77C09DF1 59 pop ecx77C09DF2 74 67 je short 77C09E5B77C09DF4 837D 0C 00 cmp dword ptr [ebp+C], 077C09E06 8B0D A027C377 mov ecx, dword ptr [77C327A0] 77C09E0C 85C9 test ecx, ecx77C09E0E 74 29 je short 77C09E3977C09E10 A1 9C27C377 mov eax, dword ptr [77C3279C] 77C09E15 83E8 04 sub eax, 477C09E18 3BC1 cmp eax, ecx77C09E1A EB 16 jmp short 77C09E3277C09E1C 8B00 mov eax, dword ptr [eax]77C09E1E 85C0 test eax, eax77C09E20 74 02 je short 77C09E2477C09E22 FFD0 call eax77C09E24 A1 9C27C377 mov eax, dword ptr [77C3279C] 77C09E29 83E8 04 sub eax, 477C09E2C 3B05 A027C377 cmp eax, dword ptr [77C327A0] 77C09E32 A3 9C27C377 mov dword ptr [77C3279C], eax 77C09E37 ^ 73 E3 jnb short 77C09E1C77C09E39 68 B012BE77 push 77BE12B077C09E3E 68 A012BE77 push 77BE12A077C09E43 E8 1FFFFFFF call _initterm77C09E48 59 pop ecx77C09E49 59 pop ecx77C09E4A 68 BC12BE77 push 77BE12BC77C09E4F 68 B412BE77 push 77BE12B477C09E54 E8 0EFFFFFF call _initterm77C09E59 59 pop ecx77C09E5A 59 pop ecx77C09E5B 85DB test ebx, ebx77C09E5D 74 0B je short 77C09E6A77C09E5F 6A 08 push 877C09E61 E8 B3060000 call _unlock77C09E66 59 pop ecx77C09E67 5E pop esi77C09E6A FF75 08 push dword ptr [ebp+8]77C09E6D 8935 541AC377 mov dword ptr [77C31A54], esi77C09E73 E8 9BFEFFFF call 77C09D1377C09E78 CC int3该段代码依然不是EXE领空里的继续在其入口处77C09DDB 下断点.后重载EXE按F9到该断点处.可以看到如下的堆栈情况. 0012FF20 77C09E90 返回到MSVCRT.77C09E90 来自MSVCRT.77C09DDB再转到汇编77C09E90 处77C09E7E > 8BFF mov edi, edi ; vc运行时库中的exit 函数入口77C09E80 55 push ebp77C09E81 8BEC mov ebp, esp77C09E83 53 push ebx77C09E84 6A 00 push 077C09E86 FF75 08 push dword ptr [ebp+8]77C09E89 33DB xor ebx, ebx77C09E8B E8 4BFFFFFF call 77C09DDB77C09E90 59 pop ecx77C09E91 59 pop ecx77C09E92 5B pop ebx77C09E93 5D pop ebp77C09E94 C3 retn继续在77C09E7E 下断,重载OD,F9运行,出现如下堆栈数据0012FF34 0040228E /CALL 到exit 来自QQGame.004022880012FF38 00000000 \status = 0OD已经提示我们,该CALL的名称就是vc++ 里的exit 函数,等同于易语言核心库里的结束() 函数一样.QQGame.00402288 看到这个,是多么振奋人心的一件事哇,终于可以到EXE领空了.下面这段汇编子程序的代码可长了,哎!00402150 >/$ 55 push ebp ; 子程序入口处,也是EXE程序的入口点00402151 |. 8BEC mov ebp, esp00402153 |. 6A FF push -100402155 |. 68 38314000 push 004031380040215A |. 68 D6224000 push <jmp.&MSVCRT._except_handler3> ; SE 处理程序安装0040215F |. 64:A1 00000000 mov eax, dword ptr fs:[0]00402165 |. 50 push eax00402166 |. 64:8925 0000000> mov dword ptr fs:[0], esp0040216D |. 83EC 68 sub esp, 6800402170 |. 53 push ebx00402171 |. 56 push esi00402172 |. 57 push edi00402173 |. 8965 E8 mov dword ptr [ebp-18], esp00402176 |. 33DB xor ebx, ebx00402178 |. 895D FC mov dword ptr [ebp-4], ebx0040217B |. 6A 02 push 20040217D |. FF15 A8304000 call dword ptr [<&MSVCRT.__set_app_type>] ; MSVCRT.__set_app_type 00402183 |. 59 pop ecx00402184 |. 830D 28454000 F> or dword ptr [404528], FFFFFFFF0040218B |. 830D 2C454000 F> or dword ptr [40452C], FFFFFFFF00402192 |. FF15 A4304000 call dword ptr [<&MSVCRT.__p__fmode>] ; MSVCRT.__p__fmode 00402198 |. 8B0D 1C444000 mov ecx, dword ptr [40441C]0040219E |. 8908 mov dword ptr [eax], ecx004021A0 |. FF15 E8304000 call dword ptr [<&MSVCRT.__p__commode>] ; MSVCRT.__p__commode 004021A6 |. 8B0D 18444000 mov ecx, dword ptr [404418]004021AC |. 8908 mov dword ptr [eax], ecx004021AE |. A1 9C304000 mov eax, dword ptr [<&MSVCRT._adjust_fdiv>]004021B3 |. 8B00 mov eax, dword ptr [eax]004021B5 |. A3 24454000 mov dword ptr [404524], eax004021BA |. E8 16010000 call 004022D5004021C7 |. 68 D2224000 push 004022D2004021CC |. FF15 98304000 call dword ptr [<&MSVCRT.__setusermatherr>] ; MSVCRT.__setusermatherr 004021D2 |. 59 pop ecx004021D3 |> E8 E8000000 call 004022C0004021D8 |. 68 0C404000 push 0040400C004021DD |. 68 08404000 push 00404008004021E2 |. E8 D3000000 call <jmp.&MSVCRT._initterm>004021E7 |. A1 14444000 mov eax, dword ptr [404414]004021EC |. 8945 94 mov dword ptr [ebp-6C], eax004021EF |. 8D45 94 lea eax, dword ptr [ebp-6C]004021F2 |. 50 push eax004021F3 |. FF35 10444000 push dword ptr [404410]004021F9 |. 8D45 9C lea eax, dword ptr [ebp-64]004021FC |. 50 push eax004021FD |. 8D45 90 lea eax, dword ptr [ebp-70]00402200 |. 50 push eax00402201 |. 8D45 A0 lea eax, dword ptr [ebp-60]00402204 |. 50 push eax00402205 |. FF15 90304000 call dword ptr [<&MSVCRT.__getmainargs>] ; MSVCRT.__getmainargs 0040220B |. 68 04404000 push 0040400400402210 |. 68 00404000 push 0040400000402215 |. E8 A0000000 call <jmp.&MSVCRT._initterm>0040221A |. 83C4 24 add esp, 240040221D |. A1 8C304000 mov eax, dword ptr [<&MSVCRT._acmdln>]00402222 |. 8B30 mov esi, dword ptr [eax]00402224 |. 8975 8C mov dword ptr [ebp-74], esi00402227 |. 803E 22 cmp byte ptr [esi], 220040222A |. 75 3A jnz short 004022660040222C |> 46 /inc esi0040222D |. 8975 8C |mov dword ptr [ebp-74], esi00402230 |. 8A06 |mov al, byte ptr [esi]00402232 |. 3AC3 |cmp al, bl00402234 |. 74 04 |je short 0040223A0040223A |> 803E 22 cmp byte ptr [esi], 220040223D |. 75 04 jnz short 004022430040223F |> 46 inc esi00402240 |. 8975 8C mov dword ptr [ebp-74], esi00402243 |> 8A06 mov al, byte ptr [esi]00402245 |. 3AC3 cmp al, bl00402247 |. 74 04 je short 0040224D00402249 |. 3C 20 cmp al, 200040224B |.^ 76 F2 jbe short 0040223F0040224D |> 895D D0 mov dword ptr [ebp-30], ebx00402250 |. 8D45 A4 lea eax, dword ptr [ebp-5C]00402253 |. 50 push eax ; /pStartupinfo00402254 |. FF15 48304000 call dword ptr [<&KERNEL32.GetStartupInfoA>] ; \GetStartupInfoA 0040225A |. F645 D0 01 test byte ptr [ebp-30], 10040225E |. 74 11 je short 0040227100402260 |. 0FB745 D4 movzx eax, word ptr [ebp-2C]00402264 |. EB 0E jmp short 0040227400402266 |> 803E 20 /cmp byte ptr [esi], 2000402269 |.^ 76 D8 |jbe short 004022430040226B |. 46 |inc esi0040226C |. 8975 8C |mov dword ptr [ebp-74], esi0040226F |.^ EB F5 \jmp short 0040226600402271 |> 6A 0A push 0A00402273 |. 58 pop eax00402274 |> 50 push eax00402275 |. 56 push esi00402276 |. 53 push ebx00402277 |. 53 push ebx ; /pModule00402278 |. FF15 28304000 call dword ptr [<&KERNEL32.GetModuleHandleA>] ; \GetModuleHandleA 0040227E |. 50 push eax0040227F |. E8 F1FDFFFF call 00402075 ; 禁止双开的关健CALL100402284 |. 8945 98 mov dword ptr [ebp-68], eax00402287 |. 50 push eax ; /status00402293 |. 8B09 mov ecx, dword ptr [ecx]00402295 |. 894D 88 mov dword ptr [ebp-78], ecx00402298 |. 50 push eax00402299 |. 51 push ecx0040229A |. E8 15000000 call <jmp.&MSVCRT._XcptFilter>0040229F |. 59 pop ecx004022A0 |. 59 pop ecx004022A1 \. C3 retn ; 子程序尾注意这段汇编代码上红色的代码..首先说最上面的那个,00402150 是这个子程序的入口处,同时也是这个EXE的入口点.当OD载入QQ游戏大厅时正是停留在00402150 这个入口点上.靠,得来全不费功夫,跑了那么大的一个圈,搞来搞去的原来就是最初的入口点上.为什么会这样呢?因为禁止双开的功能,一般都是在进程刚起动的不远处进行,没必要让一个程序运行了一大堆的功能后,再去判断有没有双进程存在,然后再关闭.但对于加壳的程序,一般EXE的入口被被改了,改成了壳的入口点.所以禁止双开的功能就未必在OD载入时停留的入口点上了.当然即可以从ExitProcess 进行逆推,也可以从最初的入口点一个一个的CALL往下调试直到发现禁止双开的功能,这就得视个人的爱好了.现在回到正题上.上文也有说过,禁止双开的功能,一般都在终止进程的附近.这个汇编函数体挺大的,里面的CALL也不少.现在我们用F8单步步过的方式,一个个CALL调试过去.每调试步过一个CALL,记得注意一下任务栏下的QQ游戏按钮有没有闪烁.出现闪烁时,就说明这个CALL是关键CALL了.0040227E |. 50 push eax0040227F |. E8 F1FDFFFF call 00402075 ; 禁止双开的关健CALL100402284 |. 8945 98 mov dword ptr [ebp-68], eax00402287 |. 50 push eax ; /status00402288 |. FF15 88304000 call dword ptr [<&MSVCRT.exit>] ; \exit当调试到该处时,任务栏的QQ游戏闪了几下.同时这个CALL也是与exit 最近的了.重载QQ游戏,这次到了0040227F 处理,按F7跟进去调试.可以看到如下汇编段.00402075 /$ 55 push ebp00402076 |. 8BEC mov ebp, esp00402078 |. 83EC 18 sub esp, 180040207B |. 8D4D E8 lea ecx, dword ptr [ebp-18]0040208A |. 74 05 je short 004020910040208C |. FF75 10 push dword ptr [ebp+10]0040208F |. EB 02 jmp short 0040209300402091 |> 6A 00 push 000402093 |> FF75 08 push dword ptr [ebp+8]00402096 |. 8D4D E8 lea ecx, dword ptr [ebp-18]00402099 |. E8 9CEFFFFF call 0040103A ; 禁止双开关健CALL20040209E |. 8D4D E8 lea ecx, dword ptr [ebp-18]004020A1 |. E8 8DEFFFFF call 00401033004020A6 |. 33C0 xor eax, eax004020A8 |. C9 leave004020A9 \. C2 1000 retn 10这里也有好几个CALL,利用QQ游戏任务栏会闪烁的特性,用F8进行调试这里的那些CALL,会发现00402099 处时会闪烁. 接着跟进.0040103A /$ B8 66234000 mov eax, 004023660040103F |. E8 9C100000 call 004020E000401044 |. 51 push ecx00401045 |. 51 push ecx00401046 |. 53 push ebx00401047 |. 56 push esi00401048 |. 57 push edi00401049 |. 33DB xor ebx, ebx0040104B |. 8BF9 mov edi, ecx0040104D |. 53 push ebx0040104E |. 897D EC mov dword ptr [ebp-14], edi00401051 |. FF15 08314000 call dword ptr [<&ole32.CoInitialize>] ; ole32.CoInitialize00401057 |. 8BCF mov ecx, edi00401059 |. E8 22040000 call 004014800040105E |. 8BCF mov ecx, edi00401060 |. E8 A2040000 call 004015070040106C |. 8BCF mov ecx, edi0040106E |. E8 48030000 call 004013BB00401073 |. 6A 14 push 1400401075 |. E8 56100000 call <jmp.&MSVCRT.operator new> 0040107A |. 59 pop ecx0040107B |. 8945 F0 mov dword ptr [ebp-10], eax0040107E |. 3BC3 cmp eax, ebx00401080 |. 895D FC mov dword ptr [ebp-4], ebx00401083 |. 74 11 je short 0040109600401085 |. 68 20404000 push 00404020 ; ASCII "factory.dll" 0040108A |. 8BC8 mov ecx, eax0040108C |. E8 B5000000 call 0040114600401091 |. 8945 F0 mov dword ptr [ebp-10], eax00401094 |. EB 03 jmp short 0040109900401096 |> 895D F0 mov dword ptr [ebp-10], ebx00401099 |> 8B45 F0 mov eax, dword ptr [ebp-10]0040109C |. 834D FC FF or dword ptr [ebp-4], FFFFFFFF 004010A0 |. 8B40 04 mov eax, dword ptr [eax+4]004010A3 |. 3BC3 cmp eax, ebx004010A5 |. 74 6A je short 00401111004010A7 |. 6A 02 push 2004010A9 |. FFD0 call eax004010AB |. 8BF0 mov esi, eax004010AD |. 59 pop ecx004010AE |. 3BF3 cmp esi, ebx004010B0 |. 74 5F je short 00401111004010B2 |. 8B06 mov eax, dword ptr [esi]004010B4 |. 68 01300000 push 3001004010B9 |. 68 10404000 push 00404010 ; ASCII "MainLogi.dll" 004010BE |. 53 push ebx004010BF |. 8BCE mov ecx, esi004010C1 |. FF50 08 call dword ptr [eax+8]004010C4 |. 8BF8 mov edi, eax004010CA |. 8B07 mov eax, dword ptr [edi]004010CC |. 8BCF mov ecx, edi004010CE |. FF50 38 call dword ptr [eax+38] ; 禁止双开的关健CALL3004010D1 |. 85C0 test eax, eax004010D3 |. 74 13 je short 004010E8004010D5 |. 8B4D EC mov ecx, dword ptr [ebp-14]004010D8 |. 53 push ebx004010D9 |. E8 EC010000 call 004012CA004010DE |. 8B07 mov eax, dword ptr [edi]004010E0 |. FF75 0C push dword ptr [ebp+C]004010E3 |. 8BCF mov ecx, edi004010E5 |. FF50 3C call dword ptr [eax+3C]004010E8 |> 8B06 mov eax, dword ptr [esi]004010EA |. 53 push ebx004010EB |. 57 push edi004010EC |. 8BCE mov ecx, esi004010EE |. FF50 0C call dword ptr [eax+C]004010F1 |> 8B4D EC mov ecx, dword ptr [ebp-14]004010F4 |. E8 66030000 call 0040145F004010F9 |. 395D F0 cmp dword ptr [ebp-10], ebx004010FC |. 74 1A je short 00401118004010FE |. 8B4D F0 mov ecx, dword ptr [ebp-10]00401101 |. E8 A4000000 call 004011AA00401106 |. FF75 F0 push dword ptr [ebp-10]00401109 |. E8 BC0F0000 call <jmp.&MSVCRT.operator delete>0040110E |. 59 pop ecx0040110F |. EB 07 jmp short 0040111800401111 |> 8BCF mov ecx, edi00401113 |. E8 47030000 call 0040145F00401118 |> E8 B3000000 call 004011D00040111D |. FF15 04314000 call dword ptr [<&ole32.CoUninitialize>] ; ole32.CoUninitialize 00401123 |. 8B4D EC mov ecx, dword ptr [ebp-14]00401126 |. E8 55040000 call 0040158000401133 |. 8B4D F4 mov ecx, dword ptr [ebp-C]00401136 |. 5F pop edi00401137 |. 5E pop esi00401138 |. 33C0 xor eax, eax0040113A |. 5B pop ebx0040113B |. 64:890D 0000000>mov dword ptr fs:[0], ecx00401142 |. C9 leave00401143 \. C2 0C00 retn 0C看样子还躲得真的挺深的,又出来了个大家伙,这么长,这么多的CALL.幸好腾讯有先见之明,给咱们留下了点线索,不然这么整下去真的会死掉很多脑细胞.用闪烁提醒的原理.誓死死追到底.进入了00FF7A18 ^\E9 C8FCFFFF jmp 00FF76E5 ; 进入了MainLogi 领空嘿嘿嘿,居然追到了其它模块的领空.难道禁止双开的功能不在EXE里?即来之则安之,接着追.00FF76E5 56 push esi00FF76E6 8BF1 mov esi, ecx00FF76E8 57 push edi00FF76E9 83BE A8010000 00 cmp dword ptr [esi+1A8], 000FF76F0 75 25 jnz short 00FF771700FF76F2 E8 D6190100 call 010090CD00FF76F7 85C0 test eax, eax00FF76F9 74 1C je short 00FF771700FF76FB 8B10 mov edx, dword ptr [eax]00FF76FD 68 02900004 push 400900200FF7702 68 84500101 push 01015084 ; ASCII "Utility.dll"00FF7707 56 push esi00FF7708 8BC8 mov ecx, eax00FF770A FF52 08 call dword ptr [edx+8]00FF770D 85C0 test eax, eax00FF770F 74 06 je short 00FF771700FF7711 8986 A8010000 mov dword ptr [esi+1A8], eax00FF7717 8B86 A8010000 mov eax, dword ptr [esi+1A8]00FF771D 8BD6 mov edx, esi00FF771F F7DA neg edx00FF7721 8D48 04 lea ecx, dword ptr [eax+4]00FF7724 8D7E 04 lea edi, dword ptr [esi+4]00FF7727 1BD2 sbb edx, edx00FF7729 6A 00 push 000FF772B 8B01 mov eax, dword ptr [ecx]00FF772D 23D7 and edx, edi00FF772F 52 push edx00FF7730 FF10 call dword ptr [eax]00FF7732 8B8E A8010000 mov ecx, dword ptr [esi+1A8]00FF7738 68 5E100000 push 105E00FF773D 68 861F0000 push 1F8600FF7742 68 C4970101 push 010197C4 ; ASCII "QQGame_MainFrame"00FF7747 8B01 mov eax, dword ptr [ecx]00FF7749 68 6C910101 push 0101916C ; ASCII "QQGame"00FF774E 68 AC970101 push 010197AC ; ASCII "QQGame_Mutex03/01/2003"00FF7753 FF50 0C call dword ptr [eax+C] ; 禁止双开的关键CALL 400FF7756 8BF8 mov edi, eax00FF7758 83C6 08 add esi, 800FF775B 57 push edi00FF775C 68 74970101 push 01019774 ; ASCII "Logout_Optimize CheckMultiInstanceRunning() return [%d]"00FF7761 56 push esi00FF7762 E8 9C17FEFF call 00FD8F0300FF7767 83C4 0C add esp, 0C00FF776A 8BC7 mov eax, edi00FF776C 5F pop edi00FF776D 5E pop esi00FF776E C3 retn到了这里,还是有很多CALL,反正有现成的闪烁提醒,不好好利用也太浪费了.继续用该方式,发现到00FF7753 处时,任务栏再次闪烁. 再跟进,可以见到如下代码.10011846 55 push ebp ; 从MainLogi领空到了Utility领空10011847 8BEC mov ebp, esp10011849 51 push ecx1001184A 8B45 18 mov eax, dword ptr [ebp+18] 1001184D 8365 FC 00 and dword ptr [ebp-4], 0 10011851 53 push ebx10011852 56 push esi10011853 8BF1 mov esi, ecx10011855 57 push edi10011856 BB 00010000 mov ebx, 1001001185B 8946 54 mov dword ptr [esi+54], eax 1001185E 8B45 14 mov eax, dword ptr [ebp+14] 10011861 8DBE 58010000 lea edi, dword ptr [esi+158] 10011867 8946 50 mov dword ptr [esi+50], eax 1001186A 85FF test edi, edi1001186C 74 21 je short 1001188F1001186E 837D 10 00 cmp dword ptr [ebp+10], 0 10011872 74 1B je short 1001188F10011874 53 push ebx10011875 8D4E 45 lea ecx, dword ptr [esi+45] 10011878 FF75 10 push dword ptr [ebp+10]1001187B E8 16050000 call 10011D9610011880 85C0 test eax, eax10011882 74 0B je short 1001188F10011884 FF75 10 push dword ptr [ebp+10] 10011887 57 push edi10011888 E8 19580000 call <jmp.&MSVCRT.strcpy> 1001188D 59 pop ecx1001188E 59 pop ecx1001188F 8D7E 58 lea edi, dword ptr [esi+58] 10011892 85FF test edi, edi10011894 74 21 je short 100118B710011896 837D 0C 00 cmp dword ptr [ebp+C], 0 1001189A 74 1B je short 100118B71001189C 53 push ebx1001189D 8D4E 45 lea ecx, dword ptr [esi+45] 100118A0 FF75 0C push dword ptr [ebp+C]100118A3 E8 EE040000 call 10011D96100118A8 85C0 test eax, eax100118AA 74 0B je short 100118B7100118AC FF75 0C push dword ptr [ebp+C]100118AF 57 push edi100118B0 E8 F1570000 call <jmp.&MSVCRT.strcpy>100118B5 59 pop ecx100118B6 59 pop ecx100118B7 837D 08 00 cmp dword ptr [ebp+8], 0100118BB 74 5F je short 1001191C100118BD FF75 08 push dword ptr [ebp+8]100118C0 E8 E7570000 call <jmp.&MSVCRT.strlen>100118C5 F7D8 neg eax100118C7 1BC0 sbb eax, eax100118C9 59 pop ecx100118CA 40 inc eax100118CB 8945 10 mov dword ptr [ebp+10], eax100118CE 75 4C jnz short 1001191C100118D0 FF75 08 push dword ptr [ebp+8]100118D3 6A 01 push 1100118D5 5F pop edi100118D6 57 push edi100118D7 6A 00 push 0100118D9 FF15 E8900110 call dword ptr [<&KERNEL32.CreateMutexA>] ; kernel32.CreateMutexA 100118DF 85C0 test eax, eax100118E1 8946 4C mov dword ptr [esi+4C], eax100118E4 74 24 je short 1001190A100118E6 FF15 AC900110 call dword ptr [<&KERNEL32.GetLastError>] ; ntdll.RtlGetLastWin32Error 100118EC 3D B7000000 cmp eax, 0B7 ; 0B7=183=原已存在该互斥体对象100118F1 8BCE mov ecx, esi100118F3 75 07 jnz short 100118FC100118F5 E8 92000000 call 1001198C ; 闪烁QQ游戏窗口100118FA EB 2A jmp short 10011926100118FC E8 64010000 call 10011A6510011901 85C0 test eax, eax10011903 74 21 je short 1001192610011905 897D FC mov dword ptr [ebp-4], edi10011908 EB 1C jmp short 100119261001190A 83C6 14 add esi, 141001190D 68 F8E60110 push 1001E6F810011912 56 push esi10011913 E8 FE4FFFFF call 1000691610011918 59 pop ecx10011919 59 pop ecx1001191A EB 0A jmp short 100119261001191C 8BCE mov ecx, esi1001191E E8 42010000 call 10011A6510011923 8945 FC mov dword ptr [ebp-4], eax10011926 8B45 FC mov eax, dword ptr [ebp-4]10011929 5F pop edi1001192A 5E pop esi1001192B 5B pop ebx1001192C C9 leave1001192D C2 1400 retn 14 ; 返回()最终追到了这里,一切都已清楚了,QQ游戏大厅正是使用CreateMutexA 创建一个名为QQGame_Mutex03/01/2003 互斥体对象,然后使用ntdll.RtlGetLastWin32Error 该API判断之前是否有存在该互斥体对象.如果有存在了该互斥体对象的话,接着再调用一个CALL来闪烁与把第一个进程时的QQ大厅激活到前台..下面是激活第一个QQ游戏进程中的窗口的汇编代码,不再重要了,不过就是这段代码让我们查找起禁止双开变得如此简单.1001198C 53 push ebx ; 闪烁QQ游戏窗口代码入口处1001198D 56 push esi1001198E 8BF1 mov esi, ecx10011990 33DB xor ebx, ebx10011992 57 push edi10011993 53 push ebx10011994 8D86 58010000 lea eax, dword ptr [esi+158]1001199A 50 push eax1001199B 53 push ebx。
游戏多开原理
游戏多开原理在现今的社会中,游戏已经成为了人们生活中不可或缺的一部分。
然而,有时候我们可能会遇到一些情况,比如想要同时玩多个账号的游戏,或者是想要在同一台电脑上同时进行多个游戏的情况。
这时,游戏多开就成为了一个非常有用的功能。
那么,游戏多开的原理是什么呢?接下来,我们就来详细介绍一下游戏多开的原理。
首先,我们需要了解游戏多开的基本概念。
游戏多开,顾名思义,就是指在同一台电脑上同时打开多个游戏客户端,从而实现同时进行多个游戏的目的。
这对于一些需要多个账号同时在线的游戏来说,是非常有用的功能。
其次,游戏多开的原理其实并不复杂。
在大多数情况下,游戏多开是通过虚拟化技术来实现的。
虚拟化技术可以将一台物理机器虚拟成多台逻辑上独立的虚拟机,每台虚拟机都可以运行自己的操作系统和应用程序。
通过这种方式,我们可以在同一台电脑上同时打开多个游戏客户端,每个客户端都在自己的虚拟机中运行,互不干扰。
另外,游戏多开的原理还涉及到一些操作系统的相关知识。
在Windows操作系统中,每个程序都会被分配一个独立的进程,而每个进程都拥有自己独立的内存空间。
因此,通过一些特定的技术手段,我们可以实现在同一台电脑上同时打开多个游戏客户端的目的。
除了虚拟化技术和操作系统的相关知识之外,游戏多开的原理还与游戏客户端本身的设计有关。
一些游戏客户端会对同一台电脑上同时运行多个客户端进行限制,因此需要通过一些特殊的技术手段来绕过这些限制,从而实现游戏多开的目的。
综上所述,游戏多开的原理主要涉及到虚拟化技术、操作系统知识以及游戏客户端设计等方面。
通过合理利用这些技术手段,我们可以在同一台电脑上实现同时进行多个游戏的目的。
当然,在使用游戏多开的功能时,我们也需要注意遵守游戏厂商的相关规定,避免违反游戏规则而导致账号被封禁的情况发生。
总的来说,游戏多开作为一种非常有用的功能,可以帮助玩家更便利地进行游戏。
通过了解游戏多开的原理,我们可以更好地利用这一功能,提高游戏体验,让游戏更加丰富多彩。
游戏多开cpu内存优化
游戏多开cpu内存优化中央处理器(CentralProcessingUnit)的缩写,即CPU,CPU是电脑中的核心配件,只有火柴盒那么大,几十张纸那么厚,但它却是一台计算机的运算核心和控制核心。
下面是店铺带来的关于游戏多开cpu内存优化的内容,欢迎阅读!游戏多开cpu内存优化?游戏双开对这三个硬件压力都是很大的,缺一不可。
1、内存过小的时候双开,会导致游戏读条的时候会变得缓慢。
2、显卡如果配置低的话,双开会出现fps下降很多,如果特效调低会有一定缓解。
3、cpu相比前两个硬件属于影响较小的,但也是会出附带出现运行速度慢的现象。
一般来说运行游戏或者大型软件,这三个硬件只要有一个是短板那么整体速度会下降很多。
降低CPU使用率的操作:系统优化设置,删除Windows强加的附件用记事本NOTEPAD修改\winnt\inf\sysoc.inf(按住shift从该文件上点右键,选择打开方式为记事本,或直接打开记事本,选择文件,文件类型用全选,找到该文件,打开即可),用查找/替换功能,在查找框中输入,hide(一个英文逗号紧跟hide),将“替换为”框设为空。
并选全部替换,这样,就把所有的,hide都去掉了,存盘退出,再运行“添加-删除程序”,就会看见“添加/删除 Windows 组件”中多出了好几个选项;这样你可以删除好些没有用的附件。
2. 关掉调试器Dr. WatsonDr.Watson是自带的系统维护工具,它会在程序加载失败或崩溃时显示。
运行drwtsn32,把除了“转储全部线程上下文”之外的全都去掉。
否则一旦有程序出错,硬盘会响很久,而且会占用很多空间。
如果你以前遇到过这种情况,请查找user.dmp文件并删掉,可能会省掉几十M的空间。
这是出错程序的现场,对我们没用。
然后打开注册表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug子键分支,双击在它下面的Auto键值名称,将其“数值数据”改为0,最后按F5刷新使设置生效,这样就彻底来取消它的运行了。
DNF双开怎么才不封号
DNF双开怎么才不封号
DNF双开小号能够快速的刷图提高赚钱的效益,是非常多玩家赚钱的小技巧。
有一些DNF的新手玩家不知道怎么样才能双开,害怕双开会被封号。
那么下面是店铺带来的DNF双开不封号的方法的内容,希望大家能够喜欢。
DNF双开不封号的方法
首先,登录TGP,这是第一个帐号。
点击DNF游戏,弹出TGP的游戏设置界面,可以看到左下角已经有了双开的功能。
直接点击开始游戏,正常进入游戏。
第一个游戏就开好了,然后再看TGP界面。
点击DNF游戏图标上的箭头标志,弹出菜单。
然后点击添加小号,输入帐号密码,第二个游戏帐号也就完成了。
然后就可以尽情的享受安全双开吧(目前还不能同步操作)。
游戏双开以及多开方法
游戏双开以及多开方法
∙双开方法
∙dnf双开方法教程小游戏资讯y
∙天子传奇ol 双开游戏多开办法指南
∙WIN7用沙盘多开的方法
这些具体要找些论坛看看教程。
过驱动保护,写驱动保护之类的。
在任务管理器里把CF的进程关掉也不行,只能重启电脑才能再玩这个问题是最近才出现的,应该是上次更新到1.8.3.就开始出现这个问题了,好多人都遇到了用360游戏优化器,或者把游戏特效开最低,关掉无用的程序。
还不行的话。
应该程序本身问题了。
win7的,多建几个用户就可以了
一是跳过游戏的Login.exe也就是在线升级界面(如果没有多开工具,那么运行游戏主程序Fairy.exe就会说要先运行Login.exe~);二是跳过Fairy.exe也就是游戏主程序的防止同一程序同时运行多个实例的检测~ 其他细节不同的多开工具都不一样
把游戏目录下sound文件夹中的文件删掉(不要删除文件夹)。
游戏没声音了,游戏体验丧失一部分。
不过他要是不在乎那我也没办法了。
如果你学习的时间比较多你创新意热血江湖官网下载中心下载个心恋玄武然后这个是支持多开的所以
当小工具用~~~~~~~~~`
问道吧,开N个号都没问题,而且容易上手,级高了的话也可以卖钱,主要的不是号,是搞出来的东西,例如一个好BB起码几亿==,要多开也就这游戏容易搞钱,记得采纳我虽没玩过这款游戏,但你这种情况,你问一下其他玩家有没有同样的问题,如果其他玩家没有,那有可能就是你的宽带带宽不够,如果其他玩家也如此,那就是那款游戏的问题
不会。
应用双开怎么关闭通知提醒
应用双开怎么关闭通知提醒在现代社会中,手机已经成为了人们生活的必备品之一。
为了满足不同需求,许多人选择使用双开应用,以便同时登录两个或多个社交媒体账号、游戏账号等。
然而,一些用户可能会觉得双开应用的通知提醒过于频繁,影响了他们的正常使用。
那么,如何关闭这些通知提醒呢?关闭单个应用的通知提醒是比较简单的。
首先,进入手机的“设置”界面,然后找到“通知管理”或“应用管理”选项,点击后会显示所有已安装的应用程序。
在这里,用户可以找到需要关闭通知提醒的双开应用。
点击进入该应用的设置页面后,用户可以看到一个名为“通知”的选项,点击进入后可以关闭该应用的通知提醒功能。
然而,对于同时使用多个双开应用的用户来说,关闭每个应用的通知提醒可能会变得繁琐且耗时。
为了解决这个问题,用户可以考虑使用手机系统的“勿扰模式”功能。
勿扰模式可以一键关闭所有通知提醒,让用户在需要专注于工作、学习或休息的时候不被打扰。
启用勿扰模式的方法因手机品牌和型号而异,但一般都可以在快捷设置面板中找到。
用户只需下拉通知栏,找到“勿扰模式”或“免打扰”图标,点击即可启用。
在勿扰模式中,用户可以选择全天、定时或自定义时间段来关闭通知提醒。
除此之外,用户还可以设置只允许来自特定联系人或应用的紧急通知。
如果用户只想关闭双开应用的通知提醒,而不影响其他应用的通知提醒,可以尝试使用第三方通知管理工具。
这些工具通常提供更加细致的通知管理选项,用户可以根据自己的需求对每个应用的通知进行设置。
总的来说,关闭应用双开的通知提醒有多种方法可供选择。
用户可以通过关闭单个应用的通知提醒、启用手机系统的勿扰模式或使用第三方通知管理工具来实现。
根据个人需求选择合适的方法,可以提高使用体验,减少不必要的干扰。
梦幻手游双开操作方法技巧
梦幻手游双开操作方法技巧
梦幻手游是目前非常火热的一款手机游戏,许多玩家都会选择双开进行游戏。
下面是梦幻手游双开的操作方法和一些技巧:
1. 使用双开助手:双开助手是一款可以同时运行两个梦幻手游账号的软件,可以在手机上同时启动两个游戏。
可以在应用商店中搜索并下载双开助手,然后按照软件的引导进行配置即可。
2. 分屏模式:某些手机自带了分屏模式,可以将两个梦幻手游同时显示在屏幕上。
打开手机的设置,找到显示设置,开启分屏模式。
然后打开一个梦幻手游账号,返回桌面,再打开第二个梦幻手游账号,在任务栏中选择分屏即可。
3. 手机多用户:某些手机支持多用户登录,可以在设置中添加一个新用户,并登录另一个梦幻手游账号。
技巧:
- 双开游戏时,建议将两个账号分别使用不同的职业和阵容,这样可以避免混淆和误操作。
- 如果手机资源有限或者运行卡顿,可以关闭一些后台进程和不必要的应用程序,以提高游戏的运行速度和稳定性。
- 双开游戏可能会增加手机的电量消耗和发热,建议使用优质的手机充电器并注意散热问题。
- 注意游戏时机的选择,可以在任务较轻松的时候进行双开游戏,而不是在需要集中注意力的关键时刻。
- 如果不希望自己受到干扰,可以设置手机静音或者关闭通知提醒,以免打扰游戏体验。
以上是关于梦幻手游双开的操作方法和一些技巧,希望对你有所帮助!。
游戏多开方法
游戏多开方法在玩游戏的过程中,有时候我们会想要同时开启多个游戏账号,或者是同时玩多个游戏。
这样可以提高游戏体验,也可以节省时间。
但是很多游戏都限制了账号的多开,所以我们需要寻找一些方法来实现游戏的多开。
本文将介绍一些常见的游戏多开方法,希望能帮助到大家。
1. 使用多开器软件。
多开器软件是一种专门用来实现游戏多开的工具。
它可以让你在同一台电脑上同时运行多个游戏客户端。
常见的多开器软件有“多开精灵”、“多开宝”等。
使用多开器软件的方法一般比较简单,只需要将游戏客户端添加到多开器软件中,然后点击“多开”按钮即可。
但是需要注意的是,有些游戏可能会检测到多开器软件,并且会进行封号处理,所以在使用多开器软件的时候一定要小心。
2. 使用虚拟机。
虚拟机是一种可以在一台电脑上模拟多台电脑的软件。
通过虚拟机,我们可以在同一台电脑上同时运行多个操作系统,从而实现游戏的多开。
使用虚拟机的方法相对来说比较复杂,需要先安装虚拟机软件,然后在虚拟机中安装游戏客户端。
由于虚拟机是在一个独立的环境中运行游戏客户端,所以游戏通常不会检测到虚拟机的存在,这样就可以实现游戏的多开。
但是需要注意的是,虚拟机需要占用大量的系统资源,所以在使用虚拟机的时候要确保电脑的配置足够强大。
3. 修改注册表。
有些游戏的多开限制是通过注册表来实现的,所以我们可以通过修改注册表来解除游戏的多开限制。
具体的方法是先打开注册表编辑器,然后找到游戏的注册表项,修改其中的一些数值或者添加一些新的数值。
但是需要注意的是,修改注册表可能会对系统造成一些不良影响,所以在进行修改注册表的操作之前一定要备份好注册表。
4. 使用沙盒软件。
沙盒软件是一种可以在一个独立的环境中运行程序的工具。
通过沙盒软件,我们可以在同一台电脑上同时运行多个游戏客户端。
使用沙盒软件的方法比较简单,只需要将游戏客户端添加到沙盒软件中即可。
由于沙盒软件可以将程序运行在一个独立的环境中,所以游戏通常不会检测到沙盒软件的存在,这样就可以实现游戏的多开。
LOL您已超过游戏多开数量限制解决方案
今天2013年4月19日16:02:26打LOL彻底火了“您已超过游戏多开数量限制,请勿开启过多的游戏。
”
注销、结束进程均无用··
话不多说直接上解决方案:就是修改一下系统虚拟内存,具体原因我也不知道!
我把虚拟内存+2之后玩了6把又提示多开···所以本方法不绝对·我正在试验吧虚拟内存改为3G就是3069看能稳定多久!请看图·
到这里该干什么你懂得!重启机子上游戏··稳定5盘以上·
5盘以后又提示·建议把虚拟内存继续调大到3G就是3069M
本人小白·只喜欢动手·不喜勿喷!这只是暂时的·坐等官方解决!转载请注明--原创作者:俊飘
有问题请邮件咨询:514322**********。
手游倩女幽魂双开教程
手游倩女幽魂双开教程倩女幽魂是一款非常受欢迎的手游,很多玩家都希望能够同时开启两个游戏账号,即双开。
下面我将为大家分享倩女幽魂双开的教程。
首先,我们需要下载一个双开软件。
目前市面上有很多双开软件可供选择,比如夜神模拟器、逍遥模拟器、蓝叠安卓模拟器等。
这里以夜神模拟器为例进行介绍。
第一步,下载并安装夜神模拟器。
打开夜神模拟器后,在右侧工具栏选择“多开管理器”。
点击“添加模拟器”按钮,在弹出的窗口中选择“新建多开”。
第二步,设置多开模式。
在新建多开窗口中,可以设置开启的模拟器数量,一般建议选择双开,也就是两个模拟器同时开启。
根据自己的实际需求进行选择。
第三步,为第二个模拟器设置新的账号。
在新建多开窗口中,勾选上“重新配置模拟器们个人设置”,然后点击“下一步”。
进入下一个窗口后,可以为第二个模拟器设置新的分辨率、RAM等参数。
第四步,启动双开。
在新建多开窗口中,点击“完成”按钮,然后点击“启动”按钮即可同时启动两个模拟器。
第五步,进入游戏并登录账号。
在每个模拟器中,点击“倩女幽魂”游戏图标,进入游戏后选择“账号登录”或者“快速登录”,根据自己的账号情况进行登录。
通过以上步骤,我们就成功地实现了倩女幽魂的双开。
可以同步操作两个账号,同时进行游戏,提高游戏效率,也可以与自己的好友一起组队进行游戏。
需要注意的是,由于双开会对手机或电脑的性能产生较大的负担,因此建议在使用双开功能时,保持设备的良好散热状态。
另外,为了保障账号的安全,请务必使用符合规范的账号登录方式,并避免使用不当手段进行游戏,以免触犯游戏规则。
希望以上对于倩女幽魂双开教程的介绍能对大家有所帮助。
祝大家在倩女幽魂的世界中能够多多收获,并与自己的伙伴们共同探索游戏的精彩!。
游戏多开原理
游戏多开原理在现代社会,游戏已经成为了人们生活中不可或缺的一部分。
然而,很多玩家在游戏过程中会遇到一个问题,就是无法同时打开多个游戏客户端进行游戏。
这对于一些需要多开游戏进行交易、PK等操作的玩家来说,无疑是一个很大的困扰。
因此,游戏多开原理就显得尤为重要。
游戏多开原理的实现主要是通过一些特定的软件或者技术手段来实现的。
其中,最常见的就是使用多开软件。
这类软件可以通过虚拟机、沙盒等技术来实现在同一台电脑上同时运行多个游戏客户端的功能。
通过这种方式,玩家可以轻松地进行多开操作,从而提高游戏体验和效率。
除了多开软件,一些游戏本身也提供了多开的功能。
比如一些网络游戏在设计之初就考虑到了玩家可能需要同时开启多个游戏客户端的情况,因此在游戏设置中就提供了多开的选项。
玩家只需要简单地勾选一下相关选项,就可以轻松实现多开操作。
另外,一些高级玩家还可以通过一些技术手段来实现游戏多开。
比如通过修改游戏客户端的一些配置文件,或者使用一些特殊的硬件设备来实现多开操作。
这种方式虽然比较复杂,但是对于一些对多开有特殊需求的玩家来说,却是一个不错的选择。
总的来说,游戏多开原理的实现方法有很多种,玩家可以根据自己的需求和实际情况选择合适的方式来进行多开操作。
无论是使用多开软件,还是游戏本身提供的多开功能,又或者是通过一些技术手段来实现多开,都可以帮助玩家更好地享受游戏乐趣。
当然,在进行多开操作的时候,玩家也需要注意一些法律法规和游戏规定,以免因为违规操作而导致不必要的麻烦。
总的来说,游戏多开原理的实现对于一些有特殊需求的玩家来说,是一个很重要的功能。
通过合适的多开方式,玩家可以更好地进行游戏交易、PK等操作,从而提高游戏体验和效率。
希望未来游戏多开原理能够得到更好的发展,为广大玩家带来更好的游戏体验。
龙之谷怎么双开
龙之谷怎么双开1. 介绍《龙之谷》是一款风靡全球的游戏,玩家可以在游戏中扮演不同的角色,与怪物战斗、探索迷宫、完成任务等。
然而,有些玩家希望能够同时运行两个游戏实例,这就需要进行双开操作。
本文将介绍如何在电脑上实现龙之谷的双开。
2. 双开方法2.1. 使用虚拟机使用虚拟机是一种常见的实现双开的方法。
虚拟机可以创建一个独立的操作系统环境,使得可以同时运行多个游戏实例。
以下是使用虚拟机进行双开的步骤:1.下载并安装虚拟机软件,如VMware 或VirtualBox。
2.启动虚拟机软件并创建一个新的虚拟机。
3.在虚拟机中安装操作系统,可以选择 Windows 版本。
4.在虚拟机的操作系统中安装龙之谷游戏客户端。
5.启动第一个游戏实例。
6.在宿主操作系统中启动第二个游戏实例。
通过虚拟机运行两个游戏实例,可以实现龙之谷的双开。
2.2. 使用多账户登录另一种实现双开的方法是使用多账户登录。
龙之谷允许玩家使用不同的账户登录同一台电脑上的多个游戏实例。
以下是使用多账户登录进行双开的步骤:1.创建一个新的游戏账户。
2.启动第一个游戏实例并使用第一个账户登录。
3.启动第二个游戏实例并使用第二个账户登录。
通过使用不同的游戏账户登录,可以在同一台电脑上同时运行多个游戏实例。
2.3. 使用多开软件除了以上两种方法,还可以使用一些专门的多开软件来实现双开。
这些软件可以创建虚拟环境或者进行游戏进程的拷贝,从而实现同时运行多个游戏实例。
常见的多开软件包括 QQ游戏加速器、多开助手等。
使用这些软件的方法可以根据具体的软件来进行操作,一般来说,需要先安装多开软件,然后在软件中选择要双开的游戏,最后启动游戏实例即可。
3. 注意事项在进行龙之谷的双开操作时,需要注意以下事项:•确保电脑配置足够强大,能够同时运行多个游戏实例。
•注意游戏账户的合法性,合理使用多账户登录功能。
•使用多开软件时,注意软件的安全性,避免安装恶意软件。
4. 结论龙之谷的双开可以通过使用虚拟机、多账户登录或者多开软件来实现。
局域网魔兽争霸3双开与多开的简单方法
局域网魔兽争霸3双开与多开的简单方法虚拟机双开魔兽、多开魔兽的方法,基本都需要安装各种各样的软件,没有一定的电脑基础会很难理解。
哪有别的吗?下面是店铺收集整理的局域网魔兽争霸3双开与多开的简单方法,希望对大家有帮助~~局域网魔兽争霸3双开与多开的简单方法1.下载YDWE编辑器首先你需要下载YDWE这个地图编辑器,直接百度搜索YDWE就有了。
YDWE,顾名思义,是由月协成员共同打造的一款老幼皆宜的魔兽地图编辑器,拥有简单而强大的函数封装到触发器开放给新人,同时拥有VJ,CJ,ZINC编译功能YDWE是一个加强版的魔兽地图编辑器,里面已经集成了多开插件,自己无需再去下载若干多开软件,也不用安装什么虚拟机。
现在要多开魔兽进行测试的话基本都用这个(没听过YDWE的除外)。
这个是YDWE编辑器的图标:你也可以找到YDWE的百度贴吧,在贴吧里找到资源下载,还可以在这里讨论YDWE的使用经验。
YDWE一般为压缩包,下载后解压(用WINRAR或其他解压软件)打开YDWE.exe(有杀软报错的话直接忽略,也可以先关闭杀毒软件防止关键文件被误杀无法恢复)。
不要尝试在压缩包里直接点击ydwe.exe,那样无法打开。
2.运行YDWE打开两个YDWE,也就是运行2次YDWE,运行后选择上面菜单的YDWE--启动魔兽,两个都这么做,魔兽就双开了。
要多开的话,就运行多次,方法同上。
你可以在YDWE配置菜单中设置魔兽的显示方式,可以是全屏显示也可以是窗口化显示,设置后用YDWE运行的魔兽就会按照设置的模型进行显示,但不影响直接打开魔兽的全屏显示方式。
ydwe的打开界面如图,看起来和原版自带的WE没什么区别,不过它的内在功能是很强大的,当然,如果你只是用来双开和多开魔兽,那么完全不需要知道它的强大之处,只需要会用YDWE开启魔兽争霸即可。
这是开启魔兽的菜单截图,使用“启动魔兽”来打开魔兽争霸,必须使用这个功能打开魔兽,否则无法正常双开或多开。
游戏双开以及多开方法
游戏双开以及多开⽅法
1.MyGameplus多开⽅法.
将MyGameplus解压到游戏根⽬录下
打开
出现点开始运⾏游戏即可。
此⽅法只有少数机器实⽤。
2 同盘符复制客户端
⾸先建⽴2个⽂件夹(多开就多建⼏个)
如图:
每个⽂件夹下都是同样的内容。
然后再每个⽂件夹下安装好登陆器
把每个安装好的登陆器右键发送到桌⾯快捷⽅式。
就可以了.
⼤部分XP⽤户英伟达显卡也就是N卡。
进⼊轩辕画⾯卡。
这个要看机器配置。
有些卡有些不卡。
论坛有解决⽅法。
可以参考论坛
本⼈建议换win7 然后⽤群⾥的win7登陆器进⼊游戏
经多⼈实验多开顺畅不黄屏画⾯清晰。
不⽤担⼼配置和兼容问题
本⼈配置512独显。
1024X768分辨率可能开始不习惯。
熟悉下就好了。
游戏多开原理
游戏多开原理
游戏多开是指在计算机系统中同时运行多个相同游戏实例的能力。
实现游戏多开的原理主要涉及到以下几个方面:
1. 进程隔离:计算机操作系统中的进程是指在系统上运行的一个程序的实例。
游戏多开通过创建多个进程来实现多个游戏实例的同时运行。
每个游戏实例运行在独立的进程中,彼此之间互不干扰,相当于每个游戏实例运行在独立的虚拟环境中。
2. 内存隔离:每个游戏实例都需要使用一定的系统内存作为运行时的临时存储空间。
为了避免多个游戏实例之间相互干扰,游戏多开会对每个游戏实例分配独立的内存空间,使它们在内存中互不干扰。
3. 文件隔离:游戏多开也会对游戏实例所使用的文件进行隔离,避免多个游戏实例之间的文件冲突。
每个游戏实例通常会有独立的配置文件、存档文件等,游戏多开会对这些文件进行分离管理,使不同实例的文件不会相互干扰。
4. 输入输出管理:在游戏多开中,每个游戏实例需要处理不同的输入输出。
为了保证不同游戏实例的输入输出不会互相干扰,游戏多开会对键盘、鼠标等输入设备进行分离管理,确保每个游戏实例只接收对应的输入。
总之,游戏多开的原理是通过进程隔离、内存隔离、文件隔离和输入输出管理等手段来实现在计算机系统中同时运行多个相
同游戏实例。
这样可以让玩家在同一台计算机上同时运行多个游戏实例,提高游戏效率和体验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第六,互斥体。
部分游戏通过互斥对象/信号量/事件等线程同步对象来确定程序是否已经运行。最常用的函数如:CreateMutexA。
1、首先创建一个互斥体,CreateMutex函数,第一个参数可以设置为NULL,第二个参数必须设置为false,第三个参数表示互斥体的名称,这个名称最好有一些特殊标识以防止与其他应用程序冲突,比如程序名+时间。
其实只删除了packet.dll和WANPACKET.DLL就可以正常安装新wincap协议了。
为什么以上文件删除不掉? 答: 怎么卸载 wincap? 为什么卸载不了wincap?
第二步:安装新wincap协议
新wincap协议下载地址:WinPcap_4_0_2.zip 下载
游戏多开的方法为DLL劫持让游戏一开始运行就加载你的DLL,再转到原来的dll上就可以实现多开了。
文章来源于:小鱼工作室
第九,使用公共文件
程序启动时,在一个公共目录(比如C:\或者Temp目录)中创建一个公共文件,并将此文件设置为不共享读写。第二个程序启动时,也打开此文件,如果打开成功,则表示程序未启动过,否则表示程序已经启动。
多开游戏的方法为:挂系统钩子,导致GetTcpTable函数失败实现多开。
文章来源于:小鱼工作室
游戏防止多开的方法有时候并不是只用一个方法的,多数游戏都会用多种方法一起来防止多开的,只要大家都懂得这几个游戏多开的原理,灵活运行,一个一个分析排查,基本上都能解决各种游戏多开了,如果大家还有什么更好的方法,欢迎交流一下。
游戏多开的方法为复制游戏客户端到另外的文件夹,在另外的文件夹打开即可。
文章来源于:小鱼工作室
第五,多个操作系统账号(仅限XP系统)
部分游戏通过限制一个用户只能打开一个游戏来防止重复打开。
游戏多开的方法为在系统账号里面多建立账号,一个游戏使用一个账号。方法如下:
2、使用GetLastError()函数判断错误信息是否为ERROR_ALREADY_EXISTS,如果是,则表示程序已经启动。
游戏多开的方法有二种,一为发现互斥体,然后关闭互斥体即可实现多开。二为APIHOOK,接收到错误信息时,加重置命令(置错误码=0)即可。
文章来源于:小鱼工作室
游戏多开的方法为:手动设置多开,比如:设定文件访问权限,不允许此程序在公共目录创建文件等。
文章来源于:小鱼工作室
第十,Mac地址验证
登陆服务器时,获取本机mac地址,发送至服务器端,服务端进行mac地址验证,如果mac地址重复登陆,则不允许同服务器进行消息传递。
用了一年的时间换来了这篇游戏多开的文章,如果大家需要转发的,请标明出处:小鱼工作室 /,谢谢。
文章来源于:小鱼工作室
第一,进程隐藏
部分游戏通过探测游戏客户端进程是否已经存在来防止重复打开。
游戏多开的办法为启动一个游戏客户端后,将该游戏的所有启动的进程全部隐藏。
第七,内存映射文件(File Mapping)
部分游戏通过把程序实例信息放到跨进程的内存映射文件中,防止游戏多开。
游戏多开的方法为拦阻该函数,不让它命名内核文件即可实现多开。
文章来源于:小鱼工作室
第八,DLL全局共享
DLL全局共享区在映射到各个进程的地址空间时仅被初始化一次,且是在第一次被windows加载时,所以利用该区数据就能对程序进行多开限制。
第三,端口隐藏
部分游戏通过默认打开TCP或者UDP端口监听,开第二个游戏的时候会打开端口失败从而判断游戏是否多开。
游戏多开的方法为此类需要采用netstat –a –n –o 命令查看端口即可实现游戏多开。
文章来源于:小鱼工作室
第四,多个游戏目录
部分游戏通过独占文件访问来防止重复打开。
文章来源于:小鱼工作室
第二,窗口标题修改(使用FindWindow API函数)
部分游戏通过探测游戏客户端的窗口是否已经存在来防止重复打开。
游戏多开的办法为将游戏的窗口修改为任意字符。
文章来源于:小鱼工作室
多开游戏的多法为:使用超级兔子等软件修改mac地址实现多开,针对此情况,本人也写了一个修改Mac地址的小工具,大家可以在网站下载。
文章来源于:小鱼工作室
第十一,查看网络连接
获取本机所有网络连接,使用GetTcpTable获取TCP连接,使用GetUdpTable获取UDP连接,检查是否有连接到服务器IP和端口号的连接,如果有,表示程序已经启动,否则程序未启动。
文章来源于:小流游戏所对应的防多开的方法,请大家继续关注,谢谢。小鱼工作室官网:/
HRESULT = 0x00000000
第一步:卸载旧的wincap
删除下面的文件即可:
用了一年的时间换来了这篇游戏多开的文章:
本帖隐藏的内容
全面分析游戏防止多开的原理,与游戏实现多开的方法。进程隐藏,窗口标题修改,端口隐藏,多个游戏目录,多个操作系统账号,互斥体,内存映射文件,DLL全局共享等方法实现游戏多开。
研究游戏多开已经有一年多的时间了,其实要实现游戏多开也不是一件很难的事情,只要大家懂得游戏防止多开的原理,然后根据其对应游戏多开的方法便可以做出游戏多开器来了。下面为大家总结一下游戏多开的原理与方法:
1、打开控制面版→用户帐户→创建一个新帐户→输入新帐户名(下一步)→创建帐户;
2、然后到桌面的游戏快捷图标上右键到[属性] 选[高级] 把里面[以其他用户身份运行]这个选项勾上 开第2个程序的时候记得用你新建的用户进就可以了,省的老去切换用户了。
文章来源于:小鱼工作室
第三步:安装p2p终结者软件
第一步是关键,做好第一步就不会出现“网卡尚未初始化”了。
全面分析游戏防止多开的原理,与游戏实现多开的方法。进程隐藏,窗口标题修改,端口隐藏,多个游戏目录,多个操作系统账号,互斥体,内存映射文件,DLL全局共享等方法实现游戏多开。
研究游戏多开已经有一年多的时间了,其实要实现游戏多开也不是一件很难的事情,只要大家懂得游戏防止多开的原理,然后根据其对应游戏多开的方法便可以做出游戏多开器来了。下面为大家总结一下游戏多开的原理与方法:
c:\windows\system32\Packet.dll
c:\windows\system32\drivers/npf.sys
c:\windows\system32\WanPacket.dll
c:\windows\system32\wpcap.dll
c:\windows\system32\pthreadVC.dll