CN106326113B - 一种游戏数据监控方法和装置 - Google Patents
一种游戏数据监控方法和装置 Download PDFInfo
- Publication number
- CN106326113B CN106326113B CN201610674255.5A CN201610674255A CN106326113B CN 106326113 B CN106326113 B CN 106326113B CN 201610674255 A CN201610674255 A CN 201610674255A CN 106326113 B CN106326113 B CN 106326113B
- Authority
- CN
- China
- Prior art keywords
- game
- data
- attribute
- game object
- target
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供了一种游戏数据监控方法和装置,本方案在被监控的游戏应用启动时,向该游戏应用的游戏进程中注入对象获取函数,以通过对象获取函数捕获游戏进程运行中构建的游戏对象的数据;且在获取游戏对象数据之后,如果检测到对所述游戏对象数据的修改指令,确定该修改指令所请求修改的目标游戏对象、目标游戏对象中待修改的至少一个目标属性以及目标属性的目标属性值,并通过调用游戏进程的属性修改接口,将游戏进程中的该目标游戏对象的该目标属性的属性值修改为该目标属性值。本方案有利于及时发现游戏中存在的安全漏洞,提高内存数据的安全性。
Description
技术领域
本申请涉及游戏技术领域,特别涉及一种游戏数据监控方法和装置。
背景技术
游戏外挂是指利用软件技术针对一款或多款游戏,通过改变游戏软件的部分程序制作而成的作弊程序。一种较为常见的作弊程序是通过篡改游戏客户端的内存数据,来实现游戏外挂。
实现游戏外挂的作弊程序大大影响到了游戏中内存数据的安全性,因此如何降低游戏内存数据被篡改的风险,提高游戏中内存数据的安全性是本领域技术人员需要解决的技术问题。
发明内容
本申请提供了一种游戏数据监控方法和装置,以及时发现游戏中存在的内存数据被篡改的安全漏洞,提高内存数据的安全性。
为了解决上述问题,一方面,本申请提供了一种游戏数据监控方法,所述方法包括:
在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入对象获取函数,所述对象获取函数用于捕获所述游戏进程运行中构建的游戏对象的数据;
获取所述对象获取函数捕获到的游戏对象数据;
当检测到对所述游戏对象数据的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值;
通过调用所述游戏进程的属性修改接口,将所述游戏进程中的所述目标游戏对象的所述目标属性的属性值修改为所述目标属性值。
另一方面,本申请实施例还提供了一种游戏数据监控装置,所述装置包括:
第一函数注入单元,用于在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入对象获取函数,所述对象获取函数用于捕获所述游戏进程运行中构建的游戏对象的数据;
对象数据获取单元,用于获取所述对象获取函数捕获到的游戏对象数据;
数据修改确定单元,用于当检测到对所述游戏对象数据的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值;
数据修改执行单元,用于通过调用所述游戏进程的属性修改接口,将所述游戏进程中的所述目标游戏对象的所述目标属性的属性值修改为所述目标属性值。
由以上可知,本申请中通过向游戏的游戏进程中注入对象获取函数,可以通过该对象获取函数自动获取游戏应用运行过程中内存中产生的游戏对象数据,通过执行对游戏对象数据的该修改指令,自动对游戏应用的内存中相应游戏对象的数据进行修改,以实现监控游戏中是否存在内存数据被修改的漏洞,从而可以及时定位出游戏中存在的安全漏洞,从而可以有利于提高游戏中内存数据的安全性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一种游戏数据监控方法一个实施例的流程示意图;
图2示出了本申请一种游戏数据监控方法又一个实施例的流程示意图;
图3示出了本申请一种游戏数据监控系统一个实施例的组成结构示意图;
图4示出了本申请一种游戏数据监控方法又一个实施例的流程示意图;
图5示出了本申请一种游戏数据监控方法应用于一种应用场景中的流程示意图;
图6a为本申请中监控应用的主界面的一种示意图;
图6b为监控应用输出的用于提示用户绑定浏览器客户端的提示页面的一种示意图;
图6c为web服务器返回的包含有浏览器客户端的二维码标识的页面示意图;
图7a、7b和7c分别指出了浏览器客户端展现游戏对象数据的三种页面示意图;
图8示出了在修改手游中游戏对象的属性值之后的一种游戏界面示意图;
图9示出了本申请一种游戏数据监控装置一个实施例的组成结构示意图;
图10示出了本申请一种终端一个实施例的硬件架构示意图。
具体实施方式
本发明可能使用的技术名词、简写或缩写如下:
游戏外挂:指利用软件技术针对一个或多个网络游戏,通过改变软件的部分程序制作而成的作弊程序,使用游戏外挂通常得到可以非法获益的效果。
手游:手机游戏,相对于运行在PC机上的游戏而言,主要是指运行在终端及平台上的游戏。
.NET:微软开发的一套跨平台技术。
C#:微软开发的程序设计语言。
unity3d:一套游戏开发工具,是全面整合的专业游戏引擎,目前大部分手游都是unity3d引擎开发的。
mono:一款开源的虚拟机,微软的.NET技术的开源实现,其中,unity3d引擎开发的游戏主要使用c#语言,c#代码就是在mono虚拟机中运行的。
mono Profile:mono虚拟机内集成了profiler工具,profiler工具可以采集mono虚拟机运行时数据,profiler工具主要用于提供给程序开发人员做性能分析,也可以通过profiler API对profiler进行配置。
构造函数:主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
事件的回调函数:回调函数是一个通过函数指针调用的函数。如果把函数的指针(或者说地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
hook:钩子,一种计算机技术,在没有源码的情况下,通过汇编的跳转指令实现修改目标函数的执行流程。
API,应用程序编程接口。
本申请实施例的游戏数据监控方法适用于任意终端上运行的游戏内存安全测试,以实现监控游戏是否存在内存安全漏洞。如,本申请实施例的游戏数据监控方法适用于对手机上的任意一款手游以及个人计算机上运行的任意一款游戏进行内存数据的安全监控。
本发明实施例描述的业务场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的游戏数据监控方法应用于安装有至少一款游戏应用的终端,且适用于对终端上任意一款游戏进行监控。
在终端上任意一款需要被监控的游戏应用启动时,终端可以向该游戏应用的游戏进程中注入对象获取函数,以通过该对象获取函数捕获到游戏进程运行中创建的游戏对象数据;当终端检测到对游戏对象数据的修改指令时,基于该修改指令所请求修改的目标游戏对象、目标游戏对象中待修改的至少一个目标属性以及该目标属性的目标属性值,调用该游戏应用的属性修改接口,将该游戏进程中创建的该目标游戏对象的目标属性的属性值修改为该目标属性值。
在本申请实施例中,通过向游戏的游戏进程中注入对象获取函数,可以通过该对象获取函数自动获取游戏应用运行过程中内存内产生的游戏对象数据,从而可以及时高效的获取游戏应用中产生的游戏对象数据,有利于及时对游戏应用中的内存数据进行监控。而且,当终端检测到针对该游戏应用中游戏对象数据的修改指令之后,可以依据该修改指令自动对游戏应用的内存中相应游戏对象的数据进行修改,这样,根据游戏应用中对游戏对象数据的修改是否生效,便可以判断游戏应用是否存在无法防御内存数据被修改的安全漏洞,从而可以及时准确的定位出游戏中存在的安全漏洞,进而有利于提高游戏中内存数据的安全性。
另外,在监控游戏应用的是否存在安全漏洞的过程中,无需手动在游戏应用的内存中搜索特定数值,也避免了手动去游戏应用的内存中定位需要修改的数据并手动进行数值修改,从而降低了定位游戏中安全漏洞的复杂度。
下面对本申请一种游戏数据监控方法进行介绍。参见图1,其示出了本申请一种游戏数据监控方法一个实施例的流程示意图,为了便于描述,以终端上运行有监控应用,终端基于该监控应用监控游戏应用为例进行介绍,本实施例的方法可以包括:
101,监控应用向当前需要监控的游戏应用发送启动命令。
102,游戏应用响应启动命令,启动游戏进程。
其中,步骤101和步骤102为可选步骤。在实际应用中,也可以由用户手动启动该游戏应用,监控应用可以监测游戏应用是否启动。
103,当检测到游戏应用启动时,监控应用向游戏应用的游戏进程中注入对象获取函数。
其中,该对象获取函数用于捕获该游戏进程运行中构建的游戏对象的数据。
可以理解的是,游戏应用的游戏进程在运行过程中,会在游戏应用对应的内存中创建游戏对象,在创建游戏对象的同时,会生成游戏对象对应游戏对象数据。如,游戏中的人物、物体等等都属于游戏对象,而每个游戏对象会具有类别、名称、属性、属性以及在内存中的存储地址等参数,例如,游戏中男人这个游戏对象的类别为人类、而该男人的属性可以包括性别、年龄、身高等等属性,相应的,每个属性会对应着一个属性值,游戏对象相关的类别、名称、属性、属性等都属于游戏对象的数据。
游戏应用的游戏进程在运行过程可以通过构造函数在内存中构建游戏对象,因此,向游戏进程中注入对象获取函数可以为:向该游戏进程中的构造函数的出口处插入该对象获取函数。这样,当游戏进程通过该构造函数创建了游戏对象之后,游戏进程会自动跳转到该对象获取函数,而对象获取函数获取到该构造函数构成的游戏对象数据之后,便可以将该游戏对象数据传输给监控应用。
向游戏进程中注入对象获取函数的实现方式可以有多种,如,一种可能的实现方式可以是向游戏进程中注入的对象获取函数可以为钩子hook函数,通过钩子函数检测到该游戏进程(如,通过监测构造函数)创建了游戏对象,则可以通过钩子函数将游戏对象数据传输给监控应用。
可选的,考虑到一些游戏的程序编程语言在编译后生成的程序文件是保存在动态链接库文件中,如,基于Unity3d引擎开发的游戏,主要编程语言是C#,编译后生成的程序文件(字节码)保存在dll文件中,因此,本申请中该对象获取函数也可以存储在一个动态链接库文件中,这样,游戏应用编译并运行游戏的程序文件的同时,会编译并运行该动态链接库文件中的对象获取函数(如,钩子函数)。
在本申请实施例中,该注入的实现方式也可以有多种,终端所采用的操作系统不同时,注入技术也会有所差别,如,当终端为windows操作系统时,可以采用远程线程注入技术实现回调函数和逻辑修改函数的注入,当然,对应其他操作系统而言,还可以有其他注入技术,在此不加以限定。
104,游戏应用在运行过程中运行该对象获取函数,以使得对象获取函数捕获到该游戏进程在内存中创建的游戏对象的数据。
在向游戏应用的游戏进程中注入对象获取函数之后,如果游戏进程构建了游戏对象,那么该对象获取函数会自动捕获该游戏进程所创建的游戏对象的数据,如,游戏对象的类别、名称、内存地址以及属性等等。同时,该对象获取函数会将捕获到的游戏对象数据传输给监控应用。
105,监控应用获取该对象获取函数捕获到的游戏对象数据。
在本申请实施例中,游戏对象数据可以为游戏对象的类别、名称、内存地址、属性名等等信息中的一种或多种,相比于获取内存中存储的数据值,获取到的游戏对象数据更易于用户的理解。
106,当监控应用检测到对该游戏对象数据的修改指令时,确定该修改指令所请求修改的目标游戏对象、目标游戏对象中待修改的至少一个目标属性以及该目标属性的目标属性值。
在本申请实施例中,监控应用在获取到游戏对象数据之后,用户可以根据需要从该游戏对象数据中选择出需要修改的游戏对象,以及该游戏对象中需要修改哪些属性的属性值,以检测游戏应用是否具备防御对内存中相关数据进行修改的能力。
为了便于区分将需要修改的游戏对象称为目标游戏对象,并将该游戏对象中需要修改的属性称为目标属性,而该目标属性需要修改到的具体数值称为目标属性值。
举例说明,游戏对象中人物1的属性包括血量、得分等属性,如果用户希望测试该游戏对象的血量是否可以被恶意篡改,则可以将血量作为需要修改的目标属性,并调整血量的具体数值,如将血量从100调整到无穷大。
107,监控应用通过调用该游戏进程的属性修改接口,将该游戏进程中该目标游戏对象的该目标属性的属性值修改为该目标属性值。
游戏进程具有可以获取以及设置属性的接口,监控应用调用该接口可以向游戏应用传输该目标游戏对象中待修改的目标属性的该目标属性值等参数,游戏进程确定出该目标游戏对象的目标属性在内存中的内存地址,将该内存地址对应的该目标属性的属性值修改为该目标属性值。
如,当游戏应用为依赖于mono虚拟机运行时,例如,基于Unity3d引擎开发的游戏,需要依赖于mono虚拟机进行游戏对象的创建、销毁等,在该种情况下,监控应用可以调用该mono虚拟机的内部接口:“mono_field_set_value”,以通过该内部接口将目标游戏对象的游戏类别、游戏名称、需要修改的目标属性以及该目标属性的目标属性值作为参数传输给mono虚拟机。相应的,mono虚拟机会依据该目标游戏对象的类别和名称定位出该目标游戏对象所在的内存地址,然后依据该目标游戏对象的内存地址区间以及该目标游戏对象的目标属性的属性名,从该游戏对象的内存地址区间中定位出该目标属性对应的内存地址,进而对该内存地址中该目标属性的属性值进行修改。
可以理解的是,对于一款游戏应用而言,由于游戏应用在不同时刻可能会创建不同的游戏对象,因此,在该游戏应用运行过程中,监控应用会持续动态的从该对象获取函数获取到游戏对象数据。而且由于随着游戏应用的运行,同一个游戏对象的属性值等参数会不断变化,因此,该监控应用可以存储获取到的游戏对象数据,并利用当前时刻获取到的游戏对象数据对当前时刻之前获取到的游戏对象数据进行更新,以使得用户可以通过监控应用获取到游戏应用的内存中游戏对象数据的变化情况。
进一步的,游戏应用在运行过程中除了会创建游戏对象之外,还会对游戏对象进行销毁,因此,在利用对象获取函数获取到游戏对象数据的同时,还需要获取游戏应用中被销毁的游戏对象的数据,以将被销毁的游戏对象的数据从监控应用获取到的游戏对象数据中删除。
因此可选的,在监控应用该向游戏应用的游戏进程中注入对象获取函数的同时,还可以向游戏应用的游戏进程中注入销毁回收函数,该销毁回收函数用于捕获该游戏进程运行中被销毁的游戏对象的数据。
相应的,在获取到对象获取函数捕获到的游戏对象数据之后,监控应用还可以包括:获取该销毁回收函数捕获到的被销毁的游戏对象的数据,依据当前捕获到的该被销毁的游戏对象的数据,更新当前获取到的游戏对象数据。其中,被销毁的游戏对象的数据包括游戏应用中被销毁的游戏对象的类别、名称、属性、参数值、内存地址等等中的一种或多种。
可选的,为了便于用户对该游戏对象数据的修改,在获取到游戏对象数据之后,该监控应用还可以将该游戏对象数据输出到指定界面进行显示这样,用户可以直接在该指定界面中对该游戏对象数据进行修改,以提高数据修改的便捷性。
其中,该指定界面可以有多种情况,在指定界面不同时,监控应用将游戏对象数据输出到该指定界面进行显示的过程也会有所不同。
下面以指定界面的几种可能情况为例,对本申请实施例的游戏数据监控方法进行介绍。参见图2,其示出了本申请一种游戏数据监控方法又一个实施例的流程示意图,本实施例的方法可以包括:
201,监控应用向被测试的游戏应用发送启动命令。
202,游戏应用响应启动命令,启动游戏进程。
其中,该步骤201和202为可选步骤。
203,当检测到游戏应用启动时,监控应用向游戏应用的游戏进程中注入动态链接库文件。
其中,该动态链接库文件包括对象获取函数以及销毁回收函数。
需要说明的是,将对象获取函数以及销毁回收函数包含在动态链接库文件中,并向游戏进程中注入该动态链接库文件仅仅是一种优选的实施方式,在实际应用中也可以单独注入对象获取函数以及该销毁回收函数。
可选的,该对象获取函数具体为用于捕获游戏进程中构造函数所构成的游戏对象的数据。
可选的,该销毁回收函数具体用于向游戏进程中注册垃圾回收事件,并设置垃圾回收事件的回调函数的输出值返回给监控应用。其中,在游戏进程中注册的垃圾回收事件用于回收游戏进程中销毁的游戏对象的相关数据。
204,当游戏进程在内存中创建游戏对象时,游戏进程运行该对象获取函数,以通过该对象获取函数捕获当前创建的游戏对象的游戏对象数据。
205,监控应用获取对象获取函数捕获到的游戏对象数据。
可选的,对象获取函数可以为钩子函数,这样,当游戏进程中用于创建游戏对象的构造函数创建游戏对象时,该钩子函数会捕获该构造函数所创建的游戏对象。
206,监控应用将对象获取函数返回的游戏对象数据存储到游戏对象列表。
需要说明的是,以列表的形式该对象获取函数返回的游戏对象数据仅仅是一种实现方式,在实际应用中还可以有其他存储方式来存储该游戏对象数据,在此不加以限定。
207,在游戏进程中销毁至少一个游戏对象时,游戏进程通过销毁回收函数获取被销毁的游戏对象的数据;
208,监控应用获取销毁回收函数获取到的被销毁的游戏对象的数据。
可选的,在销毁回收函数用于向游戏进程中注册垃圾回收事件,并设置垃圾回收事件的回调函数的输出值返回给监控应用的情况下,在游戏进程销毁了游戏对象时,会触发该垃圾回收事件回收被销毁的游戏对象的数据,然后通过该回调函数将被销毁的游戏对象的数据返回给监控应用。
进一步的,该动态链接库文件可以注入到游戏进程的构造函数的尾端。这样,在游戏进程在利用构造函数创建了游戏对象之后,会自动调用并执行该动态链接库文件中的对象获取函数,并在执行了该对象获取函数之后,可以自动执行该动态链接库中的该销毁回收函数,以通过该销毁回收函数向游戏进程中注册垃圾回收事件,并设置垃圾回收事件的回调函数的输出值返回给监控应用。
当然,游戏进程利用该销毁回收函数设置了垃圾回收事件的回调函数之后,后续再跳转到该动态链接库文件时,则无需再重复利用该销毁回收函数设置该垃圾回收事件的回调函数。
209,监控应用利用被销毁的游戏对象的数据,更新游戏对象列表中存储的游戏对象数据。
如,游戏对象列表中包括了对象1、对象2、对象3以及对象4对应的数据,而被销毁的游戏对象的数据为对象1和对象3的数据,则监控应用需要更新该游戏对象列表仅仅包含对象2和对象4的数据。
210,监控应用依据游戏对象列表中存储的游戏对象数据,显示包含有游戏对象数据的窗口界面。
在本申请实施例中,监控应用可以将当前保存的游戏对象列表中的游戏对象数据输出到该监控应用的窗口界面中,这样,用户可以在该窗口界面中查看到该游戏进程的内存当前创建了哪些游戏对象以及这些游戏对象的数据,提高了用户查看游戏应用的内存中游戏对象数据的便捷性。
可选的,为了提高修改游戏对象的属性值的便捷性,该窗口界面中可以具有用于编辑游戏对象中各个属性的属性值的输入框,这样,用户可以直接在输入框内输入期望修改到的目标属性值。或者是,在该窗口界面中将游戏对象的各个属性的属性值分别显示在不同的编辑框内,且每个编辑框对应着一个属性的属性值,这样,当用户希望对某个属性的属性值进行修改,以检测游戏应用是否存在安全漏洞时,则可以直接在编辑框内将该属性的属性值修改为所需的目标属性值。
可选的,考虑到游戏应用运行过程中,游戏对象的属性以及属性值也可能会有所变化,为了使得窗口界面中显示出的游戏对象的属性以及属性值与当前时刻游戏进程中游戏对象的属性以及属性值一致,可以先将游戏对象数据中包含的至少一个游戏对象的名称,输出到该指定界面进行显示。在获取到用户在该窗口界面中选择了目标游戏对象的名称时,再从当前获取到的游戏对象数据(如,当前的游戏对象列表)中获取该目标游戏对象的属性集合以及该属性集合中各个属性的属性值;然后,将该目标游戏对象属性集合以及该属性集合中各个属性的属性值输出到该窗口界面进行显示。相应的,可以获取到用户对该窗口界面中该属性集合中至少一个目标属性的修改指令。
211,当通过该窗口界面接收到对该游戏对象数据的修改操作时,监控应用获取修改指令,并确定修改指令所请求修改的目标游戏对象,目标游戏对象的至少一个目标属性以及该目标属性的目标属性值。
其中,该目标属性值是指该目标属性需要修改到的属性值。
212,监控应用通过调用该游戏应用的属性修改接口,将该游戏进程中该目标游戏对象的该目标属性的属性值修改为该目标属性值。
在另一种可能的实现方式中,监控应用可以将获取到的游戏对象数据输出到其他应用的界面中进行显示,如,监控应用可以将该游戏对象数据发送监控服务器,并通过监控服务器将游戏对象数据同步发送给网页服务器,以通过网页服务器将该游戏对象数据以网页的形式显示在浏览器客户端中。在该种情况下,游戏数据监控系统除了终端之外,还可以包括浏览器客户端以及网页服务器。
如,参见图3,其示出了本申请的游戏数据监控方法所适用于的游戏数据监控系统一个实施例的组成结构示意图,本实施例的游戏数据监控系统可以包括:
终端301,在该终端301中可以运行有监控应用3011,以及至少一款游戏应用3012;
与该终端301通过网络相连的监控服务器302;
与所述监控服务器302通过网络相连的网页服务器303;
以及与所述网页服务器303通过网络相连的浏览器客户端304,其中,该浏览器客户端304可以承载于台式计算机中。
在该游戏数据监控系统中,监控应用3011在获取到游戏应用运行中创建的游戏对象数据之后,可以将游戏对象数据通过监控服务器302传输给网页服务器303,并由网页服务器将该游戏对象数据呈现在网页页面中,并将网页页面的数据传输给浏览器客户端304,以在浏览器客户端上显示出该游戏对象数据。
需要说明的是,该浏览器客户端304可以与监控应用3011设置于同一个终端301上。可选的,考虑到终端的显示界面有限,如果在终端上运行游戏应用的同时,在终端上显示获取到的游戏应用对应的游戏对象数据,则可能会导致用户无法在完成查看游戏界面的同时,方便的查看游戏对象数据。特别是,当需要测试的游戏为手游时,则在手游所在的终端上显示游戏界面的同时,很难再显示监控应用获取到的游戏对象数据。因此,本申请实施例中可以浏览器客户端可以与监控应用处于不同的终端上。例如,监控应用处于手机上,而浏览器客户端实际上处于台式机中。
结合图3,参见图4,其示出了本申请一种游戏数据监控方法又一个实施例的流程示意图,本实施例的方法可以包括:
401,监控应用获取该浏览器客户端的标识。
其中,该浏览器客户端的标识可以有多种可能,如,该浏览器客户端的标识可以为该浏览器客户端所在终端的唯一标识,当然,也可以有其他可能,只要是能够唯一标识该浏览器客户端即可。
可选的,在该步骤401之前,用户还可以启动该监控应用以及该浏览器客户端。
402,监控应用将该浏览器客户端的标识与该监控应用的标识之间的关联关系发送给监控服务器。
403,监控服务器存储该监控应用的标识与浏览器客户端的标识之间关联关系,并将关联关系发送给该网页服务器。
通过建立监控应用与浏览器客户端之间的关联关系,当该监控应用通过监控服务器向网页服务器发送了游戏对象数据之后,网页服务器可以根据该关联关系确定需要将该游戏对象数据发送给哪个浏览器客户端进行展现。
需要说明的是,以上步骤401至403仅仅是为了实现通过浏览器客户端以网页的形式显示出游戏对象数据,而做的一些监控应用与浏览器客户端之间进行配对等前期准备工作,这部分内容并不属于游戏数据监控的具体监控过程。
当然,建立监控应用与浏览器客户端之间关联关系的方式可以有多种,以上步骤401至403仅仅是一种优选的实施方式,但是通过其他方式建立监控应用与浏览器客户端之间关联关系也同样适用于本申请。
404,监控应用向被测试的游戏应用发送启动命令。
可选的,监控应用可以检测该监控应用所在终端上安装有哪些游戏,并显示出相应的游戏列表,用户可以从游戏列表中选择需要测试的游戏应用并向监控应用发送启动指示,以触发监控应用启动用户选择的游戏应用。
405,游戏应用响应启动命令,启动游戏进程。
406,当检测到游戏应用启动时,监控应用向游戏应用的游戏进程中注入动态链接库文件。
其中,该动态链接库文件包括对象获取函数以及销毁回收函数。
407,当游戏进程在内存中创建游戏对象时,游戏进程运行该对象获取函数,以通过该对象获取函数捕获当前创建的游戏对象的数据并传输给监控应用。
步骤406和407的具体实现过程可以参见本申请中其他实施例的相关介绍,在此不再赘述
408,监控应用将对象获取函数返回的游戏对象数据存储到监控服务器的游戏对象列表中。
具体的,监控服务器接收到游戏对象数据之后,会将游戏对象数据存储到该游戏对象列表中,以通过该游戏对象列表维护各个游戏对象的数据变化。
其中,以列表的形式存储游戏对象数据仅仅是一种可选的实现方式。
409,在游戏进程中销毁至少一个游戏对象时,游戏进程中的销毁回收函数获取被销毁的游戏对象的数据并发送给终端的监控应用。
该步骤409具体实现过程也可以参见前面实施例的相关介绍,在此不再赘述。
410,监控应用将被销毁的游戏对象的数据发送给监控服务器,以使得监控服务器将该被销毁的游戏对象的数据从该游戏对象列表中删除。
411,网页服务器向监控服务器请求该监控应用获取到的游戏对象数据。
其中,网页服务器可以实时或者按照预设的周期定期向监控服务器请求游戏对象数据。当然,也可以是网页服务器也可以是在接收到用户通过浏览器客户端发送的数据获取请求时,再向监控服务器请求游戏对象数据。
可以理解的是,在实际应用中,也可以是监控服务器定期或者不定期向网页服务器发送监控应用捕获到的游戏对象数据。
412,监控服务器将游戏对象列表中包含的游戏对象数据返回给网页服务器。
413,网页服务器向浏览器客户端返回包含有游戏对象数据的网页数据。
与图2实施例相似,在网页中可以呈现出各个类别下不同游戏对象的属性以及属性值。
可选的,为了便于修改某个游戏对象中某个属性的属性值,在该网页每个属性的属性值对应着一个输入修改值的输入框,这样,用户可以直接在输入框内输入期望修改到的目标属性值。或者是,在该网页中将游戏对象的各个属性的属性值分别显示在不同的编辑框内,且每个编辑框对应着一个属性的属性值,这样,当希望对某个属性的属性值进行修改时,则可以直接在编辑框内将该属性的属性值修改为所需的目标属性值。
可选的,考虑到游戏应用运行过程中,游戏对象的属性以及属性值也可能会有所变化,为了使得网页显示出的游戏对象的属性以及属性值与当前时刻游戏进程中游戏对象的属性以及属性值一致,网页服务器可以先向监控服务器请求游戏对象列表中不同游戏对象所属的类别和游戏对象的名称,这样,在网页中可以显示出游戏应用当前已经创建有的所有游戏对象的类别以及各个类别下不同游戏对象的名称。用户可以根据测试需要,选择需要进行内存安全测试的游戏对象的类别,然后再从该类别下选择需要监控的游戏对象,即本申请实施例中的目标游戏对象。网页服务器获取到目标游戏对象的名称之后,再向监控服务器请求该目标游戏对的属性集合以及该属性集合中各个属性的属性值,并以网页的形式返回给浏览器客户端。
414,当检测到用户对该网页中展现出的游戏对象数据进行修改操作时,浏览器客户端生成修改指令。
其中,该修改指令中包括请求修改的目标游戏对象、目标游戏对象的至少一个待修改的目标属性以及目标属性所需调整到的目标属性值。
如,用户可以直接在网页中对显示的属性的属性值进行修改,以将属性值修改为目标属性值,然后通过浏览器客户端向网页服务器发送修改指令。如,用户通过在前面提到的输入框或编辑框内填写属性的目标属性值,然后点击网页中的确定或发送等选项,触发浏览器客户端生成修改指令。
415,浏览器客户端通过网页服务器将该修改指令发送给终端的监控应用。
其中,该修改指令至少携带有需要修改的目标游戏对象的名称、目标游戏对象中待修改的至少一个目标属性以及每个目标属性的目标属性值,还可以携带有该目标游戏对象的类别。
416,监控应用响应该修改指令,调用该游戏应用的属性修改接口,将该游戏进程中该目标游戏对象的该目标属性的属性值修改为该目标属性值。
可以理解的是,将该游戏进程中该目标游戏对象的该目标属性的属性值修改为该目标属性值,如果当前对游戏进程中该目标属性的属性值修改为目标属性值的修改生效,游戏应用的游戏界面中会呈现出与该修改对应的效果,从而说明游戏应用不具备防御通过修改游戏的内存数据实现游戏外挂的能力,游戏应用中存在安全漏洞,从而可以定位出安全漏洞以及导致安全漏洞的具体游戏对象,进而有利于提高游戏应用中内存数据的安全性。
需要说明的是,本申请实施例是以终端上的监控应用对终端上的一款游戏应用的数据进行监控为例进行介绍,但是可以理解的是,该监控应用可以对终端上的多款游戏应用进行监控,对于任意一款游戏应用进行监控的过程均可以参见图4实施例的相关介绍,在此不再赘述。
为了便于理解,结合一种具体的应用场景对本申请实施例的游戏数据监控方法进行介绍,以被测试的游戏为基于Unity3d引擎开发的手游,网页服务器为web服务器为例进行介绍。参见图5,其示出了本申请一种游戏数据监控方法又一个实施例的流程交互示意图。本实施例的方法可以包括:
501,用户在终端上启动监控应用,在监控应用上展现出可供选择的多个测试选项。
如,以监控应用为安全雷达为例,则该安全雷达启动后会显示出可供用户选择的监控选项,具体可以参见图6a。在本申请实施例中,需要监控游戏应用对于通过修改内存数据实现游戏外挂是否存在防御策略,因此,需要进行内存修改测试,即对内存数据进行监控。
502,在检测到用户选择了“内存修改测试”这一测试项目时,监控应用显示内存测试界面,并在该内存测试界面中提示用户绑定浏览器客户端。
仍以安全雷达为例,提示用户绑定浏览器客户端的提示页面可以参见图6b,在该例子中,安全雷达提供了扫一扫功能,这样可以通过扫描浏览器客户端对应的二维码,建立该安全雷达应用于该浏览器客户端之间的绑定关系。
当然,通过其他方式建立安全雷达等测试应用与浏览器客户端之间的绑定关系的方式也同样适用于本申请实施例。
503,用户在个人计算机上打开浏览器客户端,并通过该浏览器客户端向web服务器请求返回用于进行内存安全测试的指定页面。
504,web服务器为该浏览器客户端返回该指定页面。
其中,步骤503和504也可以是与步骤501和步骤502同时执行。
505,用户在该浏览器客户端显示的该指定页面进行指定操作,以通过浏览器客户端向web服务器请求标识信息。
506,浏览器客户端获取web服务器返回的标识信息,并显示该标识信息。
其中,该标识信息可以用于唯一标识该浏览器客户端。
例如,图6c可以为web服务器为浏览器客户端返回的指定页面的一种示意图,在该指定页面中用户可以选择“立即使用”,则web服务器为该浏览器客户端生成一个标识信息,如,在本申请web服务器可以为该浏览器客户端返回一个二维码标识。
507,用户利用监控应用获取浏览器客户端的标识信息,并将向监控服务器发送绑定请求,该绑定请求携带有该监控应用的标识以及该浏览器客户端的标识信息。
如,仍以图6b为例,用户点击该图6b界面中的扫一扫之后,可以扫描到浏览器客户端的二维码,从而自动触发向监控服务器发送该二维码对应的浏览器客户端的标识信息以及该监控应用的标识信息。
508,浏览器客户端将该监控应用与该浏览器客户端的绑定关系发送给web服务器。
需要说明的是,以上步骤501至508仅仅是为了通过浏览器客户端以web页面的形式显示出手游运行中内存中的对象数据,而做的一些设备配对等前期准备工作,这部分内容并不属于手游测试的具体测试过程。
509,用户在监控应用选择该手机中需要监控的目标手游时,监控应用启动该手机上的该目标手游。
510,监控应用在手游启动时,向该手游中mono虚拟机的构造函数“mono_object_new_alloc_specific”的尾端插入动态链接库文件。
其中,该动态链接库文件包括用于获取回调函数的hook函数;以及用于修改mono虚拟机中垃圾回收(GC,Garbage Collection)事件的回调函数的销毁回收函数。
特别的,当手机的操作系统为安卓操作系统时,可以插入so格式的动态链接库文件。
511,手游中mono虚拟机将包含有手游程序文件的动态链接库以及插入的该动态链接库加载到内存中,且当mono虚拟机通过“mono_object_new_alloc_specific”创建游戏对象时,该hook函数捕获“mono_object_new_alloc_specific”创建的游戏对象的数据。
具体的,hook函数捕获“mono_object_new_alloc_specific”的返回值,得到被创建的游戏对象的内存地址;然后,依据该游戏对象的内存地址调用mono虚拟机的API函数:“mono_object_get_class”获取游戏对象的类型,同时,调用mono虚拟机中API函数:“mono_class_get_name”获取游戏对象的名称。
可以理解的是,基于Unity3d引擎开发的游戏,主要编程语言是C#,编译后生成的程序文件(字节码)保存在动态链接库(DLL,Dynamic Link Library)文件中。其中,C#是一种类似脚本的编程语言,而编译后生成的dll文件是一种中间语言,并非是可执行的二进制程序文件,因此,dll文件中的C#的类与对象的创建、使用、销毁需要依赖于mono虚拟机。而游戏应用在运行时,需要将dll文件加载到内存中,使用dll文件中的游戏核心程序时,首先需要创建游戏对象,游戏对象的生命周期需要在mono虚拟机中维护。正是基于此,可以将hook函数插入到手游的hook mono虚拟机中构造游戏对象的构造函数mono_object_new_alloc_specific的尾端,这样,当游戏对象在mono虚拟机中被创建时,监控应用可以通过该捕获该构造函数创建的游戏对象的信息,如,游戏对象的类名、游戏对象在内存中的地址以及游戏对象的名称等。
512,手游中mono虚拟机运行插入的动态链接库,通过该销毁回收函数调用monoprofiler工具接口:“mono_profiler_set_events”注册游戏对象的GC事件,并利用monoprofiler工具接口“mono_profiler_install_gc”设置GC事件的回调函数为“my_mono_gc_func()”。
通过注册游戏对象的GC事件并设置GC事件的回调函数为“my_mono_gc_func()”,这样,就可以触发mono虚拟机在存在销毁游戏对象并回收游戏对象的GC事件时,自动调用已设置的回调函数my_mono_gc_func(),以获取被销毁对象的信息。
需要说明的是,该步骤512实际上是通过销毁回收函数配置回调函数的过程,以实现获取手游中mono虚拟机销毁的游戏对象的数据。可以理解的是,在实际应用中,通过该销毁回收函数配置一次GC事件的回调函数之后,后续无需再重复配置,mono虚拟机检测到该销毁回收函数已经对GC事件的回收函数进行了配置之后,无需再执行该销毁回收函数对GC事件的配置过程。
513,监控应用获取hook函数捕获到的游戏对象的内存地址、类别和名称。
其中,游戏对象的内存地址可以理解为游戏对象在内存中的地址。
其中,512和513的顺序并不限于图5所示,也可以是同时执行该步骤512和步骤513。
514,监控应用将游戏对象类别和名称存储到监控服务器中该监控应用对应的对象生命状态表中。
可选的,监控应用还可以将游戏对象的内存地址存储到对象生命状态表中。
其中,该对象生命状态列表中保存了该手游的mono虚拟机中当前存在的所有游戏对象的信息,如,每个游戏对象的内存地址、类别和名称。
可以理解的是,在同时对多个终端上的手游进行测试时,监控服务器需要分别存储不同监控应用上传的游戏对象数据,这样,不同的游戏应用各自对应着一个对象生命状态表。
515,手游中的mono虚拟机对游戏对象进行销毁时,GC事件回收被销毁的游戏对象的数据。
516,监控应用通过回调函数获取GC事件回收到的被销毁的游戏对象的数据。
其中,被销毁的游戏对象的数据可以包括:游戏对象类别和名称;当然,还可以包括被销毁的游戏对象的内存地址、属性以及属性值。
517,监控应用将该被销毁的游戏对象的数据发送给监控服务器,以更新该对象生命状态列表。
其中,监控服务器可以依据被销毁的游戏对象的数据,将被销毁的游戏对象的对象名、类别和内存地址等信息从该对象生命状态列表中删除,以使得该生命状态列表中包含的游戏对象的信息与mono虚拟机中当前存在游戏对象的信息保持一致。
518,web服务器向监控服务器请求该监控应用获取到的游戏对象数据。
如,web服务器可以在向监控服务器发送获取游戏对象数据的请求时,在该请求中携带该监控应用的标识,以使得监控服务器可以确定web服务器需要请求哪个监控应用对应的游戏对象数据。
519,监控服务器将该生命状态表中所包含的游戏对象的类别、名称以及游戏对象的内存地址发送给web服务器。
520,web服务器向该监控应用绑定的浏览器客户端发送包含有游戏对象的类别和名称的web页面。
如图7a,其示出了包含有游戏对象类别和游戏对象名称的web页面的示意图。在该图7a显示的web页面中,左侧一列为监控应用获取到的所有游戏对象所归属的各个类别,右侧一列为某一类别下所包含的游戏对象的名称。例如,由图7a可见,当用户选择序号为789的游戏类别“PlayerTabItem”之后,右侧会显示出该“PlayerTabItem”这一类别所包含的游戏对象的名称,如该类别下具有6个游戏对象。
可选的,在该web页面中还可以显示出游戏对象的名称所对应的内存地址。或者是,虽然在该web页面中不显示该游戏对象的名称所对应的内存地址,但是web服务器可以将该游戏对象的名称关联的内存地址发送给浏览器客户端。
521,当浏览器客户端检测到用户选择web页面中的目标游戏对象时,将web服务器发送对象属性展现请求。
其中,该对象属性展现请求携带有该目标游戏对象的名称和指定对象的类别。
仍以图7a为例进行介绍,当用户选择了图7a右侧的游戏对象,例如,选择了内存中起始地址为“C9CDA528”的游戏对象之后,浏览器客户端会向web服务器发送对象属性展现请求,以通过web服务器向监控应用请求该游戏对象“C9CDA528”对应的属性、属性值等信息。
可选的,该对象展现请求中还可以携带该目标游戏对象的内存地址。
522,web服务器经监控服务器向该监控应用发送属性获取指令。
其中,该属性获取指令携带有该目标游戏对象的名称和类别。
53,监控应用调用mono虚拟机中接口:“get_obj_field_value”,查询该目标游戏对象的类别和名称所对应的属性信息。
该属性信息可以包括属性名、属性类型和属性值。
其中,“get_obj_field_value”为mono虚拟机中用于获取属性参数的内部接口,监控应用通过调用“get_obj_field_value”,可以基于该目标游戏对象的类别和目标游戏对象的名称,遍历mono虚拟机中该目标游戏对象下的所有属性信息。
524,监控应用经监控服务器将属性信息发送给web服务器。
525,web服务器将包含该属性信息的web页面发送到该浏览器客户端进行展现。
需要说明的是,在包含有属性信息的web页面中,属性的属性值可以显示在可编辑控件中,这样,用户可以直接在该属性对应的属性值所在的可编程控件中修改属性值,以将属性值修改为用户所需的目标属性。
如,参见图7b,其示出了包含有属性信息的web页面的一种示意图,可见,与图7a的web页面相比,该图7b的web页面中多了属性信息的展现列,如图7b中参数名以及参数值分别表示属性名以及属性值。同时由图7b可知,在该web页面中该属性对应的属性值是可以编辑的,这样用户可以根据实际需要确定需修改的目标属性,并对该目标属性的属性值进行修改。
可选的,在web服务器返回的web页面中还可以显示有游戏对象的内存地址,如参见图7c,在该图7c所示出的web页面中游戏对象的对象名称后还关联有该游戏对象的内存地址。
526,依据用户在web页面中对属性信息的修改,浏览器客户端确定被修改的目标属性以及该目标属性的目标属性值。
527,浏览器客户端经web服务器向监控应用发送修改指令。
该修改指令携带有请求修改的目标游戏对象的类别、目标游戏对象的名称,以及该目标游戏对象中待修改的目标属性以及该目标属性对应的目标属性值。
如,参见图7b或7c,在用户完成修改之后,可以点击该web页面上的“发送”按键,浏览器客户端便会依据需要修改的目标游戏的游戏类别、名称、目标属性和目标属性值等,生成修改指令。
528,监控应用调用手游的mono虚拟机中的内部接口:“mono_field_set_value”,将mono虚拟机中该目标游戏对象中的目标属性的属性值修改为该目标属性值。
其中,监控应用调用该mono虚拟机的内部接口:“mono_field_set_value”时,可以将目标游戏对象的游戏类别、游戏名称、需要修改的目标属性以及该目标属性的目标属性值作为参数传输给mono虚拟机,以将该目标属性的属性值修改为该目标属性值。当然,还可以将目标游戏对象的内存地址也作为参数传输给mono虚拟机,以快速定位该目标游戏对象中该目标属性所在的内存地址,提高目标属性值的修改效率。
可以理解的是,在完成对目标属性值的修改之后,手游可以继续运行,根据手游运行过程中该目标游戏对象的目标属性是否改变为该目标属性值,来分析该手游是否存在无法防御该种通过修改手游内存而导致的游戏外挂的安全漏洞。如参见7c,用户在web页面中将目标游戏对象“EE55CE00”的目标属性:血量“mHealth”的属性值修改为“99999”,并通过web服务器向监控应用发送了修改指令之后,监控应用将手游的mono虚拟机内该目标游戏对象中目标属性:血量“mHealth”的属性值修改为“99999”,然后手游运行,如果手游中该血量的属性值生效,则说明手游存在漏洞。如图8所示,该手游界面中表征血量的数值显示为“99999”,参见图8左上角的数值,则说明对手游内存中角色血量的修改生效,手游存在漏洞。
下面对本发明实施例提供的一种游戏数据监控装置进行介绍,下文描述的一种游戏数据监控装置可与上文描述的一种游戏数据监控方法相互对应参照。
参见图9,其示出了本申请一种游戏数据监控装置一个实施例的组成结构示意图,,所述装置包括:
第一函数注入单元901,用于在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入对象获取函数,所述对象获取函数用于捕获所述游戏进程运行中构建的游戏对象的数据;
对象数据获取单元902,用于获取所述对象获取函数捕获到的游戏对象数据;
数据修改确定单元903,用于当检测到对所述游戏对象数据的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值;
数据修改执行单元904,用于通过调用所述游戏进程的属性修改接口,将所述游戏进程中的所述目标游戏对象的所述目标属性的属性值修改为所述目标属性值。
可选的,所述第一函数注入单元,具体为,用于向所述游戏进程中的构造函数的出口处插入所述对象获取函数。
可选的,还包括:
对象数据输出单元,用于在所述获取所述对象获取函数捕获到的游戏对象数据之后,将所述游戏对象数据输出到指定界面进行显示;
所述数据修改确定单元,具体为,用于当通过所述指定界面获取到修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值。
可选的,所述对象数据输出单元,具体为,用于将所述游戏对象数据发送给指定的浏览器客户端,以在所述浏览器客户端显示出包含所述游戏对象数据的页面;
所述数据修改确定单元,具体为,用于当接收所述浏览器客户端发送的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值,所述修改指令为所述浏览器客户端依据所述页面上感应到的针对所述游戏对象数据的修改操作,生成的指令。
可选的,所述对象数据输出单元,包括:
数据同步子单元,用于将获取到的所述游戏对象数据发送给监控服务器,以由所述监控服务器通过网页服务器将所述游戏对象数据传输给所述浏览器客户端,实现在所述浏览器客户端同步显示包含所述游戏对象数据的页面。
可选的,还包括:
第二函数注入单元,用于在所述第一函数注入单元向所述游戏应用的游戏进程中注入对象获取函数的同时,向所述游戏应用的游戏进程中注入销毁对象获取函数,所述销毁对象获取函数用于捕获所述游戏进程运行中被销毁的游戏对象的数据;
销毁对象获取单元,用于在所述获取所述对象获取函数捕获到的游戏对象数据之后,获取所述销毁对象获取函数捕获到的所述被销毁的游戏对象的数据;
对象数据更新单元,用于依据所述被销毁的游戏对象的数据,更新获取到的所述游戏对象数据。
其中,该第一函数注入单元和第二函数注入单元可以为同一个单元,这样,通过该单元可以在注入对象获取单元的同时,注入该销毁对象获取函数。
可选的,该对象获取函数和该销毁对象函数可以处于同一个文件中,如该文件可以为动态链接库文件,这样通过向游戏进程注入该文件,便可以完成对象获取函数和销毁对象函数的注入。
本发明实施例还提供了一种终端,该终端可以实现上述所述的一种游戏数据监控方法。
图10示出了终端的硬件结构框图,参照图10,终端100可以包括:处理器1001,通信接口1002,存储器1003和通信总线1004;
其中处理器1001、通信接口1002、存储器1003通过通信总线1004完成相互间的通信;
可选的,通信接口1002可以为通信模块的接口,如GSM模块的接口;
处理器1001,用于执行程序;
存储器1003,用于存放程序;
程序可以包括程序代码,所述程序代码包括计算机操作指令。
处理器1001可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器1003可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
其中,程序可具体用于:
在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入对象获取函数,所述对象获取函数用于捕获所述游戏进程运行中构建的游戏对象的数据;
获取所述对象获取函数捕获到的游戏对象数据;
当检测到对所述游戏对象数据的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值;
通过调用所述游戏进程的属性修改接口,将所述游戏进程中的所述目标游戏对象的所述目标属性的属性值修改为所述目标属性值。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (12)
1.一种游戏数据监控方法,其特征在于,应用于终端,所述方法包括:
在所述终端中被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入对象获取函数及销毁回收函数,所述对象获取函数用于捕获所述游戏进程运行中,在所述游戏应用对应内存中构建的游戏对象的数据,所述销毁回收函数用于捕获所述游戏进程运行中被销毁的游戏对象的数据;
获取所述对象获取函数捕获到的游戏对象数据;
获取所述销毁回收函数捕获到的所述被销毁的游戏对象的数据;
依据所述被销毁的游戏对象的数据,更新获取到的所述游戏对象数据;
当检测到对所述游戏对象数据的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值;
通过调用所述游戏进程的属性修改接口,将所述游戏进程中的所述目标游戏对象的所述目标属性的属性值修改为所述目标属性值,以便在对所述目标游戏对象的修改生效时,确定所述游戏应用存在内存数据被篡改的风险。
2.根据权利要求1所述的方法,其特征在于,所述向所述游戏应用的游戏进程中注入对象获取函数,包括:
向所述游戏进程中的构造函数的出口处插入所述对象获取函数。
3.根据权利要求1所述的方法,其特征在于,在所述获取所述对象获取函数捕获到的游戏对象数据之后,还包括:
将所述游戏对象数据输出到指定界面进行显示;
所述检测到对所述游戏对象数据的修改指令,包括:
通过所述指定界面获取到对所述游戏对象数据的修改指令。
4.根据权利要求3所述的方法,其特征在于,所述将所述游戏对象数据输出到指定界面进行显示,包括:
将所述游戏对象数据发送给指定的浏览器客户端,以在所述浏览器客户端显示出包含所述游戏对象数据的页面;
所述通过所述指定界面获取到对所述游戏对象数据的修改指令,包括:
接收所述浏览器客户端发送的修改指令,所述修改指令为所述浏览器客户端依据所述页面上感应到的针对所述游戏对象数据的修改操作,生成的指令。
5.根据权利要求4所述的方法,其特征在于,将所述游戏对象数据发送给指定的浏览器客户端,包括:
将获取到的所述游戏对象数据发送给监控服务器,以由所述监控服务器通过网页服务器将所述游戏对象数据传输给所述浏览器客户端,实现在所述浏览器客户端同步显示包含所述游戏对象数据的页面。
6.根据权利要求3所述的方法,其特征在于,所述将所述游戏对象数据输出到指定界面进行显示,包括:
将所述游戏对象数据中包含的至少一个游戏对象的名称,输出到所述指定界面进行显示;
当获取到用户在所述指定界面中选择目标游戏对象的名称时,从当前获取到的游戏对象数据中获取所述目标游戏对象的属性集合以及所述属性集合中各个属性的属性值;
将所述目标游戏对象属性集合以及所述属性集合中各个属性的属性值输出到所述指定界面进行显示;
所述通过所述指定界面获取到对所述游戏对象数据的修改指令,包括:
获取到用户对所述指定界面中所述属性集合中至少一个目标属性的修改指令。
7.根据权利要求6所述的方法,其特征在于,所述销毁回收函数用于设置所述游戏进程中垃圾回收事件的回调函数,以使得所述回调函数返回所述垃圾回收事件获取到的所述被销毁的游戏对象的数据。
8.一种游戏数据监控装置,其特征在于,应用于终端,所述装置包括:
第一函数注入单元,用于在所述终端中被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入对象获取函数,所述对象获取函数用于捕获所述游戏进程运行中,在所述游戏应用对应的内存中构建的游戏对象的数据;
第二函数注入单元,用于在所述第一函数注入单元向所述游戏应用的游戏进程中注入对象获取函数的同时,向所述游戏应用的游戏进程中注入销毁回收函数,所述销毁回收函数用于捕获所述游戏进程运行中被销毁的游戏对象的数据;
对象数据获取单元,用于获取所述对象获取函数捕获到的游戏对象数据;
销毁对象获取单元,用于在所述获取所述对象获取函数捕获到的游戏对象数据之后,获取所述销毁回收函数捕获到的所述被销毁的游戏对象的数据;
对象数据更新单元,用于依据所述被销毁的游戏对象的数据,更新获取到的所述游戏对象数据;
数据修改确定单元,用于当检测到对所述游戏对象数据的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值;
数据修改执行单元,用于通过调用所述游戏进程的属性修改接口,将所述游戏进程中的所述目标游戏对象的所述目标属性的属性值修改为所述目标属性值,以便在对所述目标游戏对象的修改生效时,确定所述游戏应用存在内存数据被篡改的风险。
9.根据权利要求8所述的装置,其特征在于,所述第一函数注入单元,具体为,用于向所述游戏进程中的构造函数的出口处插入所述对象获取函数。
10.根据权利要求8所述的装置,其特征在于,还包括:
对象数据输出单元,用于在所述获取所述对象获取函数捕获到的游戏对象数据之后,将所述游戏对象数据输出到指定界面进行显示;
所述数据修改确定单元,具体为,用于当通过所述指定界面获取到修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值。
11.根据权利要求10所述的装置,其特征在于,所述对象数据输出单元,具体为,用于将所述游戏对象数据发送给指定的浏览器客户端,以在所述浏览器客户端显示出包含所述游戏对象数据的页面;
所述数据修改确定单元,具体为,用于当接收所述浏览器客户端发送的修改指令时,确定所述修改指令所请求修改的目标游戏对象、所述目标游戏对象中待修改的至少一个目标属性以及所述目标属性的目标属性值,所述修改指令为所述浏览器客户端依据所述页面上感应到的针对所述游戏对象数据的修改操作,生成的指令。
12.根据权利要求11所述的装置,其特征在于,所述对象数据输出单元,包括:
数据同步子单元,用于将获取到的所述游戏对象数据发送给监控服务器,以由所述监控服务器通过网页服务器将所述游戏对象数据传输给所述浏览器客户端,实现在所述浏览器客户端同步显示包含所述游戏对象数据的页面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610674255.5A CN106326113B (zh) | 2016-08-16 | 2016-08-16 | 一种游戏数据监控方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610674255.5A CN106326113B (zh) | 2016-08-16 | 2016-08-16 | 一种游戏数据监控方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106326113A CN106326113A (zh) | 2017-01-11 |
CN106326113B true CN106326113B (zh) | 2018-10-23 |
Family
ID=57739498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610674255.5A Active CN106326113B (zh) | 2016-08-16 | 2016-08-16 | 一种游戏数据监控方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106326113B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107154930B (zh) * | 2017-03-31 | 2020-10-16 | 武汉斗鱼网络科技有限公司 | 一种测试漏洞的方法和系统 |
CN107133169B (zh) * | 2017-04-26 | 2021-03-23 | 腾讯科技(深圳)有限公司 | 应用测试包生成方法及生成装置 |
CN107844703B (zh) * | 2017-10-13 | 2021-07-09 | 珠海金山网络游戏科技有限公司 | 一种基于Android平台Unity3D游戏的客户端安全检测方法及装置 |
CN107918586A (zh) * | 2017-10-25 | 2018-04-17 | 珠海金山网络游戏科技有限公司 | 一种基于日志的资源加载效率分析方法和装置 |
CN108182131B (zh) * | 2017-12-13 | 2021-11-26 | 东软集团股份有限公司 | 监控应用运行状态的方法、装置、存储介质及电子设备 |
CN108304304A (zh) * | 2018-01-03 | 2018-07-20 | 珠海金山网络游戏科技有限公司 | 一种统计程序访问文件次数和耗时的方法及装置 |
CN108376101B (zh) * | 2018-01-23 | 2022-06-07 | 珠海金山网络游戏科技有限公司 | 一种Unity3D运行时资源管理方法和装置 |
CN108985014A (zh) * | 2018-06-13 | 2018-12-11 | 珠海金山网络游戏科技有限公司 | 一种导出保护游戏中的Python字节码文件的方法及装置 |
CN108984259B (zh) * | 2018-07-11 | 2020-09-18 | 腾讯科技(深圳)有限公司 | 界面显示方法、装置及终端 |
CN110619096B (zh) * | 2019-06-12 | 2022-08-23 | 北京无限光场科技有限公司 | 用于同步数据的方法和装置 |
CN110334027B (zh) * | 2019-07-04 | 2024-04-12 | 深圳市腾讯网域计算机网络有限公司 | 游戏画面测试方法和装置 |
CN111127223B (zh) * | 2019-11-25 | 2023-07-18 | 泰康保险集团股份有限公司 | 保险产品测试方法、装置和存储介质 |
CN111124822B (zh) * | 2019-12-16 | 2024-01-19 | 网易(杭州)网络有限公司 | 游戏中的信息监测方法、装置及电子设备 |
CN113220355A (zh) * | 2020-01-20 | 2021-08-06 | 精品科技股份有限公司 | 控制台程序的控制管理方法及系统 |
CN111552458B (zh) * | 2020-03-30 | 2023-11-17 | 北京完美赤金科技有限公司 | 一种游戏系统架构的构建方法、实现方法、装置及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9032529B2 (en) * | 2011-11-30 | 2015-05-12 | International Business Machines Corporation | Detecting vulnerabilities in web applications |
CN102868699A (zh) * | 2012-09-26 | 2013-01-09 | 北京联众互动网络股份有限公司 | 一种提供数据交互服务的服务器的漏洞检测方法及工具 |
CN105528546B (zh) * | 2015-12-25 | 2018-09-25 | 北京金山安全软件有限公司 | 一种挖掘漏洞的方法、装置及电子设备 |
-
2016
- 2016-08-16 CN CN201610674255.5A patent/CN106326113B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN106326113A (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106326113B (zh) | 一种游戏数据监控方法和装置 | |
CN106294166B (zh) | 一种游戏数据监控方法和装置 | |
Azim et al. | Targeted and depth-first exploration for systematic testing of android apps | |
Lou | A comparison of Android native app architecture MVC, MVP and MVVM | |
CN111078554B (zh) | 一种小程序调试方法、装置、设备及存储介质 | |
US20200133829A1 (en) | Methods and systems for performance testing | |
CN106557424A (zh) | 内存测试方法、被测终端、测试客户端及系统 | |
CN102347941B (zh) | 一种基于开放平台的安全应用控制方法 | |
Danielsson | React Native application development | |
US20100211934A1 (en) | Apparatus and method for service-enabling computer programs | |
Danielsson | React Native application development: A comparison between native Android and React Native | |
CN103186740A (zh) | 一种Android恶意软件的自动化检测方法 | |
Ridene et al. | A model-driven approach for automating mobile applications testing | |
CN108399124A (zh) | 应用测试方法、装置、计算机设备和存储介质 | |
Hibschman et al. | Telescope: Fine-tuned discovery of interactive web UI feature implementation | |
Arnatovich et al. | Achieving high code coverage in android UI testing via automated widget exercising | |
CN109684571A (zh) | 一种数据采集方法及装置、存储介质 | |
MacLean et al. | Pro Android 5 | |
CN106487793A (zh) | 应用安装方法及装置 | |
Ghaleb et al. | Program comprehension through reverse‐engineered sequence diagrams: A systematic review | |
CN111880804A (zh) | 应用程序代码的处理方法及装置 | |
Chen et al. | Fragdroid: Automated user interface interaction with activity and fragment analysis in android applications | |
Dickinson | Unity 2017 Game Optimization: Optimize All Aspects of Unity Performance | |
Dickinson | Unity 5 Game Optimization | |
Ghaleb | The role of open source software in program analysis for reverse engineering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |