常见游戏限制多开原理、与解决游戏多开方法

合集下载

游戏多开原理

游戏多开原理

游戏多开原理在计算机领域,游戏多开是指在同一台电脑上同时运行多个游戏客户端的技术。

这项技术在玩家群体中非常受欢迎,因为它可以让玩家同时在多个游戏账号上进行游戏,提高游戏效率和体验。

那么,游戏多开的原理是什么呢?接下来我们将详细介绍游戏多开的原理及其实现方式。

首先,游戏多开的原理是基于操作系统的多任务处理能力。

现代操作系统都具有多任务处理的能力,可以同时运行多个程序,每个程序都在独立的内存空间中运行。

游戏多开利用了这一特性,通过一些技术手段,让多个游戏客户端在不同的进程中运行,从而实现了多个游戏账号的同时登录和游戏。

其次,游戏多开的实现方式有多种,其中比较常见的方式是使用虚拟机或者多开器。

虚拟机是一种软件,可以在一台物理计算机上模拟出多台虚拟计算机,每台虚拟计算机都可以独立运行操作系统和程序。

通过在虚拟机中安装游戏客户端,玩家可以实现多个游戏账号的同时登录和游戏。

而多开器则是一种专门针对某款游戏进行开发的软件,它可以绕过游戏客户端的限制,让玩家同时启动多个游戏客户端,实现多开的效果。

另外,游戏多开的原理还涉及到游戏客户端和服务器之间的通讯机制。

游戏客户端和服务器之间的通讯是通过网络实现的,每个游戏账号在服务器上都有唯一的标识。

游戏多开需要绕过游戏客户端对账号标识的限制,让多个游戏客户端能够同时登录到服务器上,这就需要对游戏客户端进行一定程度的修改和破解。

总的来说,游戏多开的原理是基于操作系统的多任务处理能力,利用虚拟机或者多开器等技术手段,绕过游戏客户端对账号标识的限制,实现多个游戏账号的同时登录和游戏。

当然,需要注意的是,游戏多开有时会违反游戏运营商的规定,可能会导致账号被封禁或者其他风险,因此玩家在使用游戏多开的技术时需要谨慎使用,遵守游戏运营商的规定,以免造成不必要的损失。

v5隔离多开的原理

v5隔离多开的原理

v5隔离多开的原理v5隔离多开是一种常见的应用程序技术,它的原理是通过虚拟化技术将应用程序运行在隔离的环境中,从而实现多个应用程序同时运行的效果。

在本文中,我将详细介绍v5隔离多开的原理和实现方式。

让我们来了解一下什么是v5隔离多开。

v5隔离多开是一种通过虚拟化技术实现多个应用程序同时运行的技术。

它可以让用户在同一台设备上同时运行多个相同或不同的应用程序,而不会相互干扰。

例如,用户可以在一台手机上同时登录多个微信账号,或者在一台电脑上同时运行多个游戏客户端。

那么,v5隔离多开是如何实现的呢?其实,v5隔离多开的原理可以简单概括为以下几个步骤:1. 创建虚拟环境:在v5隔离多开的实现中,首先需要创建一个隔离的虚拟环境。

这个虚拟环境可以是一个虚拟机、容器或者是一个虚拟的系统分区。

2. 安装应用程序:在隔离的虚拟环境中,需要安装相应的应用程序。

用户可以根据自己的需求选择安装不同的应用程序。

这些应用程序可以是相同的,也可以是不同的。

3. 运行应用程序:在虚拟环境中,每个应用程序都运行在独立的进程中,彼此之间相互隔离。

这样就可以保证每个应用程序都能够独立运行,不会相互干扰。

4. 数据隔离:在v5隔离多开中,每个应用程序都有自己独立的数据存储空间。

这样可以保证每个应用程序的数据相互独立,不会相互影响。

5. 资源隔离:在v5隔离多开中,每个应用程序都有自己独立的资源使用情况。

这样可以避免某个应用程序占用过多的资源,导致其他应用程序运行缓慢或崩溃的情况发生。

通过以上几个步骤,v5隔离多开就可以实现多个应用程序同时运行的效果。

用户可以根据自己的需求,随时启动或关闭任意一个应用程序,而不会影响其他应用程序的运行。

除了上述的基本原理,v5隔离多开还可以提供一些额外的功能,以增强用户的使用体验。

例如,用户可以在不同的虚拟环境中设置不同的系统参数,以满足不同应用程序的需求。

此外,v5隔离多开还可以提供虚拟网络功能,使用户可以在不同的虚拟环境中进行网络通信。

常见游戏限制多开原理、与解决游戏多开方法

常见游戏限制多开原理、与解决游戏多开方法

常见游戏限制多开原理、与解决游戏多开方法全面分析游戏防止多开的原理,与游戏实现多开的方法。

进程隐藏,窗口标题修改,端口隐藏,多个游戏目录,多个操作系统账号,互斥体,内存映射文件,DLL全局共享等方法实现游戏多开。

游戏防止多开的方法有时候并不是只用一个方法的,多数游戏都会用多种方法一起来防止多开的,只要大家都懂得这几个游戏多开的原理,灵活运行,一个一个分析排查,基本上都能解决各种游戏多开了其实要实现游戏多开也不是一件很难的事情,只要大家懂得游戏防止多开的原理,然后根据其对应游戏多开的方法便可以做出游戏多开器来了。

下面为大家总结一下游戏多开的原理与方法第一,进程隐藏部分游戏通过探测游戏客户端进程是否已经存在来防止重复打开,如游戏:英雄美人游戏多开的办法为启动一个游戏客户端后,将该游戏的进程隐藏,只保留一个或多个。

第二,窗口标题修改(使用FindWindow API函数)部分游戏通过探测游戏客户端的窗口是否已经存在来防止重复打开。

游戏多开的办法为将游戏的窗口修改为任意字符。

第三,端口隐藏部分游戏通过默认打开TCP或者UDP端口监听,开第二个游戏的时候会打开端口失败从而判断游戏是否多开。

游戏多开的方法为此类需要采用netstat –a –n –o 命令查看端口即可实现游戏多开。

第四,多个游戏目录部分游戏通过独占文件访问来防止重复打开。

游戏多开的方法为复制游戏客户端到另外的文件夹,在另外的文件夹打开即可。

第五,多个操作系统账号(仅限XP系统)部分游戏通过限制一个用户只能打开一个游戏来防止重复打开。

游戏多开的方法为在系统账号里面多建立账号,一个游戏使用一个账号。

方法如下:1、打开控制面版→用户帐户→创建一个新帐户→输入新帐户名(下一步)→创建帐户;2、然后到桌面的游戏快捷图标上右键到[属性] 选[高级] 把里面[以其他用户身份运行]这个选项勾上开第2个程序的时候记得用你新建的用户进就可以了,省的老去切换用户了。

教你双开DNF客户端

教你双开DNF客户端

教你双开DNF客户端[虚拟机双开游戏法] []不懂勿进··不少玩家都有双开游戏的需求,但DNF本身是不支持双开的。

玩家的力量是无限的,DNF 腾讯资料站战地记者食雅鱼就为你介绍高手是怎么双开游戏的。

(真的不是很容易,建议没有强烈的双开需求的朋友就不要往下看了。

)DNF的双开基础条件如下,没有达下面的所有条件,不建议玩家双开:1 有强烈的双开愿望2 电脑配置最低至少要有双核2G内存128独立显卡至少10G的空闲硬盘3 至少能看懂下面的所有的步骤请按照步骤操作,开始艰险的DNF双开旅程。

双开必要的软件系统VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版300M(知名虚拟主机软件)下载地址:/soft/9131.html(多特软件站)[最新安装版本]猪猪猫.CN-WINXPSP2安装旗舰2008DVD ISO文件900M(有XP系统安装光盘的可以不用下,不能使用GHOST系列的安装盘,下载的请注意一定要下安装版本的,不能下GHOST克隆版的)下载地址:/(国内老牌JUJU猫XP系统下载点)全部下载完毕后开始安装软件把VMware Workstation安装到有10G的空闲硬盘以上的盘里面。

注意安装时候的中文提示,无视中文字的朋友看下图,不看图的朋友可以放弃双开。

在软件安装完毕,汉化成功,重起了电脑后。

我开始进一步操作,配置虚拟机。

操作过程如下图:打开软件,新建一个虚拟机新建虚拟机向导注意选项注意位置设置在有10G空闲硬盘的磁盘以上步骤全部完成,请等待软件分配10G硬盘空间为虚拟机所用。

(硬盘上10G会被占用)用下面的步骤开始,是对虚拟机的一些设置:设置内存512M这里设置光盘读取已经下载好的XP ISO文件900M (等下开机安装)这个软驱让它断电网络就是使用你的主机IP建立一个共享文件夹,可以让虚拟机和你的主机共享文件,然后通过虚拟机的网络邻居,把DNF复制到虚拟机上。

2box多开器原理

2box多开器原理

2box多开器原理
2box多开器是一种可以帮助用户在同一台电脑上同时运行多个游戏账号的工具。

其原理是在电脑上创建多个虚拟环境,每个虚拟环境都可以独立运行一个游戏账号。

2box多开器通过模拟多个电脑来实现多开,每个虚拟环境都有自己的磁盘空间、内存和网络连接。

这样,用户可以同时登录多个游戏账号,而不必担心账号之间互相干扰。

2box多开器的原理基于虚拟化技术,它使用虚拟机来创建多个虚拟环境。

虚拟机是一种软件工具,它能够在物理计算机上模拟出一个完整的计算环境。

每个虚拟机都有自己的操作系统、硬件和软件。

由于虚拟机是独立的,所以在同一台计算机上可以运行多个虚拟机,每个虚拟机都可以独立运行一个游戏账号。

2box多开器的另一个原理是进程注入。

进程注入是一种将新的代码注入到正在运行的程序中的技术。

使用进程注入,2box多开器可以在已经运行的游戏程序中注入新的代码,从而实现多开。

这种技术需要高超的编程技巧和经验,不过2box多开器的开发者已经将其实现了。

总之,2box多开器的原理是利用虚拟化技术创建多个虚拟环境,同时使用进程注入技术在已经运行的游戏程序中注入新的代码,从而实现多开。

这样,用户可以轻松同时登录多个游戏账号,享受更好的游戏体验。

- 1 -。

限制多开原理

限制多开原理

限制多开原理
限制多开的原理主要基于以下几个方面:
1. 游戏平衡:很多游戏设计了特定的经济系统或资源分配机制。

如果允许玩家通过多开获取更多的资源或优势,将会破坏游戏的平衡性。

限制IP进行
多开可以防止玩家利用多个账号和角色来获取过多的资源,保持游戏的公平性和竞争性。

2. 防止作弊行为:一些游戏开发商为了防止作弊行为,限制了IP进行多开。

通过多开账号来利用外挂、脚本或非法程序等作弊手段,将会给游戏的公平性和玩家体验造成严重的影响。

限制IP进行多开可以有效降低作弊行为的
发生和传播。

3. 进程隐藏:游戏开启后会遍历所有进程,通过自身的进程数量来判断多开。

