一种基于Android平台Unity3D游戏的客户端安全检测方法及装置与流程

文档序号:14037403阅读:311来源:国知局
一种基于Android平台Unity3D游戏的客户端安全检测方法及装置与流程

本发明涉及一种手机游戏的安全检测方法及对应的装置,尤其涉及一种基于android平台unity3d游戏的客户端安全检测方法及装置。



背景技术:

在智能手机行业,随着手机游戏的市场占有率越来越高,大部分的知名游戏开发公司都在手机游戏开发投入了较多的技术研发。随着手机游戏的复杂程度不断提高,其开发过程中不可避免地引入各种安全性的问题。对基于android平台unity3d的手机,客户端的安全检测项目主要包括游戏数值内存安全(即游戏内存中数值是否能被搜索、修改和生效)和客户端游戏逻辑安全(即各种不同用例下游戏逻辑是否存在漏洞)。

对于游戏数值内存安全检测,目前主流方法之一是使用烧饼修改器等工具,测试人员通过搜索进程的/proc/<pid>/mem来定位相关数值的地址,然后修改数值(譬如游戏角色的生命力、攻击力和虚拟财产等)并观察变化,最后得出内存数值是否安全的结论。这种方法缺点在于操作非常繁琐耗时,且只能检索界面上显示的数值,以及每次回归测试都要重新操作一遍而导致测试效率低下。

对于客户端逻辑安全检测,目前主流方法之一是依赖人工操作,覆盖全体测试用例,从而检测各种不同用例下游戏逻辑是否存在漏洞。这种方式的缺点在于人工操作同样非常耗时,且测试用例只能覆盖到正常游戏逻辑。实际上,客户端代码是可能被破解的。因此,仅仅通过正常操作是不可能发现被恶意修改代码逻辑后的客户端会对游戏带来什么样的影响。测试人员还需要覆盖到非正常的用例才能更全面地保证游戏的逻辑安全。



技术实现要素:

本发明的目的是解决现有技术的不足,提供一种基于android平台unity3d游戏的客户端安全检测方法及装置,以解决现有技术中客户端测试覆盖面不够完善,以及测试效率不高的问题。

为了实现上述目的,本发明采用以下的技术方案。

首先,本发明提出一种基于android平台unity3d游戏的客户端安全检测方法,包括以下步骤:获取待检测游戏进程的进程标识符;根据所述进程标识符,包括辅助测试命令集动态库以及接口服务端动态库被加载到进程标识符所对应的进程;接口客户端通过接口服务端动态库,向进程发送辅助测试命令集动态库所提供的测试命令。

在本发明的上述方法中,还包括将向进程发送辅助测试命令集动态库所提供的测试命令导出为外部日志文件。

在本发明的上述方法中,辅助测试命令集动态库包括读取游戏的程序集的命令。

在本发明的上述方法中,辅助测试命令集动态库包括查找游戏类实例的命令。

进一步地,在本发明的上述方法中,辅助测试命令集动态库包括调用游戏类实例的方法的命令。

进一步地,在本发明的上述方法中,辅助测试命令集动态库包括读取和写入游戏类实例的属性和字段的命令。

再进一步地,在本发明的上述方法中,测试过程中读取和写入游戏类实例的属性和字段导出为外部日志文件。

其次,本发明提出一种基于android平台unity3d游戏的客户端安全检测装置,包括以下模块:监测模块,用于获取待检测游戏进程的进程标识符;注入模块,用于根据所述进程标识符,包括辅助测试命令集动态库以及接口服务端动态库被加载到进程标识符所对应的进程;发送模块,用于接口客户端通过接口服务端动态库,向进程发送辅助测试命令集动态库所提供的测试命令。

在本发明的上述装置中,还包括导出模块,用于将向进程发送辅助测试命令集动态库所提供的测试命令导出为外部日志文件。

在本发明的上述装置中,注入模块所注入的辅助测试命令集动态库包括读取游戏的程序集的命令。

在本发明的上述装置中,注入模块所注入的辅助测试命令集动态库包括查找游戏类实例的命令。

进一步地,在本发明的上述装置中,注入模块所注入的辅助测试命令集动态库包括调用游戏类实例的方法的命令。

进一步地,在本发明的上述装置中,注入模块所注入的辅助测试命令集动态库包括读取和写入游戏类实例的属性和字段的命令。

再进一步地,在本发明的上述装置中,导出模块还将测试过程中读取和写入游戏类实例的属性和字段导出为外部日志文件。

最后,本发明还提供了一种计算机可读存储介质,其上存储有计算机指令。该指令被处理器执行时实现如前述任一项方法的步骤。

本发明的有益效果为:完善客户端的数值内存安全检测和逻辑安全检测的覆盖面,并提高了检测效率。

附图说明

图1所示为本发明所提出的客户端安全检测方法的一个实施例流程图;

图2所示为本发明所提出的客户端安全检测方法的另一个实施例流程图;

图3所示为本发明所提出的客户端安全检测方法的动态库注入过程示意图;

图4所示为本发明所提出的客户端安全检测装置的一个实施例模块结构图;

图5所示为本发明所提出的客户端安全检测装置的另一个实施例模块结构图。

具体实施方式

以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。附图中各处使用的相同的附图标记指示相同或相似的部分。

参照图1所示的一个实施例流程图,本发明所提出的一种基于android平台unity3d游戏的客户端安全检测方法包括如下步骤:获取待检测游戏进程的进程标识符;根据所述进程标识符,包括辅助测试命令集动态库以及接口服务端动态库被加载到进程标识符所对应的进程;接口客户端通过接口服务端动态库,向进程发送辅助测试命令集动态库所提供的测试命令。

在本发明的一个实施例中,在开始测试前,用于实现各种辅助测试功能的命令集和向接口服务端发出命令的命令集,分别被编译生成为辅助测试命令集动态库和接口服务端动态库,以用于后面的进程注入操作。其中,辅助测试命令集动态库可基于c#反射机制所提供的封装程序集、模块和类型的对象(type类型)而创建。具体地,反射动态创建待检测游戏内类型的实例,并通过将类型绑定到现有对象,或从现有对象获取类型,从而调用其方法或访问其字段和属性。当游戏内类型的实例使用了属性时,属性可通过c#反射机制而被访问。测试人员基于客户端的接口连接和客户端的操作界面,直接向待检测游戏进程发送辅助测试命令集动态库所提供的命令,执行测试用例。

参照图2所示的本发明所提出的客户端安全检测方法的另一个实施例流程图,在该实施例中,向进程发送辅助测试命令集动态库所提供的测试命令被导出为外部日志文件。测试人员可基于外部日志文件,验证测试用例的具体执行情况。例如,测试用例所描述的执行步骤是否有被完整覆盖;或者在执行测试过程中,待检测游戏是否有抛出异常,导致测试过程中断等等。该日志文件亦可进一步地用于回归测试。

参照图3所示的本发明所提出的客户端安全检测方法的动态库注入过程示意图,在本发明的一个实施例中,在获取待检测游戏进程的进程标识符后,可使用ptrace关联待检测游戏进程,并进一步地获取并保存进程标识符对应的进程寄存器和进程堆栈。通过修改进程寄存器(例如,执行一段预先编写的shellcode),辅助测试命令集动态库以及接口服务端动态库被加载。最后,根据前面保存的进程寄存器和进程堆栈,通过恢复待检测游戏进程寄存器和进程堆栈,以及prtace解除关联待检测进程,使得待检测进程继续正常运行,以执行后继的正式测试工作。在接口客户端和接口服务端建立连接后,就可以通过接口服务端动态库向接口服务端发送命令。向接口服务端发送的命令可包括辅助测试命令集动态库所提供的用于测试的命令。

由于unity3d引擎的所提供的api,可查找继承自unity3d引擎的unityengine.object类对象。因此,结合unity3d引擎所提供的api和c#的反射机制,辅助测试命令集动态库可提供以下操作的命令:

●读取待测试游戏的程序集(assemblies);

●查找待测试游戏内的类实例(instance);

●查看和/或修改实例的属性(property)和字段(field);

●调用实例的方法(method);

供测试人员执行测试期间使用。

例如,由于unity3d引擎中,相机类(camera)决定了游戏所显示的画面,且unity3d中的对象unityengine.camera继承自unity3d引擎的unityengine.object类对象。因此,测试人员可利用辅助测试命令集动态库,查找unityengine.camera类实例,以执行具体的游戏数值内存安全检测和逻辑安全检测。

具体地,在本发明的一个实施例中,当包括辅助测试命令集动态库以及接口服务端动态库被加载到的进程标识符所对应的进程,以及接口客户端和接口服务端建立连接后,接口客户端首先基于辅助测试命令集动态库所提供的命令,查找待测试游戏的unityengine.camera类实例;然后接口客户端发出修改unityengine.camera类实例position属性的命令,调整游戏画面的高度,以模拟客户端被恶意修改而出现异常情况;最后,通过检测相机位置被修改后能否自动恢复原位,确认客户端是否安全。

进一步地,在本发明的上述实施例中,测试过程中读取和写入游戏类实例的属性和字段导出为外部日志文件。具体地,测试用例可以设计成读取修改前的游戏类实例的属性和字段,然后修改游戏类实例的属性和字段,并在修改后再次读取修改前的游戏类实例的属性和字段。将上述三次操作中读取和写入游戏类实例的属性和字段导出为外部日志文件,并通过对比前后两次所读取游戏类实例的属性和字段是否相同,得出是否安全的结论。

参照图4所示的本发明所提出的客户端安全检测装置的一个实施例模块结构图,本发明还提出一种基于android平台unity3d游戏的客户端安全检测装置,包括以下模块:监测模块,用于获取待检测游戏进程的进程标识符;注入模块,用于根据所述进程标识符,包括辅助测试命令集动态库以及接口服务端动态库被加载到进程标识符所对应的进程;发送模块,用于接口客户端通过接口服务端动态库,向进程发送辅助测试命令集动态库所提供的测试命令。

在本发明的一个实施例中,在开始测试前,用于实现各种辅助测试功能的命令集和向接口服务端发出命令的命令集,分别被编译生成为辅助测试命令集动态库和接口服务端动态库,注入模块注入到待检测游戏进程中。其中,辅助测试命令集动态库可基于c#反射机制所提供的封装程序集、模块和类型的对象(type类型)而创建。具体地,反射动态创建待检测游戏内类型的实例,并通过将类型绑定到现有对象,或从现有对象获取类型,从而调用其方法或访问其字段和属性。当游戏内类型的实例使用了属性时,属性可通过c#反射机制而被访问。测试人员基于客户端的接口连接和客户端的操作界面,直接向待检测游戏进程发送辅助测试命令集动态库所提供的命令,执行测试用例。

参照图5所示的本发明所提出的客户端安全检测装置的另一个实施例模块结构图,在该实施例中,还包括导出模块,用于将向进程发送辅助测试命令集动态库所提供的测试命令导出为外部日志文件。测试人员可基于外部日志文件,验证测试用例的具体执行情况。例如,测试用例所描述的执行步骤是否有被完整覆盖;或者在执行测试过程中,待检测游戏是否有抛出异常,导致测试过程中断等等。该日志文件亦可进一步地用于回归测试。

在本发明的一个实施例中,监测模块获取待检测游戏进程的进程标识符后,注入模块可使用ptrace关联待检测游戏进程,并进一步地获取并保存进程标识符对应的进程寄存器和进程堆栈。通过修改进程寄存器(例如,执行一段预先编写的shellcode),辅助测试命令集动态库以及接口服务端动态库被加载。最后,根据前面保存的进程寄存器和进程堆栈,通过恢复待检测游戏进程寄存器和进程堆栈,以及prtace解除关联待检测进程,使得待检测进程继续正常运行,以执行后继的正式测试工作。在接口客户端和接口服务端建立连接后,发送模块就可以通过接口服务端动态库向接口服务端发送命令。向接口服务端发送的命令可包括辅助测试命令集动态库所提供的用于测试的命令。

由于unity3d引擎的所提供的api,可查找继承自unity3d引擎的unityengine.object类对象。因此,结合unity3d引擎所提供的api和c#的反射机制,辅助测试命令集动态库可提供以下操作的命令:

●读取待测试游戏的程序集(assemblies);

●查找待测试游戏内的类实例(instance);

●查看和/或修改实例的属性(property)和字段(field);

●调用实例的方法(method);

供测试人员执行测试期间使用。

例如,由于unity3d引擎中,相机类(camera)决定了游戏所显示的画面,且unity3d中的对象unityengine.camera继承自unity3d引擎的unityengine.object类对象。因此,测试人员可利用辅助测试命令集动态库,查找unityengine.camera类实例,以执行具体的游戏数值内存安全检测和逻辑安全检测。

具体地,在本发明的一个实施例中,当包括辅助测试命令集动态库以及接口服务端动态库被加载到的进程标识符所对应的进程,以及接口客户端和接口服务端建立连接后,接口客户端首先基于辅助测试命令集动态库所提供的命令,查找待测试游戏的unityengine.camera类实例;然后接口客户端发出修改unityengine.camera类实例position属性的命令,调整游戏画面的高度,以模拟客户端被恶意修改而出现异常情况;最后,通过检测相机位置被修改后能否自动恢复原位,确认客户端是否安全。

进一步地,在本发明的上述实施例中,导出模块还可以将测试过程中读取和写入游戏类实例的属性和字段导出为外部日志文件。具体地,测试用例可以设计成读取修改前的游戏类实例的属性和字段,然后修改游戏类实例的属性和字段,并在修改后再次读取修改前的游戏类实例的属性和字段。将上述三次操作中读取和写入游戏类实例的属性和字段导出为外部日志文件,并通过对比前后两次所读取游戏类实例的属性和字段是否相同,得出是否安全的结论。

尽管本发明的描述已经相当详尽且特别对几个所述实施例进行了描述,但其并非旨在局限于任何这些细节或实施例或任何特殊实施例,而是应当将其视作是通过参考所附权利要求考虑到现有技术为这些权利要求提供广义的可能性解释,从而有效地涵盖本发明的预定范围。此外,上文以发明人可预见的实施例对本发明进行描述,其目的是为了提供有用的描述,而那些目前尚未预见的对本发明的非实质性改动仍可代表本发明的等效改动。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1