CN106294166B - 一种游戏数据监控方法和装置 - Google Patents
一种游戏数据监控方法和装置 Download PDFInfo
- Publication number
- CN106294166B CN106294166B CN201610674691.2A CN201610674691A CN106294166B CN 106294166 B CN106294166 B CN 106294166B CN 201610674691 A CN201610674691 A CN 201610674691A CN 106294166 B CN106294166 B CN 106294166B
- Authority
- CN
- China
- Prior art keywords
- function
- modification
- data
- game
- address
- 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)
- Stored Programmes (AREA)
Abstract
本申请提供了一种游戏数据监控方法和装置,本申请的方案中在被监控的游戏应用启动时,向游戏应用的游戏进程中注入回调函数和逻辑修改函数,该回调函数用于捕获游戏进程当前运行的至少一个函数的函数数据,该逻辑修改函数用于截获该游戏进程当前运行的函数;通过回调函数获取函数数据;在获取到对获取到的函数数据的修改指令之后,可以将该修改指令发送给注入到游戏进程中的逻辑修改函数,从而在该逻辑修改函数确定出当前截获的函数为修改指令请求修改的目标函数时,依据该修改指令中的修改方式信息对该目标函数进行修改。该方法和装置可以提高游戏应用运行的函数数据的安全性。
Description
技术领域
本申请涉及通信技术领域,特别涉及一种游戏数据监控方法和装置。
背景技术
游戏外挂是指利用软件技术针对一款或多款游戏,通过改变游戏软件的部分程序制作而成的作弊程序。
一种较为常见的作弊程序是通过篡改游戏客户端运行的函数,来实现游戏外挂。如,作弊程序通过修改游戏客户端中函数的参数值或者数据类型,来实现修改游戏客户端中函数的逻辑。可见,如果游戏客户端存在函数修改逻辑的安全漏洞,必然会影响游戏客户端中函数数据的安全性,因此,如何降低游戏中运行的函数数据被篡改的风险,提高游戏中函数数据的安全性是本领域技术人员需要解决的技术问题。
发明内容
本申请提供了一种游戏数据监控方法和装置,以及时发现游戏中存在的函数数据被篡改的安全漏洞,提高游戏应用中函数数据的安全性。
为了解决上述问题,一方面,本申请实施例提供了一种游戏数据监控方法,所述方法包括:
在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入回调函数和逻辑修改函数,所述回调函数用于捕获所述游戏进程当前运行的至少一个函数的函数数据,所述逻辑修改函数用于截获所述游戏进程当前运行的函数;
获取所述回调函数返回的所述函数数据;
获取对所述函数数据的修改指令,所述修改指令用于指示待修改的目标函数以及所述目标函数的修改方式信息;
向所述逻辑修改函数发送所述修改指令,以使得所述逻辑修改函数在确定出当前截获的函数为所述目标函数时,依据所述修改方式信息对所述目标函数进行修改。
另一方面,本申请实施例提供了一种游戏数据监控装置,所述装置包括:
函数注入单元,用于在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入回调函数和逻辑修改函数,所述回调函数用于捕获所述游戏进程当前运行的至少一个函数的函数数据,所述逻辑修改函数用于截获所述游戏进程当前运行的函数;
数据获取单元,用于获取所述回调函数返回的所述函数数据;
指令获取单元,用于获取对所述函数数据的修改指令,所述修改指令用于指示待修改的目标函数以及所述目标函数的修改方式信息;
函数修改单元,用于向所述逻辑修改函数发送所述修改指令,以使得所述逻辑修改函数在确定出当前截获的函数为所述目标函数时,依据所述修改方式信息对所述目标函数进行修改。
由以上可知,本申请实施例中通过向游戏应用的游戏进程中注入回调函数,通过回调函数便可以捕获游戏进程当前运行的函数的函数数据,这样,在获取到对函数数据的修改指令后,可以通过注入到游戏进程中的逻辑修改函数自动截获当前运行的函数是否为该目标函数,并在确定出当前截获的函数为该目标函数时,自动依据该修改指令对目标函数进行修改,实现监控游戏中是否存在运行的函数数据被修改的漏洞,从而可以及时定位出游戏中存在的安全漏洞,进而可以有利于提高游戏中函数数据的安全性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1示出了本申请一种游戏数据监控方法一个实施例的流程示意图;
图2示出了本申请一种游戏数据监控方法又一个实施例的流程示意图;
图3示出了本申请一种游戏数据监控系统一个实施例的组成结构示意图;
图4示出了本申请一种游戏数据监控方法又一个实施例的流程示意图;
图5示出了本申请一种游戏数据监控方法应用于一种应用场景中的流程示意图;
图6a为本申请中监控应用的主界面的一种示意图;
图6b为监控应用输出的用于提示用户绑定浏览器客户端的提示页面的一种示意图;
图6c为web服务器返回的包含有浏览器客户端的二维码标识的页面示意图;
图6d示出了监控应用呈现出游戏列表的界面示意图;
图7a和7b分别指出了浏览器客户端展现游戏对象数据的一种页面示意图;
图8示出了本申请一种游戏数据监控装置一个实施例的组成结构示意图;
图9示出了本申请一种终端一个实施例的硬件架构示意图。
具体实施方式
本发明可能使用的技术名词、简写或缩写如下:
游戏外挂:指利用软件技术针对一个或多个网络游戏,通过改变软件的部分程序制作而成的作弊程序,使用游戏外挂通常得到可以非法获益的效果。
手游:手机游戏,相对于运行在PC机上的游戏而言,主要是指运行在终端及平台上的游戏。
.NET:微软开发的一套跨平台技术。
C#:微软开发的程序设计语言。
unity3d:一套游戏开发工具,是全面整合的专业游戏引擎,目前大部分手游都是unity3d引擎开发的。
mono:一款开源的虚拟机,微软的.NET技术的开源实现,其中,unity3d引擎开发的游戏主要使用c#语言,c#代码就是在mono虚拟机中运行的。
mono Profiler:mono虚拟机内集成了profiler工具,profiler工具可以采集mono虚拟机运行时数据,profiler工具主要用于提供给程序开发人员做性能分析,也可以通过profiler API对profiler进行配置。
hook:钩子,一种计算机技术,在没有源码的情况下,通过汇编的跳转指令实现修改目标函数的执行流程。
API,应用程序编程接口。
UI:user interface,泛指用户操作界面;
JIT:just-in-time,即时编译。
回调函数:通过函数指针调用的函数。如果把函数的指针(或者说地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
本申请实施例的游戏数据监控方法适用于对任意终端上运行的游戏的函数进行监控,以实现监控游戏是否存在函数数据能够被篡改的安全漏洞。如,本申请实施例的游戏数据监控方法适用于对手机上的任意一款手游以及个人计算机上运行的任意一款游戏进行函数数据的安全监控。
本发明实施例描述的业务场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
如图1,其示出了本申请的游戏数据监控方法可以应用于安装有至少一款游戏应用的终端上,且适用于对终端上任意一款游戏应用进行函数数据的监控。
在终端上任意一款需要被监控的游戏应用启动时,终端可以向该游戏应用的游戏进程中注入回调函数和逻辑修改函数,在游戏应用运行函数时,通过回调函数可以捕获游戏进程当前运行的函数的函数数据;同时,逻辑修改函数可以截获游戏进程当前运行的函数,这样,如果获取到对函数数据的修改指令时,可以依据该修改指令所请求修改的目标函数以及对目标函数的修改方式信息,调用该逻辑修改函数,以使得逻辑修改函数在确定出当前截获的函数为该目标函数时,可以依据该修改方式信息修改当前截获的函数。
在本申请实施例中,通过向游戏应用的游戏进程中注入回调函数,并通过回调函数便可以捕获游戏进程当前运行的函数的函数数据,从而及时高效的获取游戏应用中运行的函数数据,且提高了获取游戏应用中函数数据的便捷性。同时,在获取到对函数数据的修改指令后,可以自动调用注入到游戏进程中的逻辑修改函数,并通过该逻辑修改函数自动分析当前截获到的函数是否为目标函数,如果当前截获的函数为目标函数时,便可以自动依据该修改指令对目标函数进行修改,这样,根据游戏应用中对函数数据的修改是否生效,便可以判断游戏应用是否存在无法防御函数数据被修改的安全漏洞,从而可以及时准确的定位出游戏中存在的安全漏洞,进而有利于提高游戏中函数数据的安全性。
另外,在监控游戏应用的是否存在无法防御函数数据被修改的安全漏洞的过程中,避免了用户单独针对不同函数分别手动编写不同的修改代码,降低了监控游戏进程中函数数据的复杂度,从而有利于降低定位游戏应用中安全漏洞的复杂度。
参见图1,其示出了本申请一种游戏数据监控方法一个实施例的流程示意图,本实施例的方法可以包括:
101,在确定游戏应用启动时,向该游戏应用的游戏进程中注入回调函数和逻辑修改函数。
其中,在游戏进程运行函数时,回调函数用于捕获该游戏进程当前运行的函数的函数数据。如,捕获游戏进程当前运行的函数的地址(也可以称为函数的地址或者函数编译后的起始地址);函数所属的类名;函数的名称;函数的参数、参数类型以及参数值;函数的返回值类型以及返回值等等中的一种或多种。
其中,该逻辑修改函数用于截获游戏进程中当前运行的函数,并在需要对当前运行的函数进行修改时,依据终端检测到的的修改指令,对该当前运行的函数进行修改。
可以理解的是,每款游戏应用具有各自对应的内存空间,而终端并不能够直接访问该游戏应用对应的内存空间,自然也就无法从游戏应用对应的内存空间中,获取该游戏进程当前运行的函数的数据。而通过注入技术,将回调函数和逻辑修改逻辑加载到游戏进程对应的内存空间中,这样,在游戏进程运行过程中,游戏应用会运行回调函数和该逻辑修改函数,从而通过回调函数便可以捕获到游戏进程中运行的函数的函数数据,且通过该逻辑修改函数可以截获游戏进程当前运行的函数。
可以理解的是,游戏进程运行函数之前,需要进行函数编译,如果游戏进程存在即时编译事件,便可以从即时编译事件中获取到函数的函数数据。因此,可选的,向游戏进程中注入回调函数可以为:向游戏进程中注册即时编译事件的回调函数。这样,通过该回调函数便可以捕获游戏进程中的即时编译事件,从而获取即时编译事件当前编译的函数的函数数据。
可选的,考虑到一些游戏的程序编程语言在编译后生成的程序文件是保存在动态链接库文件中,如,基于Unity3d引擎开发的游戏,主要编程语言是C#,编译后生成的程序文件(字节码)保存在动态链接库(DLL,Dynamic Link Library)文件中,因此,本申请中该回调函数和逻辑修改函数也可以存储在一个动态链接库文件中,这样可以直接向游戏进程注入该动态链接库文件。
进一步的,游戏应用运行时,首先会将该游戏应用的动态链接库文件加载到内存中,游戏应用的动态链接库文件中的函数实际上是在游戏应用的虚拟机中运行的。而虚拟机中具有采集虚拟机运行的数据的采集工具,通过该采集工具可以采集到虚拟机对函数进行编译的编译事件。因此,在向游戏进程注入该动态链接库文件之后,当游戏进程运行该动态链接库文件时,可以向该虚拟机中该采集工具所提供的应用程序编程接口(API,Application Programming Interface)中注册即时编译事件的回调函数。
例如,以游戏应用的虚拟机为mono虚拟机,通过mono虚拟机从动态链接库文件中读取游戏的C#语言函数的字节码(C#语言编译后生成的中间语言),然后通过即时编译将这部分字节码编译成二进制的可执行程序,以使得C#语言可以被处理器执行。而mono虚拟机中的profiler工具可以采集mono虚拟机运行的数据,因此,在注入动态链接库文件之后,可以向profiler工具的API接口注册C#即时编译事件的回调函数,这样,当通过profiler的API就能动态监控mono虚拟机中函数的编译,从而确定出编译后需要执行的函数的函数数据,并通过该回调函数将profiler工具获取到的函数数据返回给监控应用。
在本申请实施例中,该逻辑修改函数的形式可以有多种,可选的,该逻辑修改函数可以通过钩子hook函数实现。
在本申请实施例中,该注入的实现方式也可以有多种,终端所采用的操作系统不同时,注入技术也会有所差别,如,当终端为windows操作系统时,可以采用远程线程注入技术实现回调函数和逻辑修改函数的注入,当然,对应其他操作系统而言,还可以有其他注入技术,在此不加以限定。
102,获取回调函数返回的函数数据。
103,获取对函数数据的修改指令。
其中,该修改指令用于指示待修改的目标函数以及该目标函数的修改方式信息。需要说明的是,为了便于区分,本申请实施例中将需要修改的函数称为目标函数。
如,该修改指令中可以包含有待修改的目标函数的相关信息,如,目标函数的地址、函数的名称等等。
对目标函数的修改方式可以有多种,而考虑到通过对游戏的函数进行修改而实现游戏外挂大部分是通过对函数的参数值、返回值进行修改,因此,对目标函数的修改方式信息可以包括:将函数的参数值设置为固定值、或者是将函数的参数值进行翻倍、缩小函数的参数值指定倍数、修改参数值的数据类型以及设定跳过某条函数(如,不执行该函数而直接返回)等等修改方式中的一种或多种修改方式。
104,向逻辑修改函数发送该修改指令,以使得逻辑修改函数在确定出当前截获的函数为该目标函数时,依据该修改方式信息对该目标函数进行修改。
举例说明,如修改方式信息中包含的修改方式为将目标函数的某个值增加5倍,则逻辑修改函数会将该目标函数的该参数值修改当前参数值的5倍,假如,该参数值原来的数字为20,那么修改后该参数值为100。
在一种实现方式中,为了能够通过逻辑修改函数确定截获到的函数具体为哪条函数,修改指令中可以携带该待修改的目标函数的地址,这样,逻辑修改函数可以在截获到游戏进程当前运行的函数时,获取当前截获的函数的地址,如果逻辑修改函数确定出当前截获到的函数的地址与该目标函数的地址相同时,则确定当前截获到的函数为需要进行修改的目标函数。
进一步的,考虑到终端中一般会具有存储函数地址的寄存器,如,移动终端等终端中目前都是基于进阶精简指令集机器(ARM,Acorn RISC Machine)结构的处理器中,可以具有通过动态调试游戏客户端分析ARM汇编指令以及ARM处理器的寄存器。具体的,该寄存器可以包括:过程调用寄存器(也称为IP寄存器)和返回地址寄存器(LR寄存器)。其中,过程调用寄存器在函数执行过程中,当遇到子函数调用时,用于保存子函数的起始地址;而返回地址寄存器在函数执行过程中,当遇到子函数调用时,用于保存子函数执行完成返回后的下一条指令地址。这样,通过该逻辑修改函数可以查询游戏进程中的过程调用寄存器和/或返回地址寄存器中存储的地址,且如果查询到的地址与该目标函数的地址相同,则可以确认当前截获的函数的地址与该目标函数的地址相同。
当然,在实际应用中,还可以有其他方式来确定游戏进程当前执行的函数具体为哪条函数,而通过其他方式来确定游戏进程当前执行的函数是否为需要修改的函数也同样适用于本申请实施例,在此不加以限制。
可选的,为了便于用户对该函数数据进行修改,在获取到函数数据之后,该终端还可以将函数数据输出到指定界面进行显示,这样,用户可以直接在该指定界面中对该函数数据进行修改操作,以提高数据修改的便捷性。
相应的,用户在该指定界面上的修改操作可以触发终端通过该指定界面获取针对该函数数据的修改指令。
其中,该指定界面中可以显示出该函数数据中包含的函数名称、每个函数名称关联有该函数名称对应的函数的参数、返回值、函数地址等等信息,用户可以选择所需的修改的目标函数,并对该目标函数关联的参数、返回值等进行修改。这样,基于用户在该指定界面上的修改操作,可以获取到包含待修改的目标函数的函数名或地址,以及对函数中参数、返回值等的修改方式信息。
进一步的,为了便于用户进行操作,在该指定界面可以第一用户界面的形式先显示出获取到的函数数据中包含的函数名称,如,在第一用户界面中显示出包含多个函数名称的列表,用户在该第一用户界面中选择或者搜索所需修改的目标函数的函数名称。
在通过指定界面的第一用户界面检测到用于选择待修改的目标函数的选择指令之后,可以通过指定界面将函数数据中该目标函数的参数以及返回值呈现在第二用户界面中,如,该选择指令用于选择该目标函数的函数名。其中,该第二用户界面中包含参数以及返回值对应的至少一个操作控件,不同的操作控件用于触发不同的修改方式。
如,在第二用户界面中每一个参数或返回值可以关联有一个设置值输入框,在该设定值输入框内可以输入需要设定的该参数的参数值或者需要设定返回值的具体数值。又如,对参数或返回值的修改还可以是设定为增大倍数、缩小倍数等,那么在该第二用户界面中可以设定选择控件,以供用户选择需要设定的修改方式;对于函数,还可以设定跳过某个函数的执行、默认函数的返回值或参数值等选择控件。
可以理解的是,该指定界面可以有多种情况,该指定界面可以是监控应用显示出的一个窗口界面,也可以是监控应用之外的其他应用所输出的用户交互窗口或页面。当在指定界面不同时,监控应用将函数数据输出到该指定界面以及通过该指定界面获取修改指令的过程也会有所差异。
下面以指定界面的几种可能情况为例,对本申请实施例的游戏数据监控方法进行介绍。
在一种可能的情况中,该指定界面可以是终端本地的一个窗口界面,该窗口界面可以理解为能够实现人机交互的操作界面击。如,参见图2,其示出了本申请一种游戏测试方法又一个实施例的流程示意图,为了便于描述,以终端上运行有监控应用,终端基于该监控应用监控游戏应用为例进行介绍,本实施例的方法可以包括:
201,监控应用向被测试的游戏应用发送启动命令。
202,游戏应用响应启动命令,启动游戏进程。
其中,该步骤201和202为可选步骤。
在实际应用中,也可以由用户手动启动该游戏应用,监控应用可以监测游戏应用是否启动。
203,当检测到游戏应用启动时,监控应用向游戏应用的游戏进程中注入动态链接库文件。
其中,该动态链接库文件包括回调函数以及逻辑修改函数。
可选的,该回调函数可以为用于捕获即时编译事件当前编译的函数的函数数据的回调函数
需要说明的是,将回调函数以及逻辑修改函数包含在动态链接库文件中,并向游戏进程中注入该动态链接库文件仅仅是一种优选的实施方式,在实际应用中也可以单独注入回调函数以及该逻辑修改函数。
204,游戏进程运行该动态链接库文件,向游戏进程中虚拟机的采集工具所提供API接口注册该即时编译事件的回调函数。
其中,注册可以理解为把回调函数的函数指针丢给要调用该回调函数的地方。该采集工具用于采集虚拟机运行的数据。考虑到目前大部分游戏中的动态链接库文件都需要在游戏进程的虚拟机中进行编译生成二进制程序,然后执行编译出的二进制程序,因此向采集工具所提供的接口注册即时编译事件回调函数之后,可以在采集工具监测到编译事件时,通过回调函数将编译的函数的函数数据返回给监控应用。
如,基于Unity3d引擎开发的游戏,游戏进程依赖于mono虚拟机进行函数编译时,则该采集工具可以为mono虚拟机中的Profiler工具。
可以理解的是,步骤203和204是以注入回调函数的一种优选实施为例进行介绍,但是可以理解的是,通过其他方式向游戏进程中注入该回调函数也同样适用于本实施例。
205,游戏进程的采集工具监测虚拟机的即时编译事件。
206,当游戏进程的采集工具监测到即时编译事件时,调用该回调函数将即时编译事件编译的函数的函数数据返回给监控应用。
207,游戏进程运行逻辑修改函数捕获游戏进程中编译后待执行的函数。
208,监控应用存储回调函数返回的函数数据。
其中,该步骤208可以为可选步骤,在实际应用中也可以在获取到函数数据之后实时输出到窗口界面中进行显示。
可以理解的是,随着游戏进程的运行,回调函数会不断向监控应用返回不同函数的函数数据,在该种情况下,监控应用可以对函数数据进行存储,以便基于回调函数返回的函数数据不断更新获取到的函数数据;同时,也有利于向窗口界面中输出最新的函数数据。
可选的,监控应用可以依据游戏进程中运行函数的先后顺序,存储不同时刻获取到的函数数据,以便后续按照函数的执行的先后顺序在窗口界面中显示函数数据。
其中,207和208的顺序并不限于图2所示,也可以是同时执行该步骤207和208;或者是,先执行该步骤208,再执行该步骤207。
209,当需要显示函数数据时,监控应用将函数数据输出到该监控应用的窗口界面中。
监控应用将函数数据输出到该监控应用的窗口界面中,这样,用户可以在该窗口界面中查看到该游戏进程的内存当前运行了哪些函数以及这些函数的具体信息。
210,当用户在窗口界面输入对函数数据的修改操作时,生成对该函数数据的修改指令。
其中,该修改指令用于指示待修改的目标函数以及对该目标函数的修改方式信息。
可选的,该修改指令可以包括:待修改的目标函数的地址以及对目标函数的修改方式信息。
如,在该窗口界面中可以显示出用户需要修改的函数的名称、以及函数的参数和返回值等信息,用户可以在该窗口界面中对函数的参数、返回值等进行修改或者设定编辑修改策略,如,修改策略可以为跳过不执行该目标函数;将函数某个参数的参数值放大指定倍数,其中,该指定倍数可以由用户输入,而跳过函数、放大参数值等都属于修改策略。然后,用户可以通过指定按键触发起修改请求,监控应用检测到该修改请求之后,可以确定需要修改的函数的函数名称以及对函数、函数的参数和/或返回的修改方式,并查询该函数名称所对应的函数的地址,生成包含该函数的地址,以及该修改方式信息的修改指令。
可选的,为了进一步提高测试的便捷性,监控应用可以先向该窗口界面中输出当前获取到的函数名称的列表,用户可以根据需要在窗口界面中输出的列表中进行搜索或者选择,以确定需要测试的目标函数。监控应用确定出用户需要修改的目标函数之后,再向窗口界面中输出该目标函数所对应的各个参数、返回值等等信息,这样,用户可以根据需要参数、返回值等进行编辑修改或者设定修改策略等等。
211,监控应用向注入到游戏进程中的逻辑修改函数发送修改指令,以通过逻辑修改函数获取当前截获的函数的地址,并在通过逻辑修改函数确定出当前截获的函数的地址与该目标函数的地址相同时,依据该修改方式信息对当前截获的函数进行修改。
该步骤211是以修改指令中包含有该待修改的目标函数的地址为例进行介绍。
当然,对于修改指令通过其他方式指示出待修改的目标函数的情况,逻辑修改函数依据该修改指令对该目标函数进行修改的方式也同样适用于本申请,具体可以参见前面实施例的相关介绍,在此不再赘述。
在另一种可能的实现方式中,监控应用可以将获取到的函数数据输出到其他应用的界面中进行显示,如,监控应用可以将当前获取到的函数数据发送给监控服务器,以由所述监控服务器通过网页服务器将所述函数数据传输给所述浏览器客户端,实现在浏览器客户端同步显示包含所述函数数据的页。在该种情况下,游戏数据监控系统除了包含运行有监控应用和至少一款游戏应用的终端之外,还可以包括监控服务器、浏览器客户端以及网页服务器。如,参见图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,当检测到游戏应用启动时,监控应用向游戏应用的游戏进程中注入回调函数以及逻辑修改函数。
可选的,可以在动态链接库文件中包括该回调函数以及逻辑修改函数,这样,可以直接将该动态链接库文件注入到该游戏进程中,从而使得游戏进程运行该动态链接库文件,并注册用于获取游戏进程当前运行的函数的函数数据的回调函数,同时,运行逻辑修改函数截获游戏进程当前运行的函数。
当然,该步骤406的具体实现过程可以参见前面任意一个实施例的相关介绍,在此不再赘述。
407,游戏进程运行游戏所需的函数,并通过回调函数获取当前运行的函数的函数数据;
408,监控应用获取游戏进程中回调函数返回的函数数据。
其中,该函数数据可以包括:函数的名称、地址、参数以及返回值等等信息。
409,监控应用将获取到的函数数据发送给监控服务器,以在监控服务器中缓存监控应用获取到的函数数据。
如,监控服务器可以将监控应用发送的函数数据缓存到缓存队列中。
当然,监控服务器也可以将函数数据固定存储到该监控服务器的指定存储区域,或者是存储到指定的数据库中。
监控服务器存储该函数数据的形式也可以有多种,如可以以列表的形式存储不同时刻获取到的函数数据,当然也可以采用其他存储形式来存储获取到的函数数据。
410,网页服务器向监控服务器请求该监控应用获取到的函数数据。
其中,网页服务器可以实时或者按照预设的周期定期向监控应用请求函数数据。当然,也可以是网页服务器也可以是在接收到用户通过浏览器客户端发送的函数数据获取请求时,再向监控应用请求函数数据。
可以理解的是,在实际应用中,也可以是监控服务器定期或者不定期向网页服务器发送监控应用捕获到的函数数据。
411,监控服务器将当前缓存的函数数据发送给网页服务器。
412,网页服务器依据获取到的函数数据,生成包含有函数名称列表的网页。
413,网页服务器向浏览器客户端返回包含有函数名称列表的网页数据,以在浏览器客户端上呈现出函数名称列表。
414,当浏览器客户端检测到用户从函数名称列表中选择目标函数的函数名称时,浏览器客户端向网页服务器请求该目标函数的函数数据。
可选的,包含有函数名称列表的网页中还可以提供搜索栏,以供用户直接在搜索栏中输入所需搜索的函数名称,以提高用户定位所需修改的目标函数的函数名称的便捷性。
当然,用户也可以通过网页中的下拉条来调整函数名称列表中呈现在显示界面中的部分,以便选择出所需的目标函数的名称。
415,网页服务器生成包含有该目标函数的函数数据的网页,并将该网页发送给浏览器客户端,以在浏览器客户端呈现出包含有该目标函数相关数据的网页。
其中,网页服务器为浏览器客户端返回的该目标函数的函数数据可以包含该目标函数的所有数据,如,目标函数的函数名称、函数地址、参数、返回值等等;也可以仅包含该目标函数中能够被修改的部分数据,如,可以仅仅包含该目标函数的参数、返回值等等信息。
与图3实施例相似,在本实施例中,包含函数数据的网页中可以提供用户输入或选择修改方式的控件,如,对于函数可以提供用于“跳过”选项,用户可以选中该“跳过”选项,以触发跳过不执行该条函数;对于函数中的函数可以有“放大”、“缩小”以及“等于”多个修改方式选项,用户可以根据需要选择某个选项。另外,包含函数数据的网页中还可以包含有数值输入框,例如,对于每个参数以及返回值均对应着一个数值输入框,根据用户选择的修改方式不同,该数值输入框内输入的数值可以表征放大倍数、缩小倍数或设定的数值等等。
需要说明的是,本实施例的步骤412至415仅仅是一种优选的实施方式,在实际应用中,网页服务器也可以直接将获取到的所有函数数据均发送给客户端浏览器,由客户端浏览器在确定出用户选择的目标函数之后,直接显示出该目标函数的函数数据。当然,还可以有其他方式,在此不加以限定。
416,当用户在包含有目标函数相关数据的网页中对目标函数的相关数据进行修改时,客户端浏览器生成修改指令。
其中,该修改指令用于指示待修改的目标函数以及对该目标函数的修改方式。
可选的,在浏览器客户端获取到目标数据的相关数据中包含该目标数据的地址时,可以依据生成包含该目标数据的地址以及目标函数修改方式信息的修改指令。
可以理解的是,图4是以浏览器客户端依据用户在网页中的修改操作,直接生成修改指令为例进行介绍。然而,在实际应用中,浏览器客户端也可以仅仅只确定出用户请求修改的目标函数的名称以及对目标函数的修改方式信息,并将目标函数的名称以及目标函数的修改方式信息发送给网页服务器,然后由网页服务器生成修改指令。如,网页服务器依据待修改的函数的名称,获取该目标函数的地址,并生成携带有该目标函数的地址以及目标函数的修改方式信息的修改指令。
当然,浏览器客户端也可以仅仅将修改的目标函数的名称以及对目标函数的修改方式信息发送给网页服务器,并由网页服务器发送给监控服务器或者监控应用,以便由监控服务器或者监控应用依据目标函数的名称以及修改方式信息,生成修改指令。
417,客户端浏览器将该修改指令发送给网页服务器。
418,网页服务器将该修改指令经监控服务器传输给监控应用。
419,监控应用向注入游戏进程中的逻辑修改函数发送该修改指令。
420,游戏应用的逻辑修改函数截获该游戏进程中当前运行的函数。
需要说明的是,在向游戏进程中注入了该逻辑修改函数之后,该逻辑修改函数会监控游戏进程的运行,并截获游戏进程中运行的每个函数。因此,该步骤420与其他步骤的顺序并不限于图4所示,在向游戏进程注入了该逻辑修改函数之后,该步骤420可以在整个游戏数据监控流程中会持续执行。
421,游戏进程中该逻辑修改函数接收到该修改指令之后,检测当前截获的函数是否为该目标函数,如果是该目标函数,则依据该目标函数的修改方式信息对该目标函数进行修改。
当然,如果逻辑修改函数检测到当前截获的函数不是监控应用下发的修改指令所指示的需要修改的函数,则可以不对该函数进行修改,则在执行该函数之后直接进行相应的跳转。
可选的,在修改指令包含目标地址信息。相应的,游戏进程中的逻辑修改函数可以查询游戏进程中用于存储地址的寄存器中所存储的地址,且如果查询到的地址与该目标函数的地址相同,则可以确认当前截获的函数的地址与该目标函数的地址相同。
当然,该步骤421的具体实现过程可以参见前面任意一个实施例的相关介绍,在此不再赘述。
需要说明的是,本申请实施例是以终端上的监控应用对终端上的一款游戏应用的函数数据进行监控为例进行介绍,但是可以理解的是,该监控应用可以对终端上的多款游戏应用进行监控,对于任意一款游戏应用进行监控的过程均可以参见图4实施例的相关介绍,在此不再赘述。
为了便于理解,结合一种具体的应用场景对本申请实施例的游戏数据监控方法进行介绍,以被测试的游戏为基于Unity3d引擎开发的手游,网页服务器为web服务器为例进行介绍。参见图5,其示出了本申请一种游戏数据监控方法又一个实施例的流程交互示意图。本实施例的方法可以包括:
501,用户在终端上启动监控应用,在监控应用上展现出可供选择的多个测试选项。
如,以监控应用为安全雷达为例,则该安全雷达启动后会显示出可供用户选择的监控选项,具体可以参见图6a。在本申请实施例中,需要测试游戏应用是否存在通过修改函数的函数实现游戏外挂的安全漏洞,因此,需要进行函数修改测试,如图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,用户在监控应用选择该手机中需要测试的目标手游时,监控应用启动该手机上的该目标手游。
如,浏览器客户端可以获取该手机中安装的手游,并以列表的形式出来,如图6d所示的界面下方显示有多款手游游戏,测试可以选择其中一款手游,如用户可以选择“穿越火线”这一款游戏,则监控应用会建立与该款游戏应用的连接,向该款游戏应用发送启动指令。
510,监控应用在手游启动时,向游戏进程中注入动态链接库文件。
其中,该动态链接库文件包括C#语言即时编译事件的回调函数;以及hook函数。
游戏进程注入该动态链接库文件之后,手游程序的动态链接库文件以及注入的该动态链接库文件均被加载到手游对应的内存中,这样,手游可以运行注入的动态链接库文件。
其中,插入的该回调函数可以设置将即时编译事件编译的函数信息返回监控应用。
特别的,当手机的操作系统为安卓操作系统时,可以向mono虚拟机中插入so格式的动态链接库文件。
511,手游运行该动态链接库文件,向mono虚拟机的profiler工具提供的API接口注册即时编译事件的回调函数。
其中,该hook函数可以在mono虚拟机中profiler工具监控到即时编译事件时,截获mono虚拟机编译后需要运行的函数。
512,当手游的mono虚拟机的profiler工具监控到mono虚拟机存在C#语言的即时编译事件时,通过该回调函数将即时编译事件所编译的函数的函数数据返回给监控应用。
其中,该函数数据可以包括函数编译的起始地址、函数的名称、函数所包含的参数、函数返回值等等信息。
513,游戏进程中该hook函数截获mono虚拟机编译后需要执行的函数。
514,监控应用将获取到的函数数据发送给监控服务器。
515,监控服务器存储该函数数据。
516,web服务器向监控服务器请求该监控应用获取到的函数数据。
517,监控服务器将存储的函数数据发送给web服务器。
518,web服务器获取函数数据中的函数名称,并将函数名称列表以web网页的形式发送给与该监控应用绑定的浏览器客户端。
其中,该函数名称列表包括有多个函数的函数名。
519,浏览器客户端展现出包含有函数名称列表的web页面。
如图7a,其示出了包含有函数名称列表的web页面的示意图。在该图7a显示的web页面中,显示有包含多个函数名称的函数名称列表,用户在搜索栏中输入需要搜索的函数名称,或者是通过滑动右侧的滑动条,使得当前页面中显示出不同函数的函数名称。
520,当浏览器客户端检测到用户选择web页面中目标函数的函数名称,向web服务器请求该目标函数的函数数据。
521,web服务器为该浏览器客户端返回用于修改该目标函数的函数数据的web页面。
522,根据用户在该web页面中的修改操作,浏览器客户端向web服务器发送修改请求,该修改请求携带有需要修改的目标函数的名称、对目标函数的修改方式信息。
如图7b,在该web页面中显示有用户选择出的目标函数所包含的所有参数,如最左侧一列为参数的名称,具体可以包括“ENGUI.ETipstype”、“int”和“返回值”。
同时,在图7b的web页面中呈现出了可供用户选择的函数或者参数修改方式,如,可以设定函数的参数值或者返回值的类型,如可以为默认的数据类型,也可以选择其他数据类型。同时,用户还可以选择对参数或返回值的修改方式,例如,将参数值为等于某个数值时,可以直接该参数对应的输入框内输入相应的数值,并选择“等于”;如果希望还原为该参数原始的数值时,则可以直接选择“还原”;如果用户选择“乘以”,并在该参数对应的输入框内输入相应的数值,则说明需要将该参数的参数值增大输入框内输入的数值对应的指定倍数。另外,如果用户选择“跳过”则可以触发跳过不执行该目标函数。
523,web服务器依据该修改请求,获取该目标函数的函数地址,并生成修改指令,该修改指令包含有目标函数的函数地址、目标函数的修改方式信息。
其中,修改方式可以参见图7b所示的修改方式中的一种或多种。
524,web服务器经监控服务器将该修改指令发送给监控应用。
525,监控应用响应该修改指令,向手游的hook函数传输该目标函数的地址以及修改方式信息。
526,手游中该hook函数查询IP寄存器中存储的当前函数的起始地址,并查询LR寄存器中查询当前函数执行完成后需要返回的指令地址。
527,如果手游中的该hook函数确定该IP寄存器或LR寄存器中当前存储的地址与该目标函数的地址一致,则依据该目标函数中需要修改的目标参数以及该目标参数的修改方式,对mono虚拟机当前运行的函数进行修改。
当然,在该步骤527之后,用户可以根据手游的执行结果,检测对手游的修改是否生效,如果对手游中函数数据修改生效,则说明手游中存在可以通过修改该函数的函数数据实现游戏外挂的安全漏洞,从而实现检测出手游中存在安全漏洞。
为了便于理解本发明的好处,将本发明与现有的一种游戏数据监控过程进行对比,在现有的一种数据监控过程中,用户在确定出需要监控的函数(即需要修改的函数)后,需要针对每一个被监控的函数单独编写与其对应的hook函数,这样,函数被执行后才能实现正确的函数跳转。而导致用户需要单独针对每款被监控的函数编写hook函数的原因,就是由于hook函数无法确定当前执行的是哪个函数,同时,被监控的函数的参数个数不同,对于不同的参数个数,hook函数执行时堆栈平衡需要做不同的处理,并且没有办法自动判断函数有多少个参数以及是否隐含有this指针。
而本申请中监控应用通过回调函数可以获取到每个函数所包含的参数、返回值以及具体的个数和类型,并在用户选择需要修改的函数以及函数中的参数或者返回值之后,从而可以将参数、返回值等信息返回给预先注入到手游等游戏的游戏进程中的逻辑修改函数(如hook函数)。而且逻辑修改函数可以自动确定当前运行的函数是哪个函数,从而在函数执行完成后进行正确的跳转。如,以手游为例,hook函数可以基于IP寄存器和LR寄存器中存储的地址来判断当前被hook的是哪个函数,从而当hook函数执行完成后做到正确的函数跳转。
下面对本发明实施例提供的一种游戏数据监控装置进行介绍,下文描述的一种游戏数据监控装置可与上文描述的一种游戏数据监控方法相互对应参照。
参见图8,其示出了本申请一种游戏数据监控装置一个实施例的组成结构示意图,本实施例的测试装置可以包括:
函数注入单元801,用于在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入回调函数和逻辑修改函数,所述回调函数用于捕获所述游戏进程当前运行的至少一个函数的函数数据,所述逻辑修改函数用于截获所述游戏进程当前运行的函数;
数据获取单元802,用于获取所述回调函数返回的所述函数数据;
指令获取单元803,用于获取对所述函数数据的修改指令,所述修改指令用于指示待修改的目标函数以及所述目标函数的修改方式信息;
函数修改单元804,用于向所述逻辑修改函数发送所述修改指令,以使得所述逻辑修改函数在确定出当前截获的函数为所述目标函数时,依据所述修改方式信息对所述目标函数进行修改。
可选的,所述函数注入单元具体为,用于在被测试的游戏应用启动时,向所述游戏应用的游戏进程中注入即时编译事件的回调函数和逻辑修改函数,所述回调函数用于捕获游戏进程中的即时编译事件,获取所述即时编译事件编译的函数的函数数据。
可选的,所述数据获取单元获取到的所述函数数据至少包括:所述函数的地址;
所述指令获取单元获取到的所述修改指令携带有:待修改的目标函数的地址以所述目标函数的修改方式信息;
所述函数修改单元,具体为,用于向所述逻辑修改函数发送所述修改指令,以通过所述逻辑修改函数获取当前截获的函数的地址,并在通过所述逻辑修改函数确定出所述当前截获的函数的地址与所述目标函数的地址相同时,依据所述修改方式信息对所述当前截获的函数进行修改。
可选的,所述装置还包括:数据输出单元,用于在所述指令获取单元获取对所述函数数据的修改指令之前,将当前获取到的所述函数数据输出到指定界面进行显示;
相应的,所述指令获取单元,具体为,用于通过所述指定界面获取对所述函数数据的修改指令。
可选的,所述数据输出单元,包括:
第一输出子单元,用于通过所述指定界面将所述函数数据中的函数名称呈现在第一用户界面中;
第二输出子单元,用于当在所述第一用户界面检测到用于选择待修改的目标函数的修改指令时,通过所述指定界面将所述函数数据中所述目标函数的参数以及返回值呈现在第二用户界面中,其中,所述第二用户界面中包含所述参数以及返回值对应的至少一个操作控件,不同的操作控件用于触发不同的修改方式。
可选的,所述指定界面为通过指定的浏览器客户端展现出的页面;
所述指令获取单元,包括:
指令接收子单元,用于接收所述浏览器客户端经网页服务器返回的修改指令,所述浏览器客户端响应于所述页面上针对所述函数数据的修改操作,生成包含待修改的所述目标函数以及所述目标函数的修改方式信息的所述修改指令。
可选的,所述数据输出单元,具体用于:将当前获取到的所述函数数据发送给监控服务器,以由所述监控服务器通过网页服务器将所述函数数据传输给所述浏览器客户端,实现在所述浏览器客户端同步显示包含所述函数数据的页面。
本发明实施例还提供了一种终端,该终端可以包括上述所述的一种游戏数据监控方法。
图9示出了终端的硬件结构框图,参照图9,终端900可以包括:处理器901,通信接口902,存储器903和通信总线904;
其中处理器901、通信接口902、存储器903通过通信总线904完成相互间的通信;
可选的,通信接口902可以为通信模块的接口,如GSM模块的接口;
处理器901,用于执行程序;
存储器903,用于存放程序;
程序可以包括程序代码,所述程序代码包括计算机操作指令。
处理器901可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器903可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
其中,程序可具体用于:
在被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入回调函数和逻辑修改函数,所述回调函数用于捕获所述游戏进程当前运行的至少一个函数的函数数据,所述逻辑修改函数用于截获所述游戏进程当前运行的函数;
获取所述回调函数返回的所述函数数据;
获取对所述函数数据的修改指令,所述修改指令用于指示待修改的目标函数以及所述目标函数的修改方式信息;
向所述逻辑修改函数发送所述修改指令,以使得所述逻辑修改函数在确定出当前截获的函数为所述目标函数时,依据所述修改方式信息对所述目标函数进行修改。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (15)
1.一种游戏数据监控方法,其特征在于,应用于终端,所述方法包括:
在所述终端中被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入回调函数和逻辑修改函数,所述回调函数用于捕获所述游戏进程当前运行的至少一个函数的函数数据,所述逻辑修改函数用于截获所述游戏进程当前运行的函数;
获取所述回调函数返回的所述函数数据;
获取对所述函数数据的修改指令,所述修改指令用于指示待修改的目标函数以及所述目标函数的修改方式信息;
向所述逻辑修改函数发送所述修改指令,以使得所述逻辑修改函数在确定出当前截获的函数为所述目标函数时,依据所述修改方式信息对所述目标函数进行修改。
2.根据权利要求1所述的方法,其特征在于,所述向所述游戏应用的游戏进程中注入回调函数,包括:
向所述游戏应用的游戏进程中注入即时编译事件的回调函数,所述回调函数用于捕获游戏进程中的即时编译事件,获取所述即时编译事件编译的函数的函数数据。
3.根据权利要求1所述的方法,其特征在于,所述函数数据至少包括:所述游戏进程当前运行的至少一个函数的地址;
所述修改指令携带有:待修改的目标函数的地址以所述目标函数的修改方式信息;
所述向所述逻辑修改函数发送所述修改指令,以使得所述逻辑修改函数在确定出当前截获的函数为所述目标函数时,依据所述修改方式信息对所述目标函数进行修改,包括:
向所述逻辑修改函数发送所述修改指令,以通过所述逻辑修改函数获取当前截获的函数的地址,并在通过所述逻辑修改函数确定出所述当前截获的函数的地址与所述目标函数的地址相同时,依据所述修改方式信息对所述当前截获的函数进行修改。
4.根据权利要求3所述的方法,其特征在于,所述通过所述逻辑修改函数确定出所述当前截获的函数的地址与所述目标函数的地址相同,包括:
通过所述逻辑修改函数查询所述游戏进程中的过程调用寄存器和/或返回地址寄存器中存储的地址,且如果查询到的地址与所述目标函数的地址相同,则确认当前截获的函数的地址与所述目标函数的地址相同。
5.根据权利要求1所述的方法,其特征在于,在所述获取对所述函数数据的修改指令之前,还包括:
将当前获取到的所述函数数据输出到指定界面进行显示;
所述获取对所述函数数据的修改指令,包括:
通过所述指定界面获取对所述函数数据的修改指令。
6.根据权利要求5所述的方法,其特征在于,所述将当前获取到的所述函数数据输出到指定界面进行显示,包括:
通过所述指定界面将所述函数数据中的函数名称呈现在第一用户界面中;
当在所述第一用户界面检测到用于选择待修改的目标函数的选择指令时,通过所述指定界面将所述函数数据中所述目标函数的参数以及返回值呈现在第二用户界面中,其中,所述第二用户界面中包含所述参数以及返回值对应的至少一个操作控件,不同的操作控件用于触发不同的修改方式。
7.根据权利要求5或6所述的方法,其特征在于,所述指定界面为通过指定的浏览器客户端展现出的页面;
所述通过所述指定界面获取对所述函数数据的修改指令,包括:
接收所述浏览器客户端经网页服务器返回的修改指令,所述浏览器客户端响应于所述页面上针对所述函数数据的修改操作,生成包含所述目标函数以及所述目标函数的修改方式信息的所述修改指令。
8.根据权利要求7所述的方法,其特征在于,所述将当前获取到的所述函数数据输出到指定界面进行显示,包括:
将当前获取到的所述函数数据发送给监控服务器,以由所述监控服务器通过网页服务器将所述函数数据传输给所述浏览器客户端,实现在所述浏览器客户端同步显示包含所述函数数据的页面。
9.一种游戏数据监控装置,其特征在于,应用于终端,所述装置包括:
函数注入单元,用于在所述终端中被监控的游戏应用启动时,向所述游戏应用的游戏进程中注入回调函数和逻辑修改函数,所述回调函数用于捕获所述游戏进程当前运行的至少一个函数的函数数据,所述逻辑修改函数用于截获所述游戏进程当前运行的函数;
数据获取单元,用于获取所述回调函数返回的所述函数数据;
指令获取单元,用于获取对所述函数数据的修改指令,所述修改指令用于指示待修改的目标函数以及所述目标函数的修改方式信息;
函数修改单元,用于向所述逻辑修改函数发送所述修改指令,以使得所述逻辑修改函数在确定出当前截获的函数为所述目标函数时,依据所述修改方式信息对所述目标函数进行修改。
10.根据权利要求9所述的装置,其特征在于,所述函数注入单元具体为,用于在被测试的游戏应用启动时,向所述游戏应用的游戏进程中注入即时编译事件的回调函数和逻辑修改函数,所述回调函数用于捕获游戏进程中的即时编译事件,获取所述即时编译事件编译的函数的函数数据。
11.根据权利要求9所述的装置,其特征在于,所述数据获取单元获取到的所述函数数据至少包括:所述游戏进程当前运行的至少一个函数的地址;
所述指令获取单元获取到的所述修改指令携带有:待修改的目标函数的地址以所述目标函数的修改方式信息;
所述函数修改单元,具体为,用于向所述逻辑修改函数发送所述修改指令,以通过所述逻辑修改函数获取当前截获的函数的地址,并在通过所述逻辑修改函数确定出所述当前截获的函数的地址与所述目标函数的地址相同时,依据所述修改方式信息对所述当前截获的函数进行修改。
12.根据权利要求9所述的装置,其特征在于,还包括:
数据输出单元,用于在所述指令获取单元获取对所述函数数据的修改指令之前,将当前获取到的所述函数数据输出到指定界面进行显示;
则所述指令获取单元,具体为,用于通过所述指定界面获取对所述函数数据的修改指令。
13.根据权利要求12所述的装置,其特征在于,所述数据输出单元,包括:
第一输出子单元,用于通过所述指定界面将所述函数数据中的函数名称呈现在第一用户界面中;
第二输出子单元,用于当在所述第一用户界面检测到用于选择待修改的目标函数的修改指令时,通过所述指定界面将所述函数数据中所述目标函数的参数以及返回值呈现在第二用户界面中,其中,所述第二用户界面中包含所述参数以及返回值对应的至少一个操作控件,不同的操作控件用于触发不同的修改方式。
14.根据权利要求12或13所述的装置,其特征在于,所述指定界面为通过指定的浏览器客户端展现出的页面;
所述指令获取单元,包括:
指令接收子单元,用于接收所述浏览器客户端经网页服务器返回的修改指令,所述浏览器客户端响应于所述页面上针对所述函数数据的修改操作,生成包含所述目标函数以及所述目标函数的修改方式信息的所述修改指令。
15.根据权利要求14所述的装置,其特征在于,所述数据输出单元,具体用于:将当前获取到的所述函数数据发送给监控服务器,以由所述监控服务器通过网页服务器将所述函数数据传输给所述浏览器客户端,实现在所述浏览器客户端同步显示包含所述函数数据的页面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610674691.2A CN106294166B (zh) | 2016-08-16 | 2016-08-16 | 一种游戏数据监控方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610674691.2A CN106294166B (zh) | 2016-08-16 | 2016-08-16 | 一种游戏数据监控方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106294166A CN106294166A (zh) | 2017-01-04 |
CN106294166B true CN106294166B (zh) | 2018-07-06 |
Family
ID=57678880
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610674691.2A Active CN106294166B (zh) | 2016-08-16 | 2016-08-16 | 一种游戏数据监控方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106294166B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108287781B (zh) * | 2017-01-10 | 2022-08-26 | 腾讯科技(深圳)有限公司 | 一种内存占用监控方法及装置、系统 |
CN106897076B (zh) * | 2017-03-24 | 2021-03-02 | 长沙趣动文化科技有限公司 | 游戏服务提供及运行方法、装置 |
CN107391219B (zh) * | 2017-07-07 | 2018-09-18 | 腾讯科技(深圳)有限公司 | 函数编译方法和装置 |
CN109471767A (zh) * | 2017-09-08 | 2019-03-15 | 福建省天奕网络科技有限公司 | 一种hook虚拟机中的函数的方法及终端 |
CN108255729B (zh) * | 2018-01-24 | 2021-12-31 | 珠海金山网络游戏科技有限公司 | 一种基于Unity平台的手机游戏自动化测试方法和系统 |
CN108304230B (zh) * | 2018-02-01 | 2021-04-13 | 腾讯科技(深圳)有限公司 | 调整应用属性的实现方法、装置及可读存储介质 |
CN108446146B (zh) * | 2018-03-22 | 2022-03-08 | 北京奇艺世纪科技有限公司 | 一种游戏数据采集方法及装置 |
CN108519883A (zh) * | 2018-03-26 | 2018-09-11 | 平安普惠企业管理有限公司 | 参数修改方法、装置、终端设备及存储介质 |
CN108536484A (zh) * | 2018-03-26 | 2018-09-14 | 平安普惠企业管理有限公司 | 参数修改方法、装置、终端设备及存储介质 |
CN108595327B (zh) * | 2018-04-16 | 2023-06-06 | 深圳市腾讯网络信息技术有限公司 | 应用执行脚本的方法、应用测试方法、装置和计算机设备 |
CN108654090B (zh) * | 2018-05-17 | 2022-03-11 | 北京奇虎科技有限公司 | 操作系统与游戏应用交互的方法及装置 |
CN108744514B (zh) * | 2018-05-18 | 2021-08-06 | 腾讯科技(深圳)有限公司 | 一种滑动列表生成方法、数据展示方法、装置及存储介质 |
CN110874303B (zh) * | 2018-09-03 | 2023-05-26 | 阿里巴巴集团控股有限公司 | 数据采集方法、装置以及设备 |
CN111124795B (zh) * | 2018-11-01 | 2024-03-26 | 百度在线网络技术(北京)有限公司 | 应用启动监控方法、装置及设备 |
CN109857650B (zh) * | 2019-01-14 | 2022-07-01 | 珠海金山网络游戏科技有限公司 | 一种游戏性能监听方法及系统 |
CN110457211B (zh) * | 2019-07-23 | 2022-05-06 | 腾讯科技(深圳)有限公司 | 脚本性能测试方法、装置和设备及计算机存储介质 |
CN111176977B (zh) * | 2019-10-16 | 2021-08-03 | 腾讯科技(深圳)有限公司 | 一种安全漏洞自动识别方法和装置 |
CN113220355A (zh) * | 2020-01-20 | 2021-08-06 | 精品科技股份有限公司 | 控制台程序的控制管理方法及系统 |
CN113806789B (zh) * | 2020-06-12 | 2023-11-03 | 福建省天奕网络科技有限公司 | 一种基于游戏内存隐私保护系统 |
CN111966311B (zh) * | 2020-07-15 | 2024-04-26 | 北京视博云信息技术有限公司 | 云游戏的显示设置方法、装置、可读存储介质及设备 |
CN113209630B (zh) * | 2021-05-14 | 2022-09-30 | 上海完美时空软件有限公司 | 游戏应用的抓帧防御方法及装置、存储介质、计算机设备 |
CN114404996A (zh) * | 2022-01-26 | 2022-04-29 | 厦门雅基软件有限公司 | 资源数据处理方法、系统、编辑器、电子设备及存储介质 |
CN114637550B (zh) * | 2022-02-25 | 2024-05-10 | 广州点云科技有限公司 | 云游戏离线模式快速进入方法、装置、终端设备及介质 |
CN114675892B (zh) * | 2022-04-12 | 2024-09-17 | 杭州雾联科技有限公司 | 一种显示参数设置方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101278260A (zh) * | 2005-06-07 | 2008-10-01 | Vm软件股份有限公司 | 使软件程序免于弱点和攻击的约束注入系统 |
CN102314561A (zh) * | 2010-07-01 | 2012-01-11 | 电子科技大学 | 基于api hook的恶意代码自动分析方法和系统 |
CN102868699A (zh) * | 2012-09-26 | 2013-01-09 | 北京联众互动网络股份有限公司 | 一种提供数据交互服务的服务器的漏洞检测方法及工具 |
CN104951375A (zh) * | 2015-07-01 | 2015-09-30 | 北京博睿宏远科技发展有限公司 | 基于函数拦截技术的手机app性能数据采集方法 |
CN105528546A (zh) * | 2015-12-25 | 2016-04-27 | 北京金山安全软件有限公司 | 一种挖掘漏洞的方法、装置及电子设备 |
-
2016
- 2016-08-16 CN CN201610674691.2A patent/CN106294166B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101278260A (zh) * | 2005-06-07 | 2008-10-01 | Vm软件股份有限公司 | 使软件程序免于弱点和攻击的约束注入系统 |
CN102314561A (zh) * | 2010-07-01 | 2012-01-11 | 电子科技大学 | 基于api hook的恶意代码自动分析方法和系统 |
CN102868699A (zh) * | 2012-09-26 | 2013-01-09 | 北京联众互动网络股份有限公司 | 一种提供数据交互服务的服务器的漏洞检测方法及工具 |
CN104951375A (zh) * | 2015-07-01 | 2015-09-30 | 北京博睿宏远科技发展有限公司 | 基于函数拦截技术的手机app性能数据采集方法 |
CN105528546A (zh) * | 2015-12-25 | 2016-04-27 | 北京金山安全软件有限公司 | 一种挖掘漏洞的方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106294166A (zh) | 2017-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106294166B (zh) | 一种游戏数据监控方法和装置 | |
CN106326113B (zh) | 一种游戏数据监控方法和装置 | |
David et al. | BINSEC/SE: A dynamic symbolic execution toolkit for binary-level analysis | |
US10845964B2 (en) | Group chat selection and display method, and device thereof | |
Bhoraskar et al. | Brahmastra: Driving Apps to Test the Security of {Third-Party} Components | |
CN103186740B (zh) | 一种Android恶意软件的自动化检测方法 | |
Jensen et al. | Automated testing with targeted event sequence generation | |
US9146832B2 (en) | Debugging functionality embedded in an application | |
CN111078554B (zh) | 一种小程序调试方法、装置、设备及存储介质 | |
US8001532B1 (en) | System and method for generating source code-based test cases | |
US20170337122A1 (en) | Synthetic test recorder installed inline with a web portal | |
CN104536889A (zh) | 用户界面测试的方法、用例管理平台、操作终端及系统 | |
CN106294094A (zh) | 游戏服务器的测试方法、客户端、服务器及系统 | |
CN108399124A (zh) | 应用测试方法、装置、计算机设备和存储介质 | |
CN110032426A (zh) | 一种可在线实时调试的方法、系统及存储介质 | |
CN110177139A (zh) | 一种可公开的移动app数据抓取方法 | |
CN103559445A (zh) | 一种应用程序交互控制方法及装置 | |
CN108769175B (zh) | 远程真机访问控制方法、装置、存储介质及电子设备 | |
CN109947635A (zh) | 一种数据上报方法、装置、存储介质及终端设备 | |
CN106708528A (zh) | 脚本生成方法及装置 | |
KR20180129623A (ko) | 연관된 다중 파일 정적 분석 장치 | |
CN108121650A (zh) | 一种对于页面用户界面的测试方法及装置 | |
US9723489B1 (en) | Automated vulnerability discovery in mobile device applications | |
Vanderperren et al. | Optimizing jasco dynamic aop through hotswap and jutta | |
CN105577828B (zh) | 一种远程重定向方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |