CN108259490A - 一种客户端校验方法及装置 - Google Patents
一种客户端校验方法及装置 Download PDFInfo
- Publication number
- CN108259490A CN108259490A CN201810029031.8A CN201810029031A CN108259490A CN 108259490 A CN108259490 A CN 108259490A CN 201810029031 A CN201810029031 A CN 201810029031A CN 108259490 A CN108259490 A CN 108259490A
- Authority
- CN
- China
- Prior art keywords
- code
- client
- check
- check results
- object identifier
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
- H04L63/123—Applying verification of the received information received data contents, e.g. message integrity
Abstract
本发明公开了一种客户端校验方法及装置,应用于人机识别领域,该方法包括如下步骤:预先创建用于校验客户端内存代码的M种校验代码,所述M种校验代码的校验算法互不相同;从所述M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码;发送所述目标校验代码给目标客户端;接收所述目标客户端发送的第一校验结果,所述第一校验结果为所述目标客户端执行所述目标校验代码,生成的针对所述目标客户端当前的客户端内存代码的校验结果;根据所述第一校验结果校验所述目标客户端。通过本发明解决了现有技术中客户端内存代码完整性校验的可靠性不高的技术问题。
Description
技术领域
本发明涉及人机识别领域,尤其涉及一种客户端校验方法及装置。
背景技术
目前,对于客户端软件来说,是发布到用户电脑上进行安装使用。那么用户具有客户端软件的所有组件及资源文件。当客户端软件运行时则会将需要的可执行文件及组件加载到用户电脑上的内存中以执行。那么在内存中执行的是可以执行文件及组件的代码,即内存代码。
然而,黑客可以通过一些手段来修改客户端执行的内存代码,从而完成一些非法的功能。例如客户端软件中有一些限制功能,那么客户端会有一些代码来判断当期的功能是否可以使用,然而黑客可以将客户端的判断代码进行修改,从而客户端在任何时期使用限制功能。比如,对于游戏客户端来说,黑客可以修改游戏的金币数量,来实现无限金币的“外挂”功能,可以修改客户端软件的物理碰撞检测内存代码来实现“无敌”等功能。因此对于客户端执行时,其内存中运行的代码是否被修改则是相当重要,尤其对于网络游戏来说,所以客户端执行的内存代码进行完整性校验。
在现有技术中,客户端内存代码完整性校验的方法是:客户端先编写好校验代码,然后随客户端程序一起发布,该校验代码读取内存代码进行计算,将计算结果上报到服务器,由服务器判断客户端上报的计算结果,从而判断是否是非法客户端。因此,客户端校验代码是固定的,可以被黑客预先分析,找到绕过客户端校验代码的策略,因此,现有客户端内存代码完整性校验的方法会漏减非法客户端,校验可靠性不高。
发明内容
本发明实施例通过提供一种客户端校验方法及装置,解决了现有技术中客户端内存代码完整性校验的可靠性不高的技术问题。
第一方面,本方实施例提供一种客户端校验方法,应用于服务器,所述方法包括如下步骤:
预先创建用于校验客户端内存代码的M种校验代码,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
从所述M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码;
发送所述目标校验代码给目标客户端;
接收所述目标客户端发送的第一校验结果,所述第一校验结果为所述目标客户端执行所述目标校验代码,生成的针对所述目标客户端当前的客户端内存代码的校验结果;
根据所述第一校验结果校验所述目标客户端。
可选的,所述根据所述第一校验结果校验所述目标客户端,包括:
判断所述第一校验结果是否为异常校验结果;
如果判断出所述第一校验结果为异常校验结果,对所述目标客户端进行处理。
可选的,所述判断所述第一校验结果是否为正确校验结果,包括:
对来自于N个客户端的N个校验结果进行统计,获得所述N个校验结果中相同次数最多的校验结果,N为大于1的整数;
确定所述N个校验结果中相同次数最多的校验结果为标准校验结果;
判断所述第一校验结果是否与所述标准校验结果相同,如果所述第一校验结果与所述标准校验结果不相同,则所述第一校验结果是异常校验结果。
可选的,所述对所述目标客户端进行处理,包括:
向所述目标客户端发送用于提示用户,所述客户端内存代码被修改的提示信息;和/或
对所述目标客户端进行预设惩罚。
第二方面,本发明实施例提供一种客户端校验方法,应用于目标客户端,所述方法包括如下步骤:
从服务器接收目标校验代码,所述目标校验代码为所述服务器预先创建的用于校验客户端内存代码的M种校验代码中的一种所述,目标校验代码为从所述服务器从所述M种校验代码中随机选择,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
针对所述目标客户端当前的客户端内存代码执行所述目标校验代码,生成第一校验结果;
发送所述第一校验结果给所述服务器,使得所述服务器根据所述第一校验结果校验所述目标客户端。
可选的,所述针对所述目标客户端当前的客户端内存代码执行目标校验代码,生成第一校验结果,包括:
调用所述目标客户端所编写的校验代码运行环境,执行所述目标校验代码;
在执行所述目标校验代码时,将所述目标校验代码所需调用的系统函数的函数地址传递到所述目标校验代码中;
根据所述目标校验代码所需调用的系统函数的函数地址,所述目标校验代码调用对应系统函数,获取所述目标客户端当前的客户端内存代码;
执行所述目标校验代码的哈希算法部分,针对所述目标客户端当前的客户端内存代码生成所述第一校验结果。
第三方面,本发明实施例提供一种客户端校验装置,应用于服务器,所述装置包括:
创建单元,用于预先创建用于校验客户端内存代码的M种校验代码,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
随机选择单元,用于从所述M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码;
代码发送单元,用于发送所述目标校验代码给目标客户端;
校验结果接收单元,用于接收所述目标客户端发送的第一校验结果,所述第一校验结果为所述目标客户端执行所述目标校验代码,生成针对所述目标客户端当前的客户端内存代码的校验结果;
校验结果判断单元,用于根据所述第一校验结果校验所述目标客户端。
可选的,所述校验结果判断单元,包括:
判断子单元,用于判断所述第一校验结果是否为异常校验结果;
处理子单元,用于如果判断出所述第一校验结果为异常校验结果,对所述目标客户端进行处理。
可选的,所述判断子单元,具体用于:
对来自于N个客户端的N个校验结果进行统计,获得所述N个校验结果中相同次数最多的校验结果,N为大于1的整数;
确定所述N个校验结果中相同次数最多的校验结果为标准校验结果;
判断所述第一校验结果是否与所述标准校验结果相同,如果所述第一校验结果与所述标准校验结果不相同,则所述第一校验结果是异常校验结果。
可选的,所述处理子单元,具体用于:
向所述目标客户端发送用于提示用户,所述客户端内存代码被修改的提示信息;和/或
对所述目标客户端进行预设惩罚。
第四方面,本发明实施例提供一种客户端校验装置,应用于目标客户端,所述装置包括:
代码接收单元,用于从服务器接收目标校验代码,所述目标校验代码为所述服务器预先创建的用于校验客户端内存代码的M种校验代码中的一种所述,目标校验代码为从所述服务器从所述M种校验代码中随机选择,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
代码执行单元,用于针对所述目标客户端当前的客户端内存代码执行所述目标校验代码,生成第一校验结果;
校验结果发送单元,用于发送所述第一校验结果给所述服务器,使得所述服务器根据所述第一校验结果校验所述目标客户端。
可选的,所述代码执行单元,包括:
环境调用子单元,用于调用所述目标客户端所编写的校验代码运行环境,执行所述目标校验代码;
地址调用子单元,用于在执行所述目标校验代码时,将所述目标校验代码所需调用的系统函数的函数地址传递到所述目标校验代码中;
内存代码获取子单元,用于根据所述目标校验代码所需调用的系统函数的函数地址,所述目标校验代码调用对应系统函数,获取所述目标客户端当前的客户端内存代码;
校验结果生成子单元,用于执行所述目标校验代码的哈希算法部分,针对所述目标客户端当前的客户端内存代码生成所述第一校验结果。
第五方面,本发明实施例提供一种服务设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面中任一项所述的步骤。
第六方面,本发明实施例提供一种用户设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第二方面中任一项所述的步骤。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
有服务器预先创建用于校验客户端内存代码的M种校验代码,M种校验代码的校验算法互不相同;从M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码;发送所述目标校验代码给目标客户端;接收目标客户端发送的第一校验结果,第一校验结果为目标客户端执行目标校验代码,生成的针对目标客户端当前的客户端内存代码的校验结果;根据第一校验结果校验目标客户端。由于目标校验代码是服务器创建的,并且是从多种校验代码中随机挑选来下发到目标客户端,然后由客户端进行执行后将执行结果上报到服务器,因此,不同设备上的相同客户端所用的校验代码是随机的,即使是同一设备的同一个客户端,在不同时刻所用的校验代码也是随机,能够避免黑客预先分析客户端校验代码,从而使得无法绕过服务器对客户端内存代码的校验,提高了对客户端内存代码验证的可靠性,提高了客户端可执行文件及组件的防御能力。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的服务器侧客户端校验方法的流程图;
图2为本发明实施例提供的客户端的侧客户端校验方法的流程图;
图3为本发明实施例提供的服务器上客户端校验装置的程序模块图;
图4为本发明实施例提供的客户端上客户端校验装置的程序模块图。
具体实施方式
本发明实施例通过提供一种客户端校验方法,解决了现有技术中客户端内存代码完整性校验的可靠性不高的技术问题。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种客户端校验方法,应用于服务器,该服务器提供了访问商业逻辑的途径以供包括目标客户端包括内的一类客户端程序使用。
参考图1所示,本发明实施例提供的服务器侧客户端校验方法,包括如下步骤:
执行步骤S101:预先创建用于校验客户端内存代码的M种校验代码,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同。
具体的,M种校验代码中的每一种校验代码具体都为一种Shellcode(外壳代码),Shellcode代码实际是一段代码或者是填充数据。在本实施例中,M种校验代码对应使用M种哈希算法,每种校验代码对应一种类型的哈希算法。
具体的,M种校验代码中的每种校验代码至少包括如下多个部分:第一部分:通过调用客户端所在设备的系统函数,获取客户端内存代码。第二部分:对客户端内存代码进行HASH计算,生成第一校验结果。第三部分:调用客户端所在设备的系统函数,上报第一校验结果至服务器,通第三部分能够调用目标客户端的网络发送数据的功能,上报第一校验结果至服务器。
在步骤S101之后,执行步骤S102:从所述M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码。
具体的,通过随机选择一种校验代码发送给目标客户端,使得目标客户端所用的校验代码不是客户端先编写好后随客户端程序一起发布的固定校验代码,而是随机的校验代码,因此,针对不同用户的设备上客户端所用的校验代码是随机的,即使是同一设备上的同一客户端,在不同时刻所用的校验代码也是随机,从而能够避免黑客预先分析客户端校验代码,而绕过服务器对客户端内存代码的校验。
在步骤S102之后,执行步骤S103:发送所述目标校验代码给目标客户端。
具体的,将目标校验代码进行加密后发送到目标客户端。
在具体实施过程中,可以使用AES(Advanced Encryption Standard,高级加密标准)加密算法来对目标校验代码进行加密,加密后的目标校验代码发送到目标客户端进行解密后执行。举例来讲,对目标校验代码进行加密,可以通过如下代码实现:
Encryptdata=AES.encrypt(shellcode,key);
其中,AES.encrypt则是加密算法AES的接口,shellcode是目标校验代码,key是加密使用的密钥值,需要说明的是,目标客户端解密时和服务器加密时使用相同的密钥值,在具体实施过程中,既可以是服务器下发相同的密钥值给目标客户端,也可以是目标客户端与服务器约定某种算法计算得到相同的密钥值,例如,根据目标客户端的UID(UserIdentification,用户身份证明)进行计算,从而得到目标客户端解密时和服务器加密时相同的密钥值。
在步骤S103之后,执行步骤S104:接收所述目标客户端发送的第一校验结果,所述第一校验结果为所述目标客户端执行所述目标校验代码,生成的针对所述目标客户端当前的客户端内存代码的校验结果。
在步骤S104之后,执行步骤S105:根据所述第一校验结果校验所述目标客户端。
具体的,根据所述第一校验结果校验所述目标客户端,包括如下步骤S1051~S1052:
首先,执行步骤S1051:判断所述第一校验结果是否为异常校验结果。
具体的,对来自于N个客户端的N个校验结果进行统计,获得所述N个校验结果中相同次数最多的校验结果,N为大于1的整数;确定所述N个校验结果中相同次数最多的校验结果为标准校验结果;判断所述第一校验结果是否与所述标准校验结果相同,如果所述第一校验结果与所述标准校验结果不相同,则所述第一校验结果是异常校验结果。
需要说明的是,N个客户端为对应安装在N个用户设备上的相同客户端,比如,可是是XX游戏客户端或者XX社交客户端。
接着,执行步骤S1052、如果判断出所述第一校验结果为异常校验结果,对所述目标客户端进行处理。
具体的,对所述目标客户端进行处理,可以为多种实施方式:
实施方式一:向所述目标客户端发送用于提示用户,所述客户端内存代码被修改的提示信息。
实施方式二:对所述目标客户端进行预设惩罚。比如,对所述目标客户端进行禁止用户登录的惩罚,又比如,对所述目标客户端所登录用户进行用户降低处理,
实施方式三:对客户端内存代码的修改部分恢复为原始代码内容。
当然,在具体实施过程中,也可以将实施方式一至三中的任意两种以上进行结合使用。
基于同一发明构思,本发明实施例提供一种客户端校验方法,应用于目标客户端,参考图2所示,本发明实施例提供的客户端的侧客户端校验方法,包括如下步骤:
首先,执行步骤S201、从服务器接收目标校验代码,所述目标校验代码为所述服务器预先创建的用于校验客户端内存代码的M种校验代码中的一种所述,目标校验代码为从所述服务器从所述M种校验代码中随机选择,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同。
具体的,服务器下发为加密后目标校验代码,当目标客户端接收到服务器下发的加密后目标校验代码后,则需要对服务器下发的目标校验代码进行解密,得到解密后可以直接执行的目标校验代码。
需要说明的是,目标客户端解密目标校验代码所用的解密算法与服务器加密目标校验代码所用的加密算法匹配,所用的密钥值相同,具体实现方式如下:
shellcode=AES.decrypt(Encryptdata,key);
其中,AES.decrypt是解密算法AES的接口,Encryptdata是服务器下发的加密后目标校验代码,key是目标客户端解密所用的密钥值,与服务器加密目标校验代码时所用的秘钥值相同。
在步骤S201之后,执行步骤S202:针对所述目标客户端当前的客户端内存代码执行所述目标校验代码,生成第一校验结果。
具体的,当目标客户端接收到服务器下发的目标校验代码后,如果需要执行目标校验代码的功能则目标客户端软件编写执行目标校验代码的运行环境,还将目标校验代码所需调用的系统函数的地址传递至目标校验代码中,使得目标校验代码可以调用系统函数的方法。
具体来讲,步骤S202包括如下步骤S2021~S2024:
首先,执行步骤S2021:调用客户端编写的执行校验代码的运行环境,执行目标校验代码。
执行目标校验代码的运行环境,包括:在目标客户端的进程中,分配一段用于执行目标校验代码的内存空间,在所述内存空间中执行目标校验代码,具体的实现代码如下:
其中,lpAddress是指定内存空间开始的地址,dwSize是所分配的内存空间的大小,flAllocationType是所分配的内存空间的类型,flProtect是访问内存空间的权限。
在本实施例中,lpAddress处的参数值是填入NULL,dwSize处的参数值是填入最终执行的目标校验代码的大小。flAllocationType处填入的参数值具体是MEM_COMMIT,用于标示分配的物理内存。flProtect处填入的参数值具体是PAGE_EXECUTE_READWRITE,用于标示内存空间的属性。
返回值则是分配后的内存空间的起始地址pmem,具体实现如下:
BYTE*pmem=VirtualAlloc(NULL,size,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
在分配用于执行目标校验代码的内存空间之后,将所述目标校验代码写入至用于执行所述目标校验代码的内存空间中。
在具体实施过程中,可以是通过调用系统函数Memcpy来拷贝目标校验代码到分配的内存空间中,从而实现将所述目标校验代码写入所述内存空间中。
在步骤S2021之后,接着执行步骤S2022:执行目标校验代码时,目标校验代码所需调用的系统函数的函数地址传递到目标校验代码中。
由于目标校验代码直接调用系统函数比较复杂,因此,目标客户端获取目标校验代码需要调用到的所有系统函数的函数地址,将所有获取到的系统函数的函数地址传递到目标校验代码中。
在一实施方式中,获取所述目标校验代码所需调用的目标系统函数的函数地址,传递至已写入在所述内存空间的所述目标校验代码中;通过在所述内存空间内执行所述目标校验代码,所述目标校验代码进行调用所述目标系统函数,获得所述目标客户端当前的客户端内存代码。
更具体来讲,在目标客户端中获取目标校验代码需要调用到的系统函数的函数地址,并将其存储到全局变量中,从而生成一份包含目标校验代码需要调用的所有系统函数的函数地址的函数指针列表,将函数指针列表传入到目标校验代码中,当执行目标校验代码时,根据函数指针列表得到所要调用的系统函数的函数地址,从而调用对应的系统函数。
将分配的内存空间的起始地址转换成一个函数指针,执行该函数pF(listFunc);调用pF则表明执行了目标校验代码的代码同时将获取的函数指针列表listFunc传入到目标校验代码中,从而目标客户端具备了执行Shellcode的功能。
下面,对获取目标校验代码所需调用的目标系统函数的函数地址,进行举例来讲:
例如,目标校验代码需要调用系统函数CreateFile来打开文件或者读写文件,具体过程如下:
系统函数CreateFile是在"kernel32.dll"模块中,那么首先获取"kernel32.dll"模块的句柄,实现代码如下:
Kernel32Handle=GetModuleHandle("kernel32.dll");
获取到了"kernel32.dll"模块的句柄之后,获取系统函数CreateFile的接口的内存地址,实现代码可以如下:
CreateFileAddress=GetProcAddress(Kernel32Handle,“CreateFile”);
需要说明的是,通过调用系统函数GetProcAddress来能够获取模块中函数的接口的内存地址,不限于获取"kernel32.dll"模块中函数的接口的内存地址,其中参数Kernel32Handle则是需要获取的系统函数所在的句柄,参数“CreateFile”则是需要获取的系统函数的名称。
在具体实施过程中,依照上述举例的方法可以获取到更多其他的系统函数的内存地址,为了说明书的简洁,此处不再赘述。
获取到目标校验代码需要调用的系统函数的内存地址,最终得到一份函数指针的列表,从而会将这份函数指针列表传递到服务器下发的目标校验段中,使得目标校验代码可以调用系统函数来实现系统函数相关的方法。
在步骤S2022之后,接着执行步骤S2023:根据所述目标校验代码所需调用的系统函数的函数地址,所述目标校验代码调用对应系统函数,获取所述目标客户端当前的客户端内存代码。
具体的,为了获取校验的客户端内存代码,从函数指针列表中获取系统函数GetModuleHandle的函数地址,根据系统函数GetModuleHandle的函数地址调用系统函数GetModuleHandle来获取客户端内存代码的内存地址:
dwStart=GetModuleHandle(“xx.dll”);
其中xx.dll为客户端内存代码中的DLL(Dynamic Link Library,文件为动态链接库文件)的名称。
在步骤S2023之后,接着执行步骤S2024:执行所述目标校验代码的哈希算法部分,针对所述目标客户端当前的客户端内存代码生成所述第一校验结果。
举例来讲,如果是使用MD5算法来针对所述目标客户端当前的客户端内存代码进行计算HASH值,得到所述第一校验结果,那么实现过程如下:
获取到客户端内存代码的内存地址后,则可以依据需要校验的偏移和大小来计算需要校验的客户端内存代码。
那么在目标校验代码中会填入需要校验的客户端内存代码的起始偏移和大小。
checkstart=dwstart+offset;
其中,offset为需要校验的客户端内存代码的偏移地址,dwstart为客户端内存代码的内存地址。
Md5result=Md5.Create(checkstart,size);
其中,客户端内存代码的偏移为offset,客户端内存代码的大小为size,客户端内存代码基于MD5算法计算,最终得到了Md5result结果。
具体的,执行目标校验代码时,目标校验代码所需调用的系统函数的函数地址传递到目标校验代码中,具体可以通过如下过程实现:
在步骤S202之后,执行步骤S203:发送所述第一校验结果给所述服务器,使得所述服务器根据所述第一校验结果校验所述目标客户端。
基于同一发明构思,本发明实施例提供一种客户端校验装置,应用于服务器,参考图3所示,所述装置包括:
创建单元301,用于预先创建用于校验客户端内存代码的M种校验代码,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
随机选择单元302,用于从所述M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码;
代码发送单元303,用于发送所述目标校验代码给目标客户端;
校验结果接收单元304,用于接收所述目标客户端发送的第一校验结果,所述第一校验结果为所述目标客户端执行所述目标校验代码,生成针对所述目标客户端当前的客户端内存代码的校验结果;
校验结果判断单元305,用于根据所述第一校验结果校验所述目标客户端。
可选的,所述校验结果判断单元305,包括:
判断子单元,用于判断所述第一校验结果是否为异常校验结果;
处理子单元,用于如果判断出所述第一校验结果为异常校验结果,对所述目标客户端进行处理。
可选的,所述判断子单元,具体用于:
对来自于N个客户端的N个校验结果进行统计,获得所述N个校验结果中相同次数最多的校验结果,N为大于1的整数;
确定所述N个校验结果中相同次数最多的校验结果为标准校验结果;
判断所述第一校验结果是否与所述标准校验结果相同,如果所述第一校验结果与所述标准校验结果不相同,则所述第一校验结果是异常校验结果。
可选的,所述处理子单元,具体用于:
向所述目标客户端发送用于提示用户,所述客户端内存代码被修改的提示信息;和/或
对所述目标客户端进行预设惩罚。
由于本实施例所介绍的客户端校验装置为实施本发明实施例中服务器侧客户端校验方法所采用的装置,故而基于本发明实施例中所介绍的服务器侧客户端校验方法,本领域所属技术人员能够了解本实施例的装置的具体实施方式以及其各种变化形式,所以在此对于该装置如何实现本发明实施例中的服务器侧客户端校验方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中服务器侧客户端校验方法所采用的装置,都属于本发明所欲保护的范围。
基于同一发明构思,本发明实施例提供一种客户端校验装置,应用于目标客户端,参考图4所示,所述装置包括:
代码接收单元401,用于从服务器接收目标校验代码,所述目标校验代码为所述服务器预先创建的用于校验客户端内存代码的M种校验代码中的一种所述,目标校验代码为从所述服务器从所述M种校验代码中随机选择,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
代码执行单元402,用于针对所述目标客户端当前的客户端内存代码执行所述目标校验代码,生成第一校验结果;
校验结果发送单元403,用于发送所述第一校验结果给所述服务器,使得所述服务器根据所述第一校验结果校验所述目标客户端。
可选的,所述代码执行单元402,包括:
环境调用子单元,用于调用所述目标客户端所编写的校验代码运行环境,执行所述目标校验代码;
地址调用子单元,用于在执行所述目标校验代码时,将所述目标校验代码所需调用的系统函数的函数地址传递到所述目标校验代码中;
内存代码获取子单元,用于根据所述目标校验代码所需调用的系统函数的函数地址,所述目标校验代码调用对应系统函数,获取所述目标客户端当前的客户端内存代码;
校验结果生成子单元,用于执行所述目标校验代码的哈希算法部分,针对所述目标客户端当前的客户端内存代码生成所述第一校验结果。
由于本实施例所介绍的客户端校验装置为实施本发明实施例中客户端侧的客户端校验方法所采用的装置,故而基于本发明实施例中所介绍的客户端侧的客户端校验方法,本领域所属技术人员能够了解本实施例的装置的具体实施方式以及其各种变化形式,所以在此对于该装置如何实现本发明实施例中的客户端侧的客户端校验方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中客户端侧的客户端校验方法所采用的装置,都属于本发明所欲保护的范围。
基于同一发明构思,本发明实施例提供一种服务设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行前述服务器侧客户端校验方法实施例所述的步骤。
本实施例所介绍的服务设备为实施本发明实施例中服务器侧客户端校验方法所采用的电子设备,故而基于本发明实施例中所介绍的服务器侧客户端校验方法,本领域所属技术人员能够了解本实施例的服务设备的具体实施方式以及其各种变化形式,所以在此对于该服务设备如何实现本发明实施例中服务器侧客户端校验方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中服务器侧客户端校验方法所采用的服务设备,都属于本发明所欲保护的范围。
基于同一发明构思,本发明实施例提供一种用户设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现前述客户端侧的客户端校验方法实施例所述的步骤。
本实施例所介绍的用户设备为实施本发明实施例中客户端侧的客户端校验方法所采用的电子设备,故而基于本发明实施例中所介绍的客户端侧的客户端校验方法,本领域所属技术人员能够了解本实施例的用户设备的具体实施方式以及其各种变化形式,所以在此对于该用户设备如何实现本发明实施例中的客户端侧的客户端校验方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中客户端侧的客户端校验方法所采用的用户设备,都属于本发明所欲保护的范围。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
有服务器预先创建用于校验客户端内存代码的M种校验代码,M种校验代码的校验算法互不相同;从M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码;发送所述目标校验代码给目标客户端;接收目标客户端发送的第一校验结果,第一校验结果为目标客户端执行目标校验代码,生成的针对目标客户端当前的客户端内存代码的校验结果;根据第一校验结果校验目标客户端。由于目标校验代码是服务器创建的,并且是从多种校验代码中随机挑选来下发到目标客户端,然后由客户端进行执行后将执行结果上报到服务器,因此,不同设备上的相同客户端所用的校验代码是随机的,即使是同一设备的同一个客户端,在不同时刻所用的校验代码也是随机,能够避免黑客预先分析客户端校验代码,从而使得无法绕过服务器对客户端内存代码的校验,提高了对客户端内存代码验证的可靠性,提高了客户端可执行文件及组件的防御能力。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种客户端校验方法,应用于服务器,其特征在于,所述方法包括如下步骤:
预先创建用于校验客户端内存代码的M种校验代码,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
从所述M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的客户端内存代码的目标校验代码;
发送所述目标校验代码给目标客户端;
接收所述目标客户端发送的第一校验结果,所述第一校验结果为所述目标客户端执行所述目标校验代码,生成的针对所述目标客户端当前的客户端内存代码的校验结果;
根据所述第一校验结果校验所述目标客户端。
2.如权利要求1所述的客户端校验方法,其特征在于,所述根据所述第一校验结果校验所述目标客户端,包括:
判断所述第一校验结果是否为异常校验结果;
如果判断出所述第一校验结果为异常校验结果,对所述目标客户端进行处理。
3.如权利要求1或2所述的客户端校验方法,其特征在于,所述判断所述第一校验结果是否为正确校验结果,包括:
对来自于N个客户端的N个校验结果进行统计,获得所述N个校验结果中相同次数最多的校验结果,N为大于1的整数;
确定所述N个校验结果中相同次数最多的校验结果为标准校验结果;
判断所述第一校验结果是否与所述标准校验结果相同,如果所述第一校验结果与所述标准校验结果不相同,则所述第一校验结果是异常校验结果。
4.如权利要求1所述的客户端校验方法,其特征在于,所述对所述目标客户端进行处理,包括:
向所述目标客户端发送用于提示用户,所述客户端内存代码被修改的提示信息;和/或
对所述目标客户端进行预设惩罚。
5.一种客户端校验方法,应用于目标客户端,其特征在于,所述方法包括如下步骤:
从服务器接收目标校验代码,所述目标校验代码为所述服务器预先创建的用于校验客户端内存代码的M种校验代码中的一种所述,目标校验代码为从所述服务器从所述M种校验代码中随机选择,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
针对所述目标客户端当前的客户端内存代码执行所述目标校验代码,生成第一校验结果;
发送所述第一校验结果给所述服务器,使得所述服务器根据所述第一校验结果校验所述目标客户端。
6.如权利要求5所述的客户端校验方法,其特征在于,所述针对所述目标客户端当前的客户端内存代码执行目标校验代码,生成第一校验结果,包括:
调用所述目标客户端所编写的校验代码运行环境,执行所述目标校验代码;
在执行所述目标校验代码时,将所述目标校验代码所需调用的系统函数的函数地址传递到所述目标校验代码中;
根据所述目标校验代码所需调用的系统函数的函数地址,所述目标校验代码调用对应系统函数,获取所述目标客户端当前的客户端内存代码;
执行所述目标校验代码的哈希算法部分,针对所述目标客户端当前的客户端内存代码生成所述第一校验结果。
7.一种客户端校验装置,应用于服务器,其特征在于,所述装置包括:
创建单元,用于预先创建用于校验客户端内存代码的M种校验代码,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
随机选择单元,用于从所述M种校验代码中随机选择一种校验代码,确定为用于校验目标客户端当前的内存代码的目标校验代码;
代码发送单元,用于发送所述目标校验代码给目标客户端;
校验结果接收单元,用于接收所述目标客户端发送的第一校验结果,所述第一校验结果为所述目标客户端执行所述目标校验代码,生成针对所述目标客户端当前的客户端内存代码的校验结果;
校验结果判断单元,用于根据所述第一校验结果校验所述目标客户端。
8.一种客户端校验装置,应用于目标客户端,其特征在于,所述装置包括:
代码接收单元,用于从服务器接收目标校验代码,所述目标校验代码为所述服务器预先创建的用于校验客户端内存代码的M种校验代码中的一种所述,目标校验代码为从所述服务器从所述M种校验代码中随机选择,其中,M为大于1的整数,所述M种校验代码的校验算法互不相同;
代码执行单元,用于针对所述目标客户端当前的客户端内存代码执行所述目标校验代码,生成第一校验结果;
校验结果发送单元,用于发送所述第一校验结果给所述服务器,使得所述服务器根据所述第一校验结果校验所述目标客户端。
9.一种服务设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-4中任一项所述的步骤。
10.一种用户设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求5或6所述的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810029031.8A CN108259490B (zh) | 2018-01-12 | 2018-01-12 | 一种客户端校验方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810029031.8A CN108259490B (zh) | 2018-01-12 | 2018-01-12 | 一种客户端校验方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108259490A true CN108259490A (zh) | 2018-07-06 |
CN108259490B CN108259490B (zh) | 2021-02-02 |
Family
ID=62726421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810029031.8A Active CN108259490B (zh) | 2018-01-12 | 2018-01-12 | 一种客户端校验方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108259490B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111478903A (zh) * | 2020-04-07 | 2020-07-31 | 浙江同花顺智能科技有限公司 | 一种基于客户端的验证方法、服务器及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345602A (zh) * | 2013-06-14 | 2013-10-09 | 腾讯科技(深圳)有限公司 | 一种客户端代码完整性检测方法、装置和系统 |
US9274706B2 (en) * | 2014-07-10 | 2016-03-01 | Phison Electronics Corp. | Data management method, memory control circuit unit and memory storage apparatus |
CN105637486A (zh) * | 2013-10-31 | 2016-06-01 | 慧与发展有限责任合伙企业 | 内存完整性检查 |
CN107194250A (zh) * | 2017-03-31 | 2017-09-22 | 武汉斗鱼网络科技有限公司 | 内存代码的完整性校验方法及装置 |
CN107480068A (zh) * | 2017-08-22 | 2017-12-15 | 武汉斗鱼网络科技有限公司 | 代码完整性检测方法、装置、电子终端及可读存储介质 |
-
2018
- 2018-01-12 CN CN201810029031.8A patent/CN108259490B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345602A (zh) * | 2013-06-14 | 2013-10-09 | 腾讯科技(深圳)有限公司 | 一种客户端代码完整性检测方法、装置和系统 |
CN105637486A (zh) * | 2013-10-31 | 2016-06-01 | 慧与发展有限责任合伙企业 | 内存完整性检查 |
US9274706B2 (en) * | 2014-07-10 | 2016-03-01 | Phison Electronics Corp. | Data management method, memory control circuit unit and memory storage apparatus |
CN107194250A (zh) * | 2017-03-31 | 2017-09-22 | 武汉斗鱼网络科技有限公司 | 内存代码的完整性校验方法及装置 |
CN107480068A (zh) * | 2017-08-22 | 2017-12-15 | 武汉斗鱼网络科技有限公司 | 代码完整性检测方法、装置、电子终端及可读存储介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111478903A (zh) * | 2020-04-07 | 2020-07-31 | 浙江同花顺智能科技有限公司 | 一种基于客户端的验证方法、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108259490B (zh) | 2021-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102217501B1 (ko) | 신뢰 실행 환경을 갖는 모바일 디바이스 | |
Continella et al. | Obfuscation-Resilient Privacy Leak Detection for Mobile Apps Through Differential Analysis. | |
US8544089B2 (en) | Auditing a device | |
US11675880B2 (en) | Securing webpages, webapps and applications | |
US8949989B2 (en) | Auditing a device | |
US8370935B1 (en) | Auditing a device | |
CN111200589A (zh) | 一种联盟链的数据保护方法及系统 | |
US20160055331A1 (en) | Detecting exploits against software applications | |
CN109040134A (zh) | 一种信息加密的设计方法及相关装置 | |
US11574046B2 (en) | Protecting a software program against tampering | |
Yalew et al. | TruApp: A TrustZone-based authenticity detection service for mobile apps | |
CN108259490A (zh) | 一种客户端校验方法及装置 | |
Jeong et al. | MysteryChecker: Unpredictable attestation to detect repackaged malicious applications in Android | |
CN106415565B (zh) | 保护软件项目 | |
Ahmed et al. | SAPEM: Secure Attestation of Program Execution and Program Memory for IoT Applications. | |
Feng et al. | DeFi Auditing: Mechanisms, Effectiveness, and User Perceptions | |
JP2008060617A (ja) | 電子データ検証装置、電子データ作成装置、電子データ検証方法、電子データ作成方法及び集積回路 | |
Boldyreva et al. | Provably-secure remote memory attestation for heap overflow protection | |
CN105224374A (zh) | 一种目标执行文件的保护方法、装置及系统 | |
Debes | Convincing Without Revealing: Strategies for Facilitating Remote Attestation under Weakened Trust Assumptions using Privacy-Enhancing Technologies | |
CN113901498A (zh) | 一种数据共享方法、装置、设备及存储介质 | |
CN117892268A (zh) | 一种分布式的水印嵌入软件保护方法 | |
Warinschi | Provably-Secure Remote Memory Attestation for Heap Overflow Protection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |