一种检测android运行多开环境的方法及系统与流程

文档序号:23717946发布日期:2021-01-24 06:23阅读:312来源:国知局
一种检测android运行多开环境的方法及系统与流程

[0001]
本发明涉及网络游戏制作领域,特别是一种检测android运行多开环境的方法及系统。


背景技术:

[0002]
移动端游戏的快速发展从而吸引一批批逆向游戏客户端爱好者和apk开发辅助人员进行开发游戏作弊的apk辅助软件,其中对游戏客户端进行多开分身的都是属于游戏apk辅助软件。市面上的分身多开采用的技术主要通过以下几种实现的,第一种通过反编译修改apk包名和签名数据,第二种通过修改android系统的framework框架数据,第三种通过虚拟化技术实现多开,第四种通过创建多用户方式实现多开。因为对游戏客户端进行分身多开的apk软件出现会大大破坏游戏的平衡性也给游戏客户端的安全带来了巨大的隐患。
[0003]
因此需要检测出游戏客户端的apk是否运行于多开的环境中。但是市面上很多的逆向破解和apk软件开发者会进行不断的采取新的多开分身方案以此来伪装成apk没有运行在多开分身环境下。因此检测对抗安卓多开分身成为一个需要长期对抗的一个解决问题的过程。


技术实现要素:

[0004]
为克服上述问题,本发明的目的是提供一种检测android运行多开环境的方法,能准确的检测出游戏客户端是否运行于多开分身环境中,提高了游戏的安全性。
[0005]
本发明采用以下方案实现:一种检测android运行多开环境的方法,所述方法包括不分先后顺序的两种检测方式,检测方式一:通过基于游戏客户端运行时候所属的用户名称数据进行检测;如果用户名称数据中包括“u0_”字符串信息,否,则当前游戏客户端运行于多开分身环境;是,则当前游戏客户端没有运行于多开环境;检测方式二:通过检测同一个唯一标识uid下的所有运行的包名并统计包数量的方式;统计同一个唯一标识uid下的正在运行的包名与游戏客户端的包名一样的数量是否超过2个,是,当前游戏客户端运行于多开分身环境
ꢀꢀ
否,当前游戏客户端没有运行于多开环境。
[0006]
进一步的,所述检测方式一进一步具体为:启动游戏客户端后,通过游戏客户端系统自带的android.os.process.mypid()方法获取游戏客户端运行时自身的pid数据,接着通过pid数据获取到自身进程所属的用户名称数据,通过截取用户名称数据中"_"的前部分数据,只要判断截取"_"的前部分数据不等于"u0"两个字符,则表示游戏客户端运行于多开环境,等于,则当前游戏客户端没有运行于多开环境。
[0007]
进一步的,所述检测方式二进一步具体为:启动游戏客户端后,通过context.getpackagename()方法获取到游戏客户端运行时自身的apk包名数据,接着通过执行/proc/self/cgroup命令获取到唯一标识uid数据,接着遍历当前系统中所有运行的进程数据,并且通过遍历获取到正在运行的进程唯一标识uid数据下面的所有包名数量,判断
获取的所有包名跟游戏客户端运行时自身的apk包名一样的包名有几个,只要同一个唯一标识uid下运行的包名个数超过两个,那么当前游戏客户端运行于多开分身环境,否,当前游戏客户端没有运行于多开环境。
[0008]
本发明提供了一种检测android运行多开环境的系统,所述系统包括第一检测模块或第二检测模块;所述第一检测模块、第二检测模块都能各自独立检测android是否运行在多开环境中,所述第一检测模块,用于通过基于游戏客户端运行时候所属的用户名称数据进行检测;如果用户名称数据中包括“u0_”字符串信息,否,则当前游戏客户端运行于多开分身环境;是,则当前游戏客户端没有运行于多开环境;所述第二检测模块,用于通过检测同一个唯一标识uid下的所有运行的包名并统计包数量的方式;统计同一个唯一标识uid下的正在运行的包名与游戏客户端的包名一样的数量是否超过2个,是,当前游戏客户端运行于多开分身环境
ꢀꢀ
否,当前游戏客户端没有运行于多开环境。
[0009]
进一步的,第一检测模块的实现方式进一步具体为:启动游戏客户端后,通过游戏客户端系统自带的android.os.process.mypid()方法获取游戏客户端运行时自身的pid数据,接着通过pid数据获取到自身进程所属的用户名称数据,通过截取用户名称数据中"_"的前部分数据,只要判断截取"_"的前部分数据不等于"u0"两个字符,则表示游戏客户端运行于多开环境,等于,则当前游戏客户端没有运行于多开环境。
[0010]
进一步的,所述第二检测模块的实现方式进一步具体为:启动游戏客户端后,通过context.getpackagename()方法获取到游戏客户端运行时自身的apk包名数据,接着通过执行/proc/self/cgroup命令获取到唯一标识uid数据,接着遍历当前系统中所有运行的进程数据,并且通过遍历获取到正在运行的进程唯一标识uid数据下面的所有包名数量,判断获取的所有包名跟游戏客户端运行时自身的apk包名一样的包名有几个,只要同一个唯一标识uid下运行的包名个数超过两个,那么当前游戏客户端运行于多开分身环境,否,当前游戏客户端没有运行于多开环境。
[0011]
本发明的有益效果在于:检测游戏客户端运行在多开环境的具体由两种检测方式相结合进行检测,只要其中一个检测方案检测到就是证明游戏客户端被多开了;检测方式一:通过基于游戏客户端运行时候所属的用户名称数据进行检测;检测方式二:通过检测同一个唯一标识uid下的所有运行的包名并统计包数量的方式;本发明能准确的检测出游戏客户端是否运行于多开分身环境中,提高了游戏的安全性。
附图说明
[0012]
图1是本发明的方法流程示意图。
[0013]
图2是本发明的实施例一的方法流程原理图。
具体实施方式
[0014]
下面结合附图对本发明做进一步说明。
[0015]
请参阅图1所示,本发明的一种检测android运行多开环境的方法,所述方法包括不分先后顺序的两种检测方式,检测方式一:通过基于游戏客户端运行时候所属的用户名称数据进行检测;如果用户名称数据中包括“u0_”字符串信息,否,则当前游戏客户端运行
于多开分身环境;是,则当前游戏客户端没有运行于多开环境;其中,u0表示的是启动游戏客户端apk的用户名的名称,表示字符串是否匹配到u0的两个字符。因此,只要判断用户名称数据中是否包括“u0_”字符串信息。
[0016]
检测方式二:通过检测同一个唯一标识uid下的所有运行的包名并统计包数量的方式;统计同一个唯一标识uid下的正在运行的包名与游戏客户端的包名一样的数量是否超过2个,是,当前游戏客户端运行于多开分身环境
ꢀꢀ
否,当前游戏客户端没有运行于多开环境。
[0017]
所述检测方式一进一步具体为:启动游戏客户端后,通过游戏客户端系统自带的android.os.process.mypid()方法获取游戏客户端运行时自身的pid数据,接着通过pid数据获取到自身进程所属的用户名称数据,通过截取用户名称数据中"_"的前部分数据,只要判断截取"_"的前部分数据不等于"u0"两个字符,则表示游戏客户端运行于多开环境,等于,则当前游戏客户端没有运行于多开环境。
[0018]
所述检测方式二进一步具体为:启动游戏客户端后,通过context.getpackagename()方法获取到游戏客户端运行时自身的apk包名数据,接着通过执行/proc/self/cgroup命令获取到唯一标识uid数据,接着遍历当前系统中所有运行的进程数据,并且通过遍历获取到正在运行的进程唯一标识uid数据下面的所有包名数量,判断获取的所有包名跟游戏客户端运行时自身的apk包名一样的包名有几个,只要同一个唯一标识uid下运行的包名个数超过两个,那么当前游戏客户端运行于多开分身环境,否,当前游戏客户端没有运行于多开环境。
[0019]
下面结合一具体实施例对本发明作进一步说明:如图2所示,本发明的一种检测android运行多开环境的方法,该方法为:移动端的游戏客户端运行时需要校验当前客户端是否被运行于多开的环境以此影响到游戏客户端安全。以此需要对这些使用多开环境的用户进行对应的处罚。
[0020]
安卓环境下获取当前进程所属的用户名称信息:通过android.os.process.mypid()获取到自身运行的pid数据,接着通过pid拼装为 "ps |grep pid" 命令行数据,通过bufferedoutputstream函数,bufferedinputstream函数,读写数据获取到自身进程的用户名称数据。
[0021]
安卓环境下获取当前进程的uid信息:通过调用bufferedoutputstream函数,bufferedinputstream函数,去执行 /proc/self/cgroup获取自身数据,然后从获取到的数据去通过substring截取uid数据。
[0022]
判断当前运行的客户端是否被多开的具体步骤:通过获取自身程序的用户名称数据和通过获取同一个唯一标识uid下面的所有包名数量。接着判断游戏客户端运行的用户名称"_"之前是否等于"u0"两个字符,如果不等于"u0"那边表示多开了。
[0023]
接着通过遍历所有正在运行的进程uid数据和游戏客户端自身的apk包名数据,判断跟游戏客户端uid数据一样的包名有几个,只要同一个uid下运行的个数超过两个那么就表示运行于多开环境。
[0024]
本发明提供了一种检测android运行多开环境的系统,所述系统包括第一检测模块或第二检测模块;所述第一检测模块、第二检测模块都能各自独立检测android是否运行在多开环境中,所述第一检测模块,用于通过基于游戏客户端运行时候所属的用户名称数
据进行检测;如果用户名称数据中包括“u0_”字符串信息,否,则当前游戏客户端运行于多开分身环境;是,则当前游戏客户端没有运行于多开环境;所述第二检测模块,用于通过检测同一个唯一标识uid下的所有运行的包名并统计包数量的方式;统计同一个唯一标识uid下的正在运行的包名与游戏客户端的包名一样的数量是否超过2个,是,当前游戏客户端运行于多开分身环境
ꢀꢀ
否,当前游戏客户端没有运行于多开环境。
[0025]
在本发明中,第一检测模块的实现方式进一步具体为:启动游戏客户端后,通过游戏客户端系统自带的android.os.process.mypid()方法获取游戏客户端运行时自身的pid数据,接着通过pid数据获取到自身进程所属的用户名称数据,通过截取用户名称数据中"_"的前部分数据,只要判断截取"_"的前部分数据不等于"u0"两个字符,则表示游戏客户端运行于多开环境,等于,则当前游戏客户端没有运行于多开环境。
[0026]
所述第二检测模块的实现方式进一步具体为:启动游戏客户端后,通过context.getpackagename()方法获取到游戏客户端运行时自身的apk包名数据,接着通过执行/proc/self/cgroup命令获取到唯一标识uid数据,接着遍历当前系统中所有运行的进程数据,并且通过遍历获取到正在运行的进程唯一标识uid数据下面的所有包名数量,判断获取的所有包名跟游戏客户端运行时自身的apk包名一样的包名有几个,只要同一个唯一标识uid下运行的包名个数超过两个,那么当前游戏客户端运行于多开分身环境,否,当前游戏客户端没有运行于多开环境。
[0027]
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1