部分游戏通过探测游戏客户端进程是否已经存在来防止重复打开。

4. 窗口标题修改:部分游戏通过探测游戏客户端的窗口是否已经存在来防止重复打开。

破解方法是将游戏的窗口修改为任意字符。

5. 端口隐藏:部分游戏通过默认打开TCP或者UDP端口监听,开第二个游戏的时候会打开端口失败从而判断游戏是否多开。

6. 多个游戏目录:部分游戏通过独占文件访问来防止重复打开。

以上信息仅供参考,具体原理可能因游戏而异,建议咨询专业人士获取准确信息。

怎样保证游戏多开的同时又实现账号防封问题?

怎样保证游戏多开的同时又实现账号防封问题?

怎样保证游戏多开的同时又实现账号防封问题?
无论是网游还是手游游戏,大多都需要IP软件的配合,特别是游戏工作室更需要一个非常稳定的环境才可以源源不断的出金变现。

市面上有很多的IP软件平台,价格有高有低,稳定性也都参差不齐。

单窗口是指玩一个游戏多开,开10个窗口,那么这10个窗口的IP都是相互独立的,每一个进程都有一个自己的IP。

使用IP软件可以大大的降低游戏IP检测这方面的封号几率,需要换IP软件首选单窗口单IP软件
换IP的软件一般分两种,一种是更换电脑的整个ip
一种是更换局部ip(即只更换特定软件的ip)的ip软件
个人用过的芝麻系列就包含这两种,如果你想要更换整机ip可以试试芝麻软件
如果想要只更换部分软件的ip,不影响其他软件的使用,比如只换你的游戏,可以试试芝麻游戏助手,选定你的游戏,再启动就自动更换掉了。

另外,他家的软件可以免费试用,不确实能够是否满足需求可以试用一下了解。

一般推广发帖ip量需求也是比较大的,可以试试芝麻游戏助手,这个软件的ip量比较大,他家有那种针对网站发帖或者推广铺量需要的ip类型,比较好的一点事,他可以同时给几个相同软件更换ip,比如浏览器,这样发帖推广的效率也会高很多,我是做阅读推广的,个人感觉这个挺好用的。

热血江湖多开方法

热血江湖多开方法

热血江湖多开方法热血江湖是一款非常热门的在线游戏,该游戏允许玩家在虚拟的江湖世界中体验武侠的刺激和冒险。

然而,每个玩家都只能选择一个角色进行游戏,这可能会限制一些玩家的游戏体验。

因此,有许多玩家寻找热血江湖的多开方法,以便能够同时玩多个角色。

下面将介绍几种常见的热血江湖多开方法。

1. 使用模拟器模拟器是一种软件,可以模拟运行手机应用程序。

有许多模拟器可供选择,其中一些比较常用的有BlueStacks、NoxPlayer和MEmu Play等。

使用模拟器可以在电脑上同时运行多个热血江湖游戏客户端,从而实现多开。

只需下载和安装模拟器,然后在模拟器中下载并安装热血江湖游戏即可。

2. 使用多开软件除了模拟器外,还有一些专门的多开软件可供选择,如雷电模拟器和夜神模拟器等。

这些软件可以在同一台电脑上同时运行多个游戏客户端,从而实现多开。

使用这些多开软件,只需下载和安装,并按照软件的指引进行操作即可。

3. 虚拟机虚拟机是一种软件,可以在同一台计算机上创建多个虚拟计算机环境。

用户可以在每个虚拟机上独立运行一个游戏客户端,从而实现多开。

建议选择一款稳定且易用的虚拟机软件,如VirtualBox或VMware Workstation等。

使用虚拟机进行多开需要一定的计算机配置,并且在操作时需要借助一些相关的教程进行引导。

无论选择哪种多开方法,都需要注意以下几点:1. 确保计算机具备足够的硬件配置,以支持同时运行多个游戏客户端。

如果计算机性能低下,可能会导致游戏卡顿或崩溃。

2. 确保网络稳定。

多开游戏可能会占用更多的网络资源,因此需要保证网络的稳定和流畅,以免影响游戏体验。

3. 请合法使用多开方法。

某些多开方法可能违反游戏的使用协议或法律法规,因此请务必在合法和合规的前提下进行多开操作。

总结起来,热血江湖的多开方法包括使用模拟器、多开软件和虚拟机等。

每种方法都有其优缺点,玩家可以根据自己的需求和计算机配置选择适合自己的方法。

一台手机玩手游怎么多开同时运行游戏及多开防封赚钱

一台手机玩手游怎么多开同时运行游戏及多开防封赚钱

⼀台⼿机玩⼿游怎么多开同时运⾏游戏及多开防封赚钱现在⼈们真是越来越依赖⼿机了,以前从未想过在电脑前玩的⼤型端游会有⼀天转移到⼿机上供我们试玩,⽅便的同时也有⼀个困扰:玩端游时我们能轻松多开⼏个账号随意玩,可⼿机上要想实现多开就⽐较困难了,除了多买⼏部电话外、还有没有什么其他节省成本的好法⼦呢?答案当然是有了,现在已经出现了号称云⼿机的产品,虽是虚拟电话却能满⾜我们⼤部分需求,其中最为明显的就是在⼿游⽅⾯的应⽤。

没接触过的⼩伙伴们不妨看看,我敢保证啊、只要⼤家热爱游戏,这云⼿机在以后肯定会⽤得上。

云⼿机可以多开,随意切换⾃由畅玩。

我们都知道、在⼿游⾥想要快速升级有两个办法:⼀是氪⾦充值、额..许多平民⼩伙伴们还是放弃吧;⼆呢就是⽐较普遍的开⼩号做任务、以⼩养⼤,虽说同样的操作⽆聊是⽆聊点、可总⽐这氪⾦伤肝要好吧。

从前我们玩端游,可以⾃由实现养⼩号的⽬标。

可现在许多⼈从端游转战到了⼿游市场,做任务时才恍然⼤悟,⼿机不能多开⼩号怎么办?这时就需要我们的云⼿机出马,⽆论是电脑还是⼿机上的客户端,在理论上都可以多开⽆数个云⼿机,并且每部云⼿机都是独⽴存在的、不会互相影响。

但⼿游多开赚钱⽤云⼿机还得注意的问题是,云⼿机并不是单机单IP,各种平台的云⼿机都是以随机的形式分布IP地址。

打个⽐⽅,租赁了某个品牌10台云⼿机,有⼀定⼏率它们都是单独的IP,但是这个⼏率很⼩。

正常的情况下,是这10台中,有少数⼏台是单独的IP地址,其他全部都是同⼀IP。

有⼀点⼀定要注意,租到⼿的云⼿机,IP地址是固定的,⽆论在什么地⽅,⽤什么⽹络登录云⼿机,这个IP地址永远不会变。

云⼿机虽然本⾝不能更换IP地址,但是可以通过软件来实现。

⽬前市⾯上所有的云⼿机品牌都可以通过软件来更换地址,使⽤也很简单。

有了这些⼯具,我们就能轻松实现在⼀部⼿机上多开⼏个账号来练号、升级做任务了,到了后期发育成熟后将⼩号资源全部整合到⼤号中去、成为游戏中的⾼阶玩家就这么简单。

本栏目主要讲解如何解除禁止双开方面的各种方案

本栏目主要讲解如何解除禁止双开方面的各种方案

本栏目主要讲解如何解除禁止双开方面的各种方案.为什么要禁止双开或多开呢?原因很多.但我们的软件中若能有解开多开的功能,可以有很多的好处.比如一台机子可以同时登陆多个帐号上去玩.要想解除中禁止双开的功能,就得先了解禁止双开方面的原理.其实想要禁止双开并不难. 禁止双开的方法也有很多.但其基本的方式,本栏目会都给介绍一下.在操作系统中每个在运行的进程都是独立的.禁双开的程序在运行时,需要留下一些专有的特征供第二次运行时检测用,当第二次运行时,会去尝试检测有没有某个专有的特征.若该特征已存在则结束自身进程.若不存在则继续运行.通过这种方式,就能简单的达到禁止双开的目的.本文介绍第一种,是比较常用的.通过窗口标题与窗口类名的特征来达到禁止双开的功能.如果我们的程序的主要窗口类名与窗口标题是唯一的,一般不会与他人的程序出现相同的情况时,可以用如下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。

多开器的原理

多开器的原理

多开器的原理
多开器是一种可以让用户在同一台设备上同时运行多个应用程
序的软件工具。

它的原理是通过虚拟化技术,将设备的资源进行分
割和共享,从而实现多个应用程序的并行运行。

在这篇文档中,我
们将深入探讨多开器的原理,以帮助用户更好地理解它的工作方式。

首先,多开器利用了设备的虚拟化技术。

虚拟化技术是一种将
物理资源虚拟化成多个逻辑资源的技术,它可以将一台物理设备分
割成多个虚拟设备,并为每个虚拟设备分配独立的资源。

多开器利
用这一技术,将设备的CPU、内存、存储等资源进行分割和共享,
从而实现多个应用程序的并行运行。

其次,多开器通过虚拟化技术实现了应用程序的隔离运行。


同一台设备上运行多个应用程序时,每个应用程序都被分配了独立
的虚拟资源,它们之间相互隔离,互不干扰。

这样就可以避免不同
应用程序之间的冲突和竞争,保证它们能够正常运行,提高了设备
的利用率和用户的使用体验。

另外,多开器还通过虚拟化技术实现了应用程序的共享资源。

在多个应用程序同时运行时,它们可以共享设备的一些资源,比如
网络连接、外部存储等。

这样就可以避免资源的浪费,提高了设备
的资源利用率,同时也为用户提供了更便利的操作体验。

总的来说,多开器的原理是基于虚拟化技术,通过将设备的资
源进行分割和共享,实现了多个应用程序的并行运行。

它通过应用
程序的隔离运行和共享资源,提高了设备的利用率和用户的使用体验。

希望通过本文的介绍,用户能够更好地理解多开器的工作原理,从而更好地利用它来提高自己的工作效率和生活质量。

游戏多开原理

游戏多开原理

游戏多开原理在现今的社会中,游戏已经成为了人们生活中不可或缺的一部分。

然而,有时候我们可能会遇到一些情况,比如想要同时玩多个账号的游戏,或者是想要在同一台电脑上同时进行多个游戏的情况。

这时,游戏多开就成为了一个非常有用的功能。

那么,游戏多开的原理是什么呢?接下来,我们就来详细介绍一下游戏多开的原理。

首先,我们需要了解游戏多开的基本概念。

游戏多开,顾名思义,就是指在同一台电脑上同时打开多个游戏客户端,从而实现同时进行多个游戏的目的。

这对于一些需要多个账号同时在线的游戏来说,是非常有用的功能。

其次,游戏多开的原理其实并不复杂。

在大多数情况下,游戏多开是通过虚拟化技术来实现的。

虚拟化技术可以将一台物理机器虚拟成多台逻辑上独立的虚拟机,每台虚拟机都可以运行自己的操作系统和应用程序。

通过这种方式,我们可以在同一台电脑上同时打开多个游戏客户端,每个客户端都在自己的虚拟机中运行,互不干扰。

另外,游戏多开的原理还涉及到一些操作系统的相关知识。

在Windows操作系统中,每个程序都会被分配一个独立的进程,而每个进程都拥有自己独立的内存空间。

因此,通过一些特定的技术手段,我们可以实现在同一台电脑上同时打开多个游戏客户端的目的。

除了虚拟化技术和操作系统的相关知识之外,游戏多开的原理还与游戏客户端本身的设计有关。

一些游戏客户端会对同一台电脑上同时运行多个客户端进行限制,因此需要通过一些特殊的技术手段来绕过这些限制,从而实现游戏多开的目的。

综上所述,游戏多开的原理主要涉及到虚拟化技术、操作系统知识以及游戏客户端设计等方面。

通过合理利用这些技术手段,我们可以在同一台电脑上实现同时进行多个游戏的目的。

当然,在使用游戏多开的功能时,我们也需要注意遵守游戏厂商的相关规定,避免违反游戏规则而导致账号被封禁的情况发生。

总的来说,游戏多开作为一种非常有用的功能,可以帮助玩家更便利地进行游戏。

通过了解游戏多开的原理,我们可以更好地利用这一功能,提高游戏体验,让游戏更加丰富多彩。

游戏双开以及多开方法

游戏双开以及多开方法

游戏双开以及多开方法
∙双开方法
∙dnf双开方法教程小游戏资讯y
∙天子传奇ol 双开游戏多开办法指南
∙WIN7用沙盘多开的方法
这些具体要找些论坛看看教程。

过驱动保护,写驱动保护之类的。

在任务管理器里把CF的进程关掉也不行,只能重启电脑才能再玩这个问题是最近才出现的,应该是上次更新到1.8.3.就开始出现这个问题了,好多人都遇到了用360游戏优化器,或者把游戏特效开最低,关掉无用的程序。

还不行的话。

应该程序本身问题了。

win7的,多建几个用户就可以了
一是跳过游戏的Login.exe也就是在线升级界面(如果没有多开工具,那么运行游戏主程序Fairy.exe就会说要先运行Login.exe~);二是跳过Fairy.exe也就是游戏主程序的防止同一程序同时运行多个实例的检测~ 其他细节不同的多开工具都不一样
把游戏目录下sound文件夹中的文件删掉(不要删除文件夹)。

游戏没声音了,游戏体验丧失一部分。

不过他要是不在乎那我也没办法了。

