【技术实现步骤摘要】
一种基于LLVM的函数校验方法及相关装置
[0001]本申请涉及网络平台领域,尤其涉及一种LLVM的函数校验方法及相关装置。
技术介绍
[0002]随着网络的不断普及和发展,应用程序也变得更加多样化和多功能化。可以理解的是,对于应用程序来说,尤其是有收益的应用程序,其功能代码的完整性不被修改则非常重要。然而,现实中,一些黑客通过修改应用程序的代码则实现了一些“外挂”功能,例如修改判断客户端是否是VIP的判断逻辑,从而可以不购买VIP而具有VIP的功能。
[0003]现有技术中,通过编写一个独立的校验代码,以进行校验。即服务器下发该校验代码的地址和长度,所有代码的校验都使用该独立的校验代码进行校验。然而现有技术中,所有代码校验功能都在一个功能函数里面,若黑客修改了校验代码就绕过了对所有代码的校验,且由于所有代码的校验算法都是一样的,导致校验的安全性低,容易被黑客获知校验原理。因此如何提高校验的安全性,是当前亟需解决的问题。
技术实现思路
[0004]本申请实施例提供了一种基于底层虚拟机LLVM的函数校验 ...
【技术保护点】
【技术特征摘要】
1.一种基于底层虚拟机LLVM的函数校验方法,其特征在于,包括:编写功能函数列表,所述功能函数列表包括各功能函数的名称和所述各功能函数对应的校验因子复杂度,所述功能函数为需要插入校验因子以进行校验的函数,所述各功能函数对应的校验因子复杂度与所述各功能函数的重要性正相关;重载runOnFunction函数后,获取当前函数的名称,并判断所述当前函数是否包含于所述功能函数列表中,所述runOnFunction函数用于在函数中插入所述校验因子;若是,则记录所述当前函数的内存起始地址和内存结束地址,并在所述当前函数的尾部插入第一调用函数和第二调用函数,所述第一调用函数用于调用所述当前函数对应的目标校验因子的功能,所述第一调用函数的输入参数包括所述当前函数的内存起始地址和内存结束地址,所述第二调用函数用于调用加密校验结果的功能;在执行到所述当前函数的尾部时,通过所述第一调用函数得到对所述当前函数进行校验的目标校验结果,并通过所述第二调用函数对所述目标校验结果进行加密得到加密校验结果;将所述加密校验结果上传至服务器,以使得所述服务器根据所述加密校验结果判断所述当前函数是否被修改。2.根据权利要求1所述的方法,其特征在于,所述获取当前函数的名称,并判断所述当前函数是否包含于所述功能函数列表中包括:通过调用函数getname()获取所述当前函数的名称;定义迭代器iterator,并通过所述迭代器iterator查找所述当前函数的名称是否包含于所述功能函数列表中;若所述当前函数的名称包含于所述功能函数列表中,则获取所述当前函数对应的目标校验因子复杂度;若所述当前函数的名称不包含于所述功能函数列表中,则返回提示信息,所述提示信息用于提示对所述当前函数不插入所述校验因子。3.根据权利要求1所述的方法,其特征在于,所述记录所述当前函数的内存起始地址和内存结束地址包括:通过调用函数begin()获取所述当前函数的第一个代码块curr,并通过调用函数cbegin()反向获取所述当前函数的最后的代码块curr1;创建用于记录所述内存起始地址的变量startaddress和用于记录所述内存结束地址的变量endaddress;通过调用函数insertfront()将所述变量startaddress插入到所述代码块curr的起始位置,并将所述变量endaddress插入到所述代码块curr1的结束位置,所述代码块curr的起始位置为所述当前函数的内存起始地址,所述代码块curr1的结束位置为所述当前函数的内存结束地址。4.根据权利要求3所述的方法,其特征在于,所述在所述当前函数的尾部插入第一调用函数和第二调用函数包括:通过调用第一创建接口BinaryOperator::Create()构建所述第一调用函数,所述第一创建接口BinaryOperator::Create()的输入参数包括所述目标校验因子、所述当前函数的内存起始地址和所述当前函数的内存结束地址;
通过调用第二创建接口BinaryOperator::Create()构建所述第二调用函数,所述第二创建接口BinaryOperato...
【专利技术属性】
技术研发人员:周志刚,
申请(专利权)人:武汉斗鱼网络科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。