如果你学习的时间比较多你创新意热血江湖官网下载中心下载个心恋玄武然后这个是支持多开的所以
当小工具用~~~~~~~~~`
问道吧,开N个号都没问题,而且容易上手,级高了的话也可以卖钱,主要的不是号,是搞出来的东西,例如一个好BB起码几亿==,要多开也就这游戏容易搞钱,记得采纳我虽没玩过这款游戏,但你这种情况,你问一下其他玩家有没有同样的问题,如果其他玩家没有,那有可能就是你的宽带带宽不够,如果其他玩家也如此,那就是那款游戏的问题
不会。

游戏多开原理

游戏多开原理

游戏多开原理在现代社会,游戏已经成为了人们生活中不可或缺的一部分。

随着科技的不断发展,游戏的种类也越来越多样化,各种类型的游戏层出不穷。

然而,有时候我们可能会遇到一种情况,就是想要同时打开多个相同的游戏进行游玩,这就需要用到游戏多开的技术。

那么,游戏多开的原理是什么呢?首先,我们需要了解游戏多开的基本概念。

游戏多开,顾名思义,就是可以同时打开多个相同的游戏客户端,让玩家可以在同一台电脑上同时进行多个游戏的操作。

这在一定程度上提高了玩家的游戏体验,也让玩家可以更加高效地完成游戏任务。

其次,游戏多开的原理主要是通过虚拟化技术来实现的。

虚拟化技术可以将一台物理机器虚拟成多台逻辑上独立的虚拟机,每个虚拟机都可以运行独立的操作系统和应用程序。

在游戏多开中,我们可以利用虚拟化技术创建多个虚拟机,然后在每个虚拟机中打开一个游戏客户端,从而实现多个游戏的同时运行。

另外,游戏多开还需要考虑到硬件资源的分配和管理。

由于同时打开多个游戏会占用较多的内存和CPU资源,因此在进行游戏多开时,需要根据实际情况合理分配硬件资源,以避免出现卡顿、闪退等问题。

一般来说,可以通过虚拟化软件对每个虚拟机的硬件资源进行配置,确保每个游戏客户端都能够得到足够的资源支持。

此外,游戏多开还需要考虑到网络环境的影响。

多个游戏客户端同时运行可能会对网络带宽和延迟造成影响,因此需要在网络设置上进行一定的优化,以确保每个游戏客户端都能够获得稳定的网络连接,避免出现网络延迟和掉线的情况。

总的来说,游戏多开的原理主要是基于虚拟化技术,通过创建多个虚拟机来实现多个游戏客户端的同时运行。

在进行游戏多开时,需要合理分配硬件资源,优化网络设置,以确保每个游戏客户端都能够得到稳定的运行环境。

通过了解游戏多开的原理,我们可以更好地利用这项技术,提高游戏体验,享受更多的游戏乐趣。

华为应用多开的原理

华为应用多开的原理

华为应用多开的原理1. 背景介绍在智能手机的使用过程中,有时我们可能需要同时登录多个账号,或者在同一款应用中使用多个账号。

然而,原生的应用程序往往只允许单一用户登录,这限制了用户的使用体验。

为了解决这一问题,华为在其手机上提供了应用多开功能,允许用户同时登录多个账号或使用多个账号。

2. 应用多开的实现原理华为应用多开的实现原理基于以下几个关键技术:2.1 双进程机制华为手机应用多开通过双进程机制实现多账号登录或使用。

每次用户在应用多开时,系统将为该应用创建一个新的进程。

这个新的进程与原有进程相互独立,拥有独立的数据空间和运行环境,从而实现了多账号的并行登录。

2.2 虚拟化技术华为手机应用多开还利用虚拟化技术实现多账号使用。

通过虚拟化技术,系统可以在同一台设备上同时运行多个操作系统,每个操作系统拥有独立的应用程序和数据。

当用户在应用多开时,实际上是在虚拟的操作系统中打开了一个新的应用实例,从而实现了多账号的同时使用。

2.3 数据隔离为了保证多个账号之间的数据安全和隔离,华为手机应用多开对不同账号的应用实例进行了数据隔离。

每个应用实例独立保存用户数据和配置信息,确保不同账号之间的数据不会互相干扰。

这样,即使在多账号同时使用的情况下,用户的数据也能够得到有效保护。

3. 应用多开的使用方法使用华为手机上的应用多开功能非常简单。

只需按照以下步骤操作即可:1.打开华为手机的设置应用,找到“应用多开”选项。

2.点击“应用多开”,系统将列出所有支持多开的应用程序。

3.选择想要多开的应用程序,系统将为该应用创建一个新的实例。

4.在新的应用实例中,输入相应的账号和密码,即可登录不同的账号。

5.可以在多个应用实例之间自由切换,实现多账号的同时使用。

4. 应用多开的应用场景应用多开功能在许多场景中都能够发挥重要作用,例如:•社交软件:允许用户同时登录多个社交账号,方便处理私人和工作社交关系的分离。

•游戏应用:允许用户同时使用多个游戏账号,享受不同账号带来的游戏体验。

游戏多开方法

游戏多开方法

游戏多开方法在玩游戏的过程中,有时候我们会想要同时开启多个游戏账号,或者是同时玩多个游戏。

这样可以提高游戏体验,也可以节省时间。

但是很多游戏都限制了账号的多开,所以我们需要寻找一些方法来实现游戏的多开。

本文将介绍一些常见的游戏多开方法,希望能帮助到大家。

1. 使用多开器软件。

多开器软件是一种专门用来实现游戏多开的工具。

它可以让你在同一台电脑上同时运行多个游戏客户端。

常见的多开器软件有“多开精灵”、“多开宝”等。

使用多开器软件的方法一般比较简单,只需要将游戏客户端添加到多开器软件中,然后点击“多开”按钮即可。

但是需要注意的是,有些游戏可能会检测到多开器软件,并且会进行封号处理,所以在使用多开器软件的时候一定要小心。

2. 使用虚拟机。

虚拟机是一种可以在一台电脑上模拟多台电脑的软件。

通过虚拟机,我们可以在同一台电脑上同时运行多个操作系统,从而实现游戏的多开。

使用虚拟机的方法相对来说比较复杂,需要先安装虚拟机软件,然后在虚拟机中安装游戏客户端。

由于虚拟机是在一个独立的环境中运行游戏客户端,所以游戏通常不会检测到虚拟机的存在,这样就可以实现游戏的多开。

但是需要注意的是,虚拟机需要占用大量的系统资源,所以在使用虚拟机的时候要确保电脑的配置足够强大。

3. 修改注册表。

有些游戏的多开限制是通过注册表来实现的,所以我们可以通过修改注册表来解除游戏的多开限制。

具体的方法是先打开注册表编辑器,然后找到游戏的注册表项,修改其中的一些数值或者添加一些新的数值。

但是需要注意的是,修改注册表可能会对系统造成一些不良影响,所以在进行修改注册表的操作之前一定要备份好注册表。

4. 使用沙盒软件。

沙盒软件是一种可以在一个独立的环境中运行程序的工具。

通过沙盒软件,我们可以在同一台电脑上同时运行多个游戏客户端。

使用沙盒软件的方法比较简单,只需要将游戏客户端添加到沙盒软件中即可。

由于沙盒软件可以将程序运行在一个独立的环境中,所以游戏通常不会检测到沙盒软件的存在,这样就可以实现游戏的多开。

LOL您已超过游戏多开数量限制解决方案

LOL您已超过游戏多开数量限制解决方案

今天201‎3年4月1‎9日16:02:26打LO‎L彻底火了‎“您已超过游‎戏多开数量‎限制,请勿开启过‎多的游戏。


注销、结束进程均‎无用··
话不多说直‎接上解决方‎案:就是修改一‎下系统虚拟‎内存,具体原因我‎也不知道!
我把虚拟内‎存+2之后玩了‎6把又提示‎多开···所以本方法‎不绝对·我正在试验‎吧虚拟内存‎改为3G就‎是3069‎看能稳定多‎久!请看图·
到这里该干‎什么你懂得‎!重启机子上‎游戏··稳定5盘以‎上·
5盘以后又‎提示·建议把虚拟‎内存继续调‎大到3G就‎是3069‎M
本人小白·只喜欢动手‎·不喜勿喷!这只是暂时‎的·坐等官方解‎决!转载请注明‎--原创作者:俊飘
有问题请邮‎件咨询:51432‎2**********。

游戏多开原理

游戏多开原理

游戏多开原理
游戏多开是指在计算机系统中同时运行多个相同游戏实例的能力。

实现游戏多开的原理主要涉及到以下几个方面:
1. 进程隔离:计算机操作系统中的进程是指在系统上运行的一个程序的实例。

游戏多开通过创建多个进程来实现多个游戏实例的同时运行。

每个游戏实例运行在独立的进程中,彼此之间互不干扰,相当于每个游戏实例运行在独立的虚拟环境中。

2. 内存隔离:每个游戏实例都需要使用一定的系统内存作为运行时的临时存储空间。

为了避免多个游戏实例之间相互干扰,游戏多开会对每个游戏实例分配独立的内存空间,使它们在内存中互不干扰。

3. 文件隔离:游戏多开也会对游戏实例所使用的文件进行隔离,避免多个游戏实例之间的文件冲突。

每个游戏实例通常会有独立的配置文件、存档文件等,游戏多开会对这些文件进行分离管理,使不同实例的文件不会相互干扰。

4. 输入输出管理:在游戏多开中,每个游戏实例需要处理不同的输入输出。

为了保证不同游戏实例的输入输出不会互相干扰,游戏多开会对键盘、鼠标等输入设备进行分离管理,确保每个游戏实例只接收对应的输入。

总之,游戏多开的原理是通过进程隔离、内存隔离、文件隔离和输入输出管理等手段来实现在计算机系统中同时运行多个相
同游戏实例。

这样可以让玩家在同一台计算机上同时运行多个游戏实例,提高游戏效率和体验。

我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)

我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)

我要多开梦幻⼿游PC端(梦幻⼿游PC端多开的简单分析及实现办法)前⾔:每天⼯作都很⽆聊,总想找点乐⼦,但是⽑乐⼦都没有。

找个游戏玩吧,挂机的游戏。

找到了,这游戏叫做。

梦幻西游⼿游。

丁三⽯的游戏。

由于我⼿机是个功能机,所以,下载个模拟器来玩吧,下载了之后,安装了之后,启动游戏之后,CPU巨卡,可能我得电脑有点⽼。

怎么办,看到⼿游官⽹上竟然写着有个PC端。

OK,弄下来玩玩。

PC端就是不⼀样,截⾯很细腻,也超级不卡,感觉不错,但是我有2个号阿,怎么办,再开⼀个客户端,SB了,告诉我已经有了,问我怎么办,要不要杀了那个。

当然不能杀,不然还叫双开么,OK,本⽂开始了。

正⽂:墨迹了半天,终于开始了。

(我的⽬的不是⼲掉它,只是为了多开游戏,所以这⾥只作简单分析,我只需要⼀个IDA)直接两次打开客户端,会提⽰这么个情况,有提⽰,不错,先去找提⽰相关的字符串,然后再找字符串调⽤的位置。

但是察看了字符串资源之后,发现,字符串都不是ANSI的,IDA年⽼体衰,精⼒不⾜,查不到字符串,放弃MessageBox,简单办法解决,直接去找MessageBox的调⽤就⾏了,多简单⼀共就这么⼏处,⽟皇⼤帝怜悯我啊。

前⾯两个,调⽤处,看起来就不像,到第三处调⽤的时候,就挺像的了看⼀下参数2的字符串第四处调⽤的字符串,是这样的,找到了,对吧。

好了,我们常规的解决办法就是,梳理分⽀,然后往⾥⾯写jnz jz 相关的跳转,避过这种类似的错误提⽰了吧,但是,我不想直接修改游戏⽂件这么⼲,我所担⼼的:1:程序有签名,直接改程序,会破坏签名。

2:如果这个程序有⾃⾝的完整性校验,这不是⽩折腾么。

3:其他我可能意识不到的问题。

我想怎么⼲,那。

当然是找到源头,看它是怎么⼯作的,然后想办法避过去。

继续分析,其实,到这个弹窗这块,就已经注定是被检测出来已经多开了,所以,慢慢往回找代码,还好这个游戏客户端是x86的,⽽IDA对x86的F5⽀持很好,往前找源头,不远处会找到这样⼀处位置,双击进⼊函数可以看到,这,应该就是单实例判断,第⼀个函数,是⽤⼀种古⽼的⽅法,创建进程列表快照的⽅法遍历进程,然后判断进程路径名字,如果找到指定的,就不调第⼆个函数了。

应用多开的原理是什么

应用多开的原理是什么

应用多开的原理是什么1. 什么是应用多开应用多开是指在一台设备上同时运行多个相同的应用程序的能力。

这种功能通常用于在需要同一应用程序多次登录或多个账号同时操作的情况下。

2. 原理介绍2.1 虚拟化技术应用多开的实现原理主要依赖于虚拟化技术。

虚拟化技术是将一台物理机器划分为多个虚拟机,每个虚拟机都能够运行自己的操作系统和应用程序。

2.2 容器化技术容器化技术是一种轻量级的虚拟化技术,可以将应用程序及其所有依赖项封装在一个独立的容器中,并在同一物理机上运行多个容器。

2.3 沙盒环境应用多开还可以利用沙盒环境来实现。

沙盒是一个隔离的环境,将应用程序限制在自己的文件系统和资源访问范围内,防止其对系统和其他应用产生负面影响。

3. 不同平台的应用多开方案3.1 Android在Android平台上,应用多开的实现方案较为丰富。

可以通过以下方式来实现应用多开:•使用厂商自带的应用多开功能。

部分Android手机厂商提供了自己的应用多开功能,用户可以在设置中直接启用。

•使用第三方应用多开应用。

市场上有许多第三方应用多开应用,如Parallel Space、Go Multiple等。

3.2 iOS在iOS平台上,由于系统限制,应用多开的方案较为有限。

目前,用户可以通过以下方式实现应用多开:•使用越狱工具。

越狱后的iOS设备可以安装第三方插件或应用,从而实现应用多开的功能。

•使用Apple的开发者账号。

开发者账号可以让用户在同一台设备上安装多个相同的应用程序。

3.3 Windows在Windows平台上,可以通过以下方式实现应用多开:•使用多个用户账号。

每个用户账号都拥有独立的桌面和应用程序安装目录,用户可以在不同的账号中同时运行多个相同的应用程序。

•使用虚拟机软件。

用户可以安装虚拟机软件,如VirtualBox、VMware等,在虚拟机中运行多个操作系统和应用程序。

4. 应用多开的优势和应用场景4.1 优势•方便管理多个账号:对于需要同时登录多个账号的应用,应用多开可以让用户方便切换账号,节省时间和精力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常见游戏限制多开原理、与解决游戏多
开方法
Prayaya V3特约
全面分析游戏防止多开的原理,与游戏实现多开的方法。

进程隐藏,窗口标题修改,端口隐藏,多个游戏目录,多个操作系统账号,互斥体,内存映射文件,DLL全局共享等方法实现游戏多开。

游戏防止多开的方法有时候并不是只用一个方法的,多数游戏都会用多种方法一起来防止多开的,只要大家都懂得这几个游戏多开的原理,灵活运行,一个一个分析排查,基本上都能解决各种游戏多开了
其实要实现游戏多开也不是一件很难的事情,只要大家懂得游戏防止多开的原理,然后根据其对应游戏多开的方法便可以做出游戏多开器来了。

下面为大家总结一下游戏多开的原理与方法
第一,进程隐藏
部分游戏通过探测游戏客户端进程是否已经存在来防止重复打开,如游戏:英雄美人
游戏多开的办法为启动一个游戏客户端后,将该游戏的进程隐藏,只保留一个或多个。

第二,窗口标题修改(使用FindWindow API函数)
部分游戏通过探测游戏客户端的窗口是否已经存在来防止重复打开。

游戏多开的办法为将游戏的窗口修改为任意字符。

第三,端口隐藏
部分游戏通过默认打开TCP或者UDP端口监听,开第二个游戏的时候会打开端口失败从而判断游戏是否多开。

游戏多开的方法为此类需要采用netstat –a –n –o 命令查看端口即可实现游戏多开。

第四,多个游戏目录
部分游戏通过独占文件访问来防止重复打开。

游戏多开的方法为复制游戏客户端到另外的文件夹,在另外的文件夹打开即可。

第五,多个操作系统账号(仅限XP系统)
部分游戏通过限制一个用户只能打开一个游戏来防止重复打开。

游戏多开的方法为在系统账号里面多建立账号,一个游戏使用一个账号。

方法如下:
1、打开控制面版→用户帐户→创建一个新帐户→输入新帐户名(下一步)→创建帐户;
2、然后到桌面的游戏快捷图标上右键到[属性] 选[高级] 把里面[以其他用户身份运行]这个选项勾上开第2个程序的时候记得用你新建的用户进就可以了,省的老去切换用户了。

第六,互斥体。

部分游戏通过互斥对象/信号量/事件等线程同步对象来确定程序是否已经运行。

最常用的函数如:CreateMutexA。

1、首先创建一个互斥体,CreateMutex函数,第一个参数可以设置为NULL,第二个参数必
须设置为false,第三个参数表示互斥体的名称,这个名称最好有一些特殊标识以防止与其他应用程序冲突,比如程序名+时间。

2、使用GetLastError()函数判断错误信息是否为ERROR_ALREADY_EXISTS,如果是,则表示程序已经启动。

游戏多开的方法有二种,一为发现互斥体,然后关闭互斥体即可实现多开。

二为APIHOOK,接收到错误信息时,加重置命令(置错误码=0)即可。

QQ游戏,天龙八部==最常见的类型
第七,内存映射文件(File Mapping)
部分游戏通过把程序实例信息放到跨进程的内存映射文件中,防止游戏多开。

游戏多开的方法为拦阻该函数,不让它命名内核文件即可实现多开。

第八,DLL全局共享
DLL全局共享区在映射到各个进程的地址空间时仅被初始化一次,且是在第一次被windows 加载时,所以利用该区数据就能对程序进行多开限制。

游戏多开的方法为DLL劫持让游戏一开始运行就加载你的DLL,再转到原来的dll上就可以实现多开了。

第九,使用公共文件
程序启动时,在一个公共目录(比如C:\或者Temp目录)中创建一个公共文件,并将此文件设置为不共享读写。

第二个程序启动时,也打开此文件,如果打开成功,则表示程序未启动过,否则表示程序已经启动。

游戏多开的方法为:手动设置多开,比如:设定文件访问权限,不允许此程序在公共目录创建文件等。

第十,Mac地址验证
登陆服务器时,获取本机mac地址,发送至服务器端,服务端进行mac地址验证,如果mac 地址重复登陆,则不允许同服务器进行消息传递。

多开游戏的多法为:使用超级兔子等软件修改mac地址实现多开,针对此情况,本人也写了一个修改Mac地址的小工具,大家可以在网站下载。

第十一,查看网络连接
获取本机所有网络连接,使用GetTcpTable获取TCP连接,使用GetUdpTable获取UDP连接,检查是否有连接到服务器IP和端口号的连接,如果有,表示程序已经启动,否则程序未启动。

需要注意的是,其获取的ip和端口号都是一个DWORD值,并且高低位相反。

IP 地址可以通过inet_addr函数将字符串形式的IP地址(如“127.0.0.1”)转换为DWORD型的,端口号可以使用以下公式转换:DWORD dwPort = ((nPort & 0xff) << 8) + ((nPort & 0xff00) >> 8);
多开游戏的方法为:挂系统钩子,导致GetTcpTable函数失败实现多开。

相关文档
最新文档