CN112650640B - 程序监测方法及装置、服务器、计算机存储介质 - Google Patents
程序监测方法及装置、服务器、计算机存储介质 Download PDFInfo
- Publication number
- CN112650640B CN112650640B CN201910966328.1A CN201910966328A CN112650640B CN 112650640 B CN112650640 B CN 112650640B CN 201910966328 A CN201910966328 A CN 201910966328A CN 112650640 B CN112650640 B CN 112650640B
- Authority
- CN
- China
- Prior art keywords
- function
- monitoring
- program module
- sequence
- server
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了程序监测方法及装置、服务器、计算机存储介质。本申请实施例方法可以应用于通信网络中,该通信网络可以为有线网络或无线网络,服务器生成监测策略,其中监测策略包括监测序列,预设监测结果和监测指令;该服务器向所述程序模块实体发送监测序列和监测指令;服务器接收统计数据,该统计数据包含所述目标函数的执行顺序和执行次数;服务器判断统计数据与预设监测结果是否一致;若一致,则服务器确定程序模块实体处于正常执行状态;若不一致,则服务器确定程序模块实体处于异常执行状态,使用该方法,可以准确监测函数的调用情况,方便为盗用程序函数的行为进行处理。
Description
技术领域
本申请实施例涉及数据处理领域,特别涉及一种程序监测方法及装置、服务器、计算机存储介质。
背景技术
对于应用程序开发来说,模块的核心函数是完成程序功能的关键,也是开发人员最重要的智力成果。核心函数与起辅助作用的非核心函数一起支持应用程序的功能,这些函数被集成在程序模块实体上,例如芯片,最终被安装在用户设备上。
目前,由于用户设备的模块上都集成有核心函数,用户只需要知道模块的调用参数,就可以通过函数调用的方式直接使用函数来满足相关需求,例如,用户设备的模块存储有一个生产设备唯一ID的算法函数,那么用户不需要去了解算法函数的原理,也不需要去分析该算法函数的逻辑实现过程,只需要直接调用该算法函数,就可以直接获取一个合法的设备唯一ID;这导致了核心函数的使用得不到监控,任何人都可以随意使用该核心函数,造成算法函数滥用的局面。
由于不法用户可以随意调用算法函数,网络安全性差,该算法函数的开发人员的智力成果也得不到有效保护,所以需要对核心函数的使用进行有效的监控,为后续采取补救措施提供条件。
发明内容
本申请实施例提供了一种程序监测方法及装置、服务器、计算机存储介质,旨在有效监控算法函数的使用。
本申请实施例第一方面提供了一种程序监测方法,包括:
服务器对程序模块实体中所有的函数进行编号;
所述服务器根据所述程序模块实体的设备标识号和时间戳,生成数字序列;
所述服务器根据所述数字序列和所述编号,在所述函数中确定目标函数;
所述服务器根据所述目标函数的执行规则,制定预设监测结果,所述执行规则包括所述目标函数的预设执行顺序和预设执行次数;
所述服务器根据生成监测策略,所述监测策略包括监测序列,预设监测结果和监测指令;所述监测序列用于指示程序模块实体确定所述目标函数,所述监测指令用于指示程序模块实体对所述目标函数进行监测;
所述服务器向所述程序模块实体发送所述监测序列和所述监测指令;
所述服务器接收程序模块实体发送的统计数据,所述统计数据包含所述目标函数的执行顺序和执行次数;
所述服务器判断所述统计数据与所述预设监测结果是否一致;
若一致,则所述服务器确定所述程序模块实体处于正常执行状态;
若不一致,则所述服务器确定所述程序模块实体处于异常执行状态。
基于本申请实施例第一方面,本申请实施例第一方面的第一种实施方式中,所述服务器对程序模块实体中所有的函数进行编号,包括:
所述服务器对所述程序模块实体中所有的函数进行分类,分为核心函数与非核心函数;
所述服务器对所述核心函数和所述非核心函数分别进行编号;
所述服务器根据所述程序模块实体的设备标识号和时间戳,生成数字序列,包括:
所述服务器获取所述程序模块实体的设备标识号,确定所述设备标识号对应的第一字符序列;
所述服务器设置程序模块实体的时间戳,确定所述时间戳对应的第二字符序列;
所述服务器对所述第一字符序列和所述第二字符序列中的字符进行排列组合,生成组合字符数据;
所述服务器对所述组合字符数据进行计算,得到所述数字序列。
基于本申请实施例第一方面,本申请实施例第一方面的第二种实施方式中,所述服务器根据所述数字序列和所述编号,在所述函数中确定所述目标函数,包括:
所述服务器对所述数字序列进行拆分,计算得到目标数字;
所述服务器识别所述目标数字,根据预设规则将所述目标数字划分为第一目标数字与第二目标数字;
所述服务器根据所述第一目标数字在所述核心函数中确定第一目标函数,根据第二目标数字在所述非核心函数中确定第二目标函数,所述目标函数包括所述第一目标函数和所述第二目标函数。
基于本申请实施例第一方面,本申请实施例第一方面的第三种实施方式中,所述服务器对所述组合字符数据进行计算,得到所述数字序列,包括:
所述服务器对根据预设公式确定散列函数HASH运算的次数;
所述服务器根据所述次数,对所述组合字符数据进行多次HASH值计算,得到至少两个HASH目标序列;
所述服务器确定比例系数;
所述服务器,根据所述比例系数对所述至少两个HASH目标序列进行运算,得到所述数字序列。
基于本申请实施例第一方面,本申请实施例第一方面的第四种实施方式中,所述服务器对根据预设公式确定散列函数HASH运算的次数包括:通过以下公式确定所述散列函数HASH运算的次数:Hash_num=(strlen(Core_module_name)^P+strlen(Deviceid)^Q)/(strlen(userid)*M)%HASH_SUM;所述Hash_num为所述散列函数HASH运算的次数,所述strlen(Core_module_name)为所述程序模块实体的名称的长度,所述strlen(Deviceid)为用户的设备唯一ID号的长度,所述strlen(userid)为用户的唯一ID号的长度,所述Q>P,所述M<=P+Q。
本申请实施例第二方面提供了一种程序监测方法,包括:
程序模块实体接收服务器发送的监测序列和监测指令,所述监测序列用于选择所述程序模块实体包含的函数;
所述程序模块实体根据所述监测序列,确定所述程序模块实体中的目标函数;
所述程序模块实体根据所述监测指令对所述目标函数进行监测,在预设时间内记录所述目标函数的执行状态,所述执行状态包括所述目标函数的执行顺序和执行次数;
所述程序模块实体根据所述执行状态,生成统计数据并向服务器发送所述统计数据。
基于本申请实施例第二方面,本申请实施例第二方面的第一种实施方式中,所述程序模块实体根据所述监测指令对所述目标函数进行监测,包括:
所述程序模块实体对所述目标函数执行钩子函数Hook操作;
所述程序模块实体监测所述钩子函数Hook的执行函数在所述预设时间内的执行结果;
所述在预设时间内记录所述目标函数的执行状态,包括:
所述程序模块建立所述目标函数的记录链表;
所述程序模块根据所述执行结果,确定所述目标函数的所述执行顺序和执行次数;
所述程序模块将所述执行顺序的和执行次数,记录在所述记录链表中。
基于本申请实施例第二方面,本申请实施例第二方面的第二种实施方式中,所述程序模块实体对所述目标函数执行钩子函数Hook操作包括:通过调用函数GetModuleHandle()获取所述目标函数的起始地址,并根据所述目标函数的起始地址确定所述目标函数的真实内存地址;通过调用函数DetourTransactionBegin()执行准备操作,所述准备操作表示准备对所述目标函数执行所述Hook操作,并通过调用函数DetourUpdateThread()更新当前线程;通过调用函数DetourAttach()对所述目标函数执行所述Hook操作,所述函数DetourAttach()的输入参数包括所述目标函数的真实内存地址和监控函数watchfun,所述监控函数watchfun用于记录所述调用次数和调用顺序。
本申请实施例第三方面提供了一种程序监测服务器,包括:
编码单元,用于对程序模块实体中所有的函数进行编号;
生成单元,用于根据所述程序模块实体的设备标识号和时间戳,生成数字序列;
确定单元,用于根据所述数字序列和所述编号,在所述函数中确定目标函数;
制定单元,用于根据所述目标函数的执行规则,制定预设监测结果,所述执行规则包括所述目标函数的预设执行顺序和预设执行次数;
策略单元,用于生成监测策略,所述监测策略包括监测序列,预设监测结果和监测指令;所述监测序列用于指示程序模块实体确定目标函数,所述监测指令用于指示程序模块实体对所述目标函数进行监测;
发送单元,用于向所述程序模块实体发送所述监测序列和所述监测指令;
接收单元,用于接收所述程序模块实体发送的统计数据,所述统计数据包含所述目标函数的执行顺序和执行次数;
判断单元,用于判断所述统计数据与所述预设监测结果是否一致;
执行单元,用于若所述判断单元判断结果为一致时,确定所述程序模块实体处于正常执行状态;若所述判断单元判断结果为不一致时,确定所述程序模块实体处于异常执行状态。
基于本申请实施例第三方面,本申请实施例第三方面的第一种实施方式中,所述编码单元,具体用于对所述程序模块实体中所有的函数进行分类,分为核心函数与非核心函数;对所述核心函数和所述非核心函数分别进行编号;
所述生成单元,具体用于获取所述程序模块实体的设备标识号,确定所述设备标识号对应的第一字符序列;设置程序模块实体的时间戳,确定所述时间戳对应的第二字符序列;对所述第一字符序列和所述第二字符序列中的字符进行排列组合,生成组合字符数据;对所述组合字符数据进行计算,得到所述数字序列。
本申请实施例第四方面提供了一种程序监测装置,包括:
接收单元,用于接收服务器发送的监测序列和监测指令,所述监测序列用于选择所述程序模块实体包含的函数;
确定单元,用于根据所述监测序列,确定所述程序模块实体中的目标函数;
监测单元,用于根据所述监测指令对所述目标函数进行监测,在预设时间内记录所述目标函数的执行状态,所述执行状态包括所述目标函数的执行顺序和执行次数;
执行单元,用于根据所述执行状态,生成统计数据;
发送单元,用于向服务器发送所述统计数据。
本申请实施例第五方面提供了一种计算机存储介质,所述计算机存储介质中存储有指令,所述指令在计算机上执行时,使得所述计算机执行如权利要求1至7中任一项所述的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
使用本发明,服务器给程序模块实体下发监测策略,程序模块实体根据监测策略确定需要监测的目标函数,并将目标函数的执行情况进行记录生成统计数据上报给服务器,服务器将该统计数据与程序模块实体正常执行的预设监测结果进行对比,判断目标函数是否有异常执行的情况,进而判断出该程序模块实体的函数是否被非法调用,这样可以有效的监测程序模块实体的执行情况,为后续对函数随意滥用情况进行处理提供了前提,提高了程序模块实体上函数使用的安全性和保密性。
附图说明
图1为本申请实施例提供的程序监测方法的一个流程示意图;
图2为本申请实施例提供的程序监测方法的另一个流程示意图;
图3为本申请实施例提供的程序监测服务器的一个结构示意图;
图4为本申请实施例提供的程序监测装置的一个结构示意图。
图5为本申请实施例提供的程序监测服务器的另一结构示意图。
具体实施方式
本申请实施例提供了一种程序监测方法及装置、服务器、计算机存储介质,旨在有效监控算法函数的使用。
请参阅图1,本申请实施例中程序监测方法的一个实施例包括:
101、服务器对程序模块实体中所有的函数进行编号;
在一个具体的实施方式中,服务器对程序模块实体中所有的函数进行编号,服务器可以直接按照程序段次序把所有函数依次进行编号,也可以把所有的函数按照功能以及优先级,分为该程序模块实体的核心函数和非核心函数,然后对核心函数和非核心函数分别进行编号,示例性的,我们可以将核心函数放在一个Core_function列表中,将非核心函数放在一个normal_function列表中,然后分别对其进行编号,实现的算法可以是:
非核心函数normal_function列表:
利用上述算法功能,我们对程序模块实体的函数进行了编号,其中所包含的核心函数和非核心函数的编号不一样,并且每个函数的编号都是唯一的,使用编号代替函数名称,使得该监控策略更具有保密性和隐蔽性,使得识别和破解该监控策略的难度加大,其中,服务器可以将函数的编号和真实函数名称的对应关系进行存储与传输。
102、服务器根据所述程序模块实体的设备标识号和时间戳,生成数字序列;
可选的,所述根据程序模块实体的设备标识号和时间戳,生成数字序列,包括:所述服务器获取所述程序模块实体的设备标识号,确定所述设备标识号对应的第一字符序列;所述服务器设置程序模块实体的时间戳,确定所述时间戳对应的第二字符序列;所述服务器对所述第一字符序列和所述第二字符序列中的字符进行排列组合,生成组合字符数据;所述服务器对所述组合字符数据进行计算,得到所述数字序列。
在一个可选的实施方式中,所述服务器根据所述程序模块实体的设备标识号和时间戳,生成数字序列,该数字序列用于和函数的编号进行对比来确定需要监控的目标函数。如果对于所有的程序模块实体都使用一套监控策略,那么该监控策略一旦被破解,然后再针对该监控策略制定出一套反监控的方法,就无法对非法调用产生制约功能,因此应该尽可能多的指定监控策略,对每一个程序模块实体在不同的时刻,都制定出不同的监测策略,这样更加提高监测的力度,因此需要不断变化需要监测的目标函数,针对不同的用户不同的时间来随时变化监测的对象。
可选的,可以随机产生一个数字序列,利用该数字序列和函数的编号来进行需要监控的目标函数的挑选,随机的方法可以是将程序模块实体的设备标识号对应的字符序列和服务器设置的时间戳对应的第二字符序列进行排列组合,生成一个组合字符数据,再对所述组合字符数据进行计算,得到一个数字序列,具体的实现方式可以是:
首先获取该程序模块实体的名称Core_module_name,例如当客户端登陆时,可以获取该用户的设备唯一ID号Deviceid,基于用户的唯一ID号userid和当前时间戳timestamp,将上述数据进行组合:
Seed=Core_module_name+Deviceid+userid+timestamp;
这样就将上述数据组合后得到了一个原始的种子数据seed,该种子数据seed就可以作为数字序列。
具体的,再通过下述公式对种子数据来进行HASH计算:
Hash_num=(strlen(Core_module_name)^P+strlen(Deviceid)^Q)/(strlen(userid)*M)%HASH_SUM;
其中,HASH_SUM为hash算法的个数,strlen(Core_module_name)为模块名称的长度,且由于Q的重要性高于P,故设置Q>P,且M<=P+Q。
例如,可设置Q=3,P=2,M=5,即:
Hash_num=(strlen(Core_module_name)^2+strlen(Deviceid)^3)/(strlen(userid)*5)%HASH_SUM;
通过上述公式,将程序模块实体的名称的长度、用户的设备唯一ID号,和用户的唯一ID号进行组合,将种子数据变得更为复杂,对该种子数据进行HASH计算让数据编程固定长度的数据,保障数据不易被第三方猜测到,增强了数据了可靠性及安全性。
示例性的,由于userid的长度是最小的,则可以将其作为分母并乘以一个系数5,然后分子则使用模块名称的长度Core_module_name的平方和设备长度的立方之和做为分子;然后对得到结果求余数得到最终需要hash计算的个数。
假设计算的Hash_num为4,则:
Hash1=RSHash(Seed);使用RSHASH来对seed进行计算得到hash1;
Hash2=ELFHash(Seed);使用ELFHASH来对seed进行计算得到hash2;
Hash3=BKDRHash(Seed);使用BKDRHash来对seed进行计算得到hash3;
Hash4=DJBHash(Seed);使用DJBHash来对seed进行计算得到hash4;
得到了hash算法的对种子生成部分hash后,接下来需要生成最终的用于生成策略的种子。上述得到多个hash后,依据比例系数来取每个hash的数据,得到最终的种子数据16位长度的字符串,可以对每个hash取不同的比例系数,使其达到不均衡的分布结果并且数据不具有规律性,从而使得算法更为复杂。
Seed_key=hash1[x1,y1]+hash2[x2,y2]+hash3[x3,y3]+hash4[x4,y4];
具体的,还可以使用其他非线性算法获得种子数据,使得算法更加复杂,数字序列更加随机无规律性,这样更加难以识别与破解,算法的安全性更高。
103、服务器根据所述数字序列和所述编号,在所述函数中确定目标函数;
在一个可选的实施方式中,服务器根据所述数字序列和所述编号,在所述函数中确定所述目标函数,包括:所述服务器对所述数字序列进行拆分,计算得到目标数字;所述服务器识别所述目标数字,确定所述目标数字对应的所述目标函数,其中,所述目标数字与所述目标函数的编号相同。
其中,在获取到数字序列之后,就需要根据数字序列来确定目标函数,然后根据确定好的目标函数来指定监测序列,具体的实现方式可以是:利用上述例子中生成的检测序列种子数据Seed_key,如果该种子数据Seed_key有16位字符,则可以使用前6位字符用于确定核心函数序列,使用后面的10位字符用于确定非核心函数。
其中,可以利用Core_fucntion_check{Seed_key[0]}函数对该种子数据Seed_key进行拆分,可以将此数值拆分成多个素数,每个素数对应于核心函数的编号,还可以拆分成最小力度的乘积和,每个乘积和则是对应于核心函数的编号。
而对于非核心函数的生成序列则可以使用公式斐波那契数列来生成非核心函数的函数序列。对于10位字符的数值来计算出其斐波那契数列的所有子项的去重集合,取最靠近的整数最为最终我们选择的斐波那契数列的最终结果数据,每一个数值则对应于函数的编号。
对函数按照重要性程度对其进行划分,分为核心函数与非核心函数,使得监控的对象更加具有针对性,更有效的对核心函数进行监督,同时,核心函数与非核心函数,使用不同的选择方式,使得算法生成监测序列难度更大,更加不容易被识别,安全性更高。
104、服务器根据所述目标函数的执行规则,制定预设监测结果,所述执行规则包括所述目标函数的预设执行顺序和预设执行次数;
当目标函数确定之后,需要根据程序模块实体原始运行方式,来确定程序模块实体未被非法调用,正常执行时,目标函数的执行规则和执行次数,然后指定预设监测结果,用于与监测后的统计数据进行对比,发现实际执行的程序模块是否出现异常。
105、服务器生成监测策略;
其中,监测策略包括监测序列,预设监测结果和监测指令;所述监测序列用于指示程序模块实体确定目标函数,所述监测指令用于指示程序模块实体对所述目标函数进行监测。
服务器可以针对程序模块实体制定出多种监控策略,提供多种个性化监控方案,其中,上述监控序列可以是服务器选择的需要监控的目标函数表格,例如,程序模块实体上集成有A函数,B函数,C函数,D函数。其中,A函数、B函数是该程序模块实体的核心函数,C函数、D函数是起辅助功能的非核心函数,那么,服务器可以选择监控A函数,B函数,C函数,用上述三个函数的标识组成监控序列,用于指示程序模块实体对上述三个函数进行监控。
而预设监测结果则是基于监控序列产生的一个用于对比的预设结果,在上述例子中,当服务器选择对A函数,B函数,C函数进行监控,如果根据如果该程序模块实体的执行规则得知该程序模块实体正常被使用时,B函数先执行,C函数执行2次之后再执行A函数,那么根据这个执行规则来指定预设监测结果,预设监测结果可以是:B函数先执行ZHIHOU C函数执行2次,然后再执行A函数。当该程序模块实体在实际应用后,对其中的A函数,B函数,C函数执行情况进行监测,如果三个函数的执行顺序和执行次数和预设监测结果一值,则说明该程序模块实体中的函数未被非法调用。
监控指令是用于指示程序模块实体对其函数进行监控的指令,其可以是监控策略信息中的一个标识,也可以是一个单独的指示信息,存在的方式具体不做限定。
步骤106,服务器向所述程序模块实体发送所述监测序列和所述监测指令;
服务器确定好监测策略和用于对比的预设监测结果之后,就通知程序模块实体对需要监测的目标模块进行监测,程序模块实体根据监测序列来确定监测对象,收到该检测指令之后就开始进行监测,而预设监测结果可以不发送给程序模块实体。
监测序列可以是一系列函数的编号,使用编号而不使用函数名称的目的是为了函数的保密和隐蔽性,由于在服务器侧有函数的编号和真实函数模块的具体名称对应表格,该方法可以直接利用此表格确定需要监控的函数,使得监控算法保密性更高,即便该监控方法程序被查看,也很难获知监控的具体对象,更加难以破解该监控程序。
步骤107,服务器接收程序模块实体发送的统计数据,所述统计数据包含所述目标函数的执行顺序和执行次数;
程序模块实体根据监测序列对目标函数进行监测,对目标函数的执行顺序和执行次数进行记录,根据记录的接收生成一个监测统计结果,再将该结果发送至服务器。
具体的,程序模块实体可以在预设时间内,对目标函数进行监测,程序模块实体可以预设时间周期,以周期为一个循环,对其目标函数进行监测,然后以一个周期为单位,生成监测统计结果,在下一个周期来临之前,先对上一个周期的监测结果进行清空,然后再进行记录,这样,可以保证程序模块实体每次被调用,都能重新进行统计,保证了监测统计结果的准确性。
步骤108,服务器判断所述统计数据与所述预设监测结果是否一致;若一致,则执行步骤109,若不一致,则执行步骤110。
步骤109,所述服务器确定所述程序模块实体处于正常执行状态;
由于预设监测结果是按照程序模块实体正常运行的状态生成的,当监控后记录的统计数据和预设监测结果一样时,说明程序模块实体的函数未被非法调用,而是按照既定的算法顺序在执行,所以此时,程序模块实体处于正常执行状态。
步骤110,则所述服务器确定所述程序模块实体处于异常执行状态。
在一个可选的实施方式中,当服务器确定程序模块实体处于异常执行状态,说明程序模块实体被非法调用,那么就需要对这种现象进行处理,处理的方法具体可以为服务器对所述程序模块实体执行账号查封,或者对所述程序模块实体执行函数停用。
请参阅图2,本申请实施例中程序监测方法的一个实施例包括:
步骤201、程序模块实体接收服务器发送的监测序列和监测指令,所述监测序列用于选择所述程序模块实体包含的函数;
程序模块实体根据监测序列来确定哪些函数需要被监测,即确定需要监测的目标函数。该监测序列是由服务器下发给程序模块实体的,监测序列可以是一系列函数的编号,使用编号而不使用函数名称的目的是为了函数的保密和隐蔽性,由于在服务器侧有函数的编号和真实函数模块的具体名称对应表格,该方法可以直接利用此表格确定需要监控的函数,使得监控算法保密性更高,即便该监控方法程序被查看,也很难获知监控的具体对象,更加难以破解该监控程序。
步骤202、程序模块实体根据所述监测序列,确定所述程序模块实体中的目标函数;
服务器可以将函数标号与函数名称的对应关系表下发给程序模块实体,程序模块实体根据对应关系表,查找需要监测的目标函数。
步骤203、所述程序模块实体根据所述监测指令对所述目标函数进行监测,在预设时间内记录所述目标函数的执行状态,所述执行状态包括所述目标函数的执行顺序和执行次数;
在一个可选的实施方式中,所述程序模块实体根据所述监测指令对所述目标函数进行监测,包括:所述程序模块实体对所述目标函数执行钩子函数Hook操作;所述程序模块实体监测所述钩子函数Hook的执行函数在所述预设时间内的执行结果;所述在预设时间内记录所述目标函数的执行状态,包括:所述程序模块建立所述目标函数的记录链表;所述程序模块根据所述执行结果,确定所述目标函数的所述执行顺序和执行次数;所述程序模块将所述执行顺序的和执行次数,记录在所述记录链表中。
钩子函数Hook是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理钩子函数Hook的执行函数。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,将其挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也即对所述进行钩子函数Hook处理后,所有的函数在被执行前,先要执行钩子函数Hook的执行函数,再执行目标函数,这样就无需监测每一个目标函数的执行情况,而只需监测Hook的执行函数的执行情况,根据该执行函数的执行来统计每一个目标函数的执行顺序和执行次数,减少了监测对象的个数,提高了监测效率。
具体的实现方式可以如下所述,首先根据下发的函数检测序列来对每个函数进行hook函数操作:
通过对所有函数进行Hook,那么每个函数开始执行时都会执行的watchfun监控函数,通过该监控函数watchfun,可以记录每个函数的调用次数和调用顺序,从而得到了依据下发的监测策略得到一个函数实际执行的执行次数和调用顺序,因此可以根据该函数的执行次数和调用顺序判断是否存在异常执行。具体实现如下:
首先可以定义一个链表来存储检测序列的函数调用顺序和执行次数。对于每一个函数调用则可以记录下函数调用的次数和顺序,然后使用一个结构信息来存储每一次的函数调用。
Strcut funccallinfo{
long FunctionNo;//函数的对应编号。
long functionseq;//函数的调用序号。
}
步骤204、所述程序模块实体根据所述执行状态,生成统计数据;
步骤205、所述程序模块实体向服务器发送所述统计数据。
本发明实施例,服务器给程序模块实体下发监测策略,程序模块实体根据监测策略确定需要监测的目标函数,并将目标函数的执行情况进行记录生成统计数据上报给服务器,服务器将该统计数据与程序模块实体正常执行的预设监测结果进行对比,判断目标函数是否有异常执行的情况,进而判断出该程序模块实体的函数是否被非法调用,这样可以有效的监测程序模块实体的执行情况,为后续对函数随意滥用情况进行处理提供了前提,提高了程序模块实体上函数使用的安全性和保密性。
上面对本申请实施例中的业务处理方法进行了描述,下面对本申请实施例中的程序监测服务器进行描述,请参阅图3,本申请实施例中程序监测服务器一个实施例包括:
编码单元301,用于对程序模块实体中所有的函数进行编号;
生成单元302,用于根据所述程序模块实体的设备标识号和时间戳,生成数字序列;
确定单元303,用于根据所述数字序列和所述编号,在所述函数中确定目标函数;
制定单元304,用于根据所述目标函数的执行规则,制定预设监测结果,所述执行规则包括所述目标函数的预设执行顺序和预设执行次数;
策略单元305,用于生成监测策略,所述监测策略包括监测序列,预设监测结果和监测指令;所述监测序列用于指示程序模块实体确定目标函数,所述监测指令用于指示程序模块实体对所述目标函数进行监测;
发送单元306,用于向所述程序模块实体发送所述监测序列和所述监测指令;
接收单元307,用于接收所述程序模块实体发送的统计数据,所述统计数据包含所述目标函数的执行顺序和执行次数;
判断单元308,用于判断所述统计数据与所述预设监测结果是否一致;
执行单元309,用于若所述判断单元判断结果为一致时,确定所述程序模块实体处于正常执行状态;若所述判断单元判断结果为不一致时,确定所述程序模块实体处于异常执行状态。
在一个可选的实施方式中,编码单元301,具体用于对所述程序模块实体中所有的函数进行分类,分为核心函数与非核心函数;对所述核心函数和所述非核心函数分别进行编号;
生成单元302具体用于获取所述程序模块实体的设备标识号,确定所述设备标识号对应的第一字符序列;设置程序模块实体的时间戳,确定所述时间戳对应的第二字符序列;对所述第一字符序列和所述第二字符序列中的字符进行排列组合,生成组合字符数据;对所述组合字符数据进行计算,得到所述数字序列。
在一个可选的实施方式中,确定单元303具体用于对所述数字序列进行拆分,计算得到目标数字;识别所述目标数字,根据预设规则将所述目标数字划分为第一目标数字与第二目标数字;根据所述第一目标数字在所述核心函数中确定第一目标函数,根据第二目标数字在所述非核心函数中确定第二目标函数,所述目标函数包括所述第一目标函数和所述第二目标函数。
在一个可选的实施方式中,所述生成单元302,具体用于根据预设公式确定散列函数HASH运算的次数;根据所述次数,对所述组合字符数据进行多次HASH值计算,得到至少两个HASH目标序列;确定比例系数;根据所述比例系数对所述至少两个HASH目标序列进行运算,得到所述数字序列。
在一个可选的实施方式中,所述生成单元302,具体用于通过以下公式确定所述散列函数HASH运算的次数:Hash_num=(strlen(Core_module_name)^P+strlen(Deviceid)^Q)/(strlen(userid)*M)%HASH_SUM;所述Hash_num为所述散列函数HASH运算的次数,所述strlen(Core_module_name)为所述程序模块实体的名称的长度,所述strlen(Deviceid)为用户的设备唯一ID号的长度,所述strlen(userid)为用户的唯一ID号的长度,所述Q>P,所述M<=P+Q。
请参阅图4,本申请实施例中程序监测装置包括:
接收单元401,用于接收服务器发送的监测序列和监测指令,所述监测序列用于选择所述程序模块实体包含的函数;
确定单元402,用于根据所述监测序列,确定所述程序模块实体中的目标函数;
监测单元403,用于根据所述监测指令对所述目标函数进行监测,在预设时间内记录所述目标函数的执行状态,所述执行状态包括所述目标函数的执行顺序和执行次数;
执行单元404,用于根据所述执行状态,生成统计数据;
发送单元405,用于向服务器发送所述统计数据。
在一个可选的实施方式中,所述监测单元403,具体用于:对所述目标函数执行钩子函数Hook操作;监测所述钩子函数Hook的执行函数在所述预设时间内的执行结果;建立所述目标函数的记录链表;根据所述执行结果,确定所述目标函数的所述执行顺序和执行次数;将所述执行顺序的和执行次数,记录在所述记录链表中。
在一个可选的实施方式中,所述监测单元403,具体用于:通过调用函数GetModuleHandle()获取所述目标函数的起始地址,并根据所述目标函数的起始地址确定所述目标函数的真实内存地址;通过调用函数DetourTransactionBegin()执行准备操作,所述准备操作表示准备对所述目标函数执行所述Hook操作,并通过调用函数DetourUpdateThread()更新当前线程;通过调用函数DetourAttach()对所述目标函数执行所述Hook操作,所述函数DetourAttach()的输入参数包括所述目标函数的真实内存地址和监控函数watchfun,所述监控函数watchfun用于记录所述目标函数的调用次数和调用顺序。
本申请实施例还提供了一种计算机存储介质,所述计算机存储介质中存储有指令,所述指令在计算机上执行时,使得所述计算机执行如权利要求1至7中任一项所述的方法。
下面对本申请实施例中的程序检测服务器进行描述,请参阅图5,本申请实施例中融合业务服务器一个实施例包括:
该程序检测服务器500可以包括一个或一个以上中央处理器(centralprocessing units,CPU)501和存储器505,该存储器505中存储有一个或一个以上的应用程序或数据。
其中,存储器505可以是易失性存储或持久存储。存储在存储器505的程序可以包括一个或一个以上模块,每个模块可以包括对业务服务器中的一系列指令操作。更进一步地,中央处理器501可以设置为与存储器505通信,在业务服务器500上执行存储器505中的一系列指令操作。
程序监测服务器500还可以包括一个或一个以上电源502,一个或一个以上有线或无线网络接口503,一个或一个以上输入输出接口504,和/或,一个或一个以上操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等。
该中央处理器501可以执行前述图1所示实施例中融合业务服务器所执行的操作,具体此处不再赘述。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,该单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,read-only memory)、随机存取存储器(RAM,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (8)
1.一种程序监测方法,其特征在于,所述方法包括:
服务器对程序模块实体中所有的函数进行编号;
所述服务器根据所述程序模块实体的设备标识号和时间戳,生成数字序列;
所述服务器根据所述数字序列和所述编号,在所述函数中确定目标函数;
所述服务器根据所述目标函数的执行规则,制定预设监测结果,所述执行规则包括所述目标函数的预设执行顺序和预设执行次数;
所述服务器生成监测策略,所述监测策略包括监测序列,预设监测结果和监测指令;所述监测序列用于指示程序模块实体确定所述目标函数,所述监测指令用于指示程序模块实体对所述目标函数进行监测;
所述服务器向所述程序模块实体发送所述监测序列和所述监测指令;
所述服务器接收程序模块实体发送的统计数据,所述统计数据包含所述目标函数的执行顺序和执行次数;
所述服务器判断所述统计数据与所述预设监测结果是否一致;
若一致,则所述服务器确定所述程序模块实体处于正常执行状态;
若不一致,则所述服务器确定所述程序模块实体处于异常执行状态;
所述服务器对程序模块实体中所有的函数进行编号,包括:
所述服务器对所述程序模块实体中所有的函数进行分类,分为核心函数与非核心函数;
所述服务器对所述核心函数和所述非核心函数分别进行编号;
所述服务器根据所述程序模块实体的设备标识号和时间戳,生成数字序列,包括:
所述服务器获取所述程序模块实体的设备标识号,确定所述设备标识号对应的第一字符序列;
所述服务器设置程序模块实体的时间戳,确定所述时间戳对应的第二字符序列;
所述服务器对所述第一字符序列和所述第二字符序列中的字符进行排列组合,生成组合字符数据;
所述服务器对所述组合字符数据进行计算,得到所述数字序列。
2.根据权利要求1中所述的方法,其特征在于,所述服务器根据所述数字序列和所述编号,在所述函数中确定所述目标函数,包括:
所述服务器对所述数字序列进行拆分,计算得到目标数字;
所述服务器识别所述目标数字,根据预设规则将所述目标数字划分为第一目标数字与第二目标数字;
所述服务器根据所述第一目标数字在所述核心函数中确定第一目标函数,根据第二目标数字在所述非核心函数中确定第二目标函数,所述目标函数包括所述第一目标函数和所述第二目标函数。
3.根据权利要求1或2任一项所述的方法,其特征在于,所述服务器对所述组合字符数据进行计算,得到所述数字序列,包括:
所述服务器对根据预设公式确定散列函数HASH运算的次数;
所述服务器根据所述次数,对所述组合字符数据进行多次HASH值计算,得到至少两个HASH目标序列;
所述服务器确定比例系数;
所述服务器根据所述比例系数对所述至少两个HASH目标序列进行运算,得到所述数字序列。
4.根据权利要求3所述的方法,其特征在于,所述服务器对根据预设公式确定散列函数HASH运算的次数包括:
通过以下公式确定所述散列函数HASH运算的次数:
Hash_num=(strlen(Core_module_name)^P+strlen(Deviceid)^Q)/(strlen(userid)*M)%HASH_SUM;
所述Hash_num为所述散列函数HASH运算的次数,所述strlen(Core_module_name)为所述程序模块实体的名称的长度,所述strlen(Deviceid)为用户的设备唯一ID号的长度,所述strlen(userid)为用户的唯一ID号的长度,所述Q>P,所述M<=P+Q;所述P和所述Q为次方的数值;所述M为用户的唯一ID号的长度系数。
5.一种程序监测方法,其特征在于,所述方法包括:
程序模块实体接收服务器发送的监测序列和监测指令,所述监测序列用于选择所述程序模块实体包含的函数;
所述程序模块实体根据所述监测序列,确定所述程序模块实体中的目标函数;
所述程序模块实体根据所述监测指令对所述目标函数进行监测,在预设时间内记录所述目标函数的执行状态,所述执行状态包括所述目标函数的执行顺序和执行次数;
所述程序模块实体根据所述执行状态,生成统计数据并向服务器发送所述统计数据;
所述程序模块实体根据所述监测指令对所述目标函数进行监测,包括:
所述程序模块实体对所述目标函数执行钩子函数Hook操作;
所述程序模块实体监测所述钩子函数Hook的执行函数在所述预设时间内的执行结果;
所述在预设时间内记录所述目标函数的执行状态,包括:
所述程序模块建立所述目标函数的记录链表;
所述程序模块根据所述执行结果,确定所述目标函数的所述执行顺序和执行次数;
所述程序模块将所述执行顺序的和执行次数,记录在所述记录链表中。
6.根据权利要求5所述的方法,其特征在于,所述程序模块实体对所述目标函数执行钩子函数Hook操作包括:
通过调用函数GetModuleHandle()获取所述目标函数的起始地址,并根据所述目标函数的起始地址确定所述目标函数的真实内存地址;
通过调用函数DetourTransactionBegin()执行准备操作,所述准备操作表示准备对所述目标函数执行所述Hook操作,并通过调用函数DetourUpdateThread()更新当前线程;
通过调用函数DetourAttach()对所述目标函数执行所述Hook操作,所述函数DetourAttach()的输入参数包括所述目标函数的真实内存地址和监控函数watchfun,所述监控函数watchfun用于记录所述目标函数的调用次数和调用顺序。
7.一种程序监测服务器,其特征在于,包括:
编码单元,用于对程序模块实体中所有的函数进行编号;
生成单元,用于根据所述程序模块实体的设备标识号和时间戳,生成数字序列;
确定单元,用于根据所述数字序列和所述编号,在所述函数中确定目标函数;
制定单元,用于根据所述目标函数的执行规则,制定预设监测结果,所述执行规则包括所述目标函数的预设执行顺序和预设执行次数;
策略单元,用于生成监测策略,所述监测策略包括监测序列,预设监测结果和监测指令;所述监测序列用于指示程序模块实体确定目标函数,所述监测指令用于指示程序模块实体对所述目标函数进行监测;
发送单元,用于向所述程序模块实体发送所述监测序列和所述监测指令;
接收单元,用于接收所述程序模块实体发送的统计数据,所述统计数据包含所述目标函数的执行顺序和执行次数;
判断单元,用于判断所述统计数据与所述预设监测结果是否一致;
执行单元,用于若所述判断单元判断结果为一致时,确定所述程序模块实体处于正常执行状态;若所述判断单元判断结果为不一致时,确定所述程序模块实体处于异常执行状态;
所述编码单元还用于:对所述程序模块实体中所有的函数进行分类,分为核心函数与非核心函数;对所述核心函数和所述非核心函数分别进行编号;根据所述程序模块实体的设备标识号和时间戳,生成数字序列,包括:获取所述程序模块实体的设备标识号,确定所述设备标识号对应的第一字符序列;设置程序模块实体的时间戳,确定所述时间戳对应的第二字符序列;对所述第一字符序列和所述第二字符序列中的字符进行排列组合,生成组合字符数据;对所述组合字符数据进行计算,得到所述数字序列。
8.一种程序监测装置,其特征在于,所述装置包括:
接收单元,用于接收服务器发送的监测序列和监测指令,所述监测序列用于选择程序模块实体包含的函数;
确定单元,用于根据所述监测序列,确定所述程序模块实体中的目标函数;
监测单元,用于根据所述监测指令对所述目标函数进行监测,在预设时间内记录所述目标函数的执行状态,所述执行状态包括所述目标函数的执行顺序和执行次数;
执行单元,用于根据所述执行状态,生成统计数据;
发送单元,用于向服务器发送所述统计数据;
所述监测单元还用于:对所述目标函数执行钩子函数Hook操作;监测所述钩子函数Hook的执行函数在所述预设时间内的执行结果;所述在预设时间内记录所述目标函数的执行状态,包括:建立所述目标函数的记录链表;根据所述执行结果,确定所述目标函数的所述执行顺序和执行次数;将所述执行顺序的和执行次数,记录在所述记录链表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910966328.1A CN112650640B (zh) | 2019-10-12 | 2019-10-12 | 程序监测方法及装置、服务器、计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910966328.1A CN112650640B (zh) | 2019-10-12 | 2019-10-12 | 程序监测方法及装置、服务器、计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112650640A CN112650640A (zh) | 2021-04-13 |
CN112650640B true CN112650640B (zh) | 2022-09-20 |
Family
ID=75343646
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910966328.1A Active CN112650640B (zh) | 2019-10-12 | 2019-10-12 | 程序监测方法及装置、服务器、计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112650640B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113507487B (zh) * | 2021-09-06 | 2021-12-24 | 蜂巢能源科技有限公司 | Can通信安全的检测方法、装置、电子设备及车辆 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108933802A (zh) * | 2017-05-26 | 2018-12-04 | 北京京东尚科信息技术有限公司 | 用于监控操作的方法和装置 |
CN109977633A (zh) * | 2019-03-28 | 2019-07-05 | 武汉斗鱼鱼乐网络科技有限公司 | 一种程序保护方法及相关装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100095281A1 (en) * | 2008-10-14 | 2010-04-15 | Riverside Research Institute | Internal Function Debugger |
US9792433B2 (en) * | 2013-12-30 | 2017-10-17 | Beijing Qihoo Technology Company Limited | Method and device for detecting malicious code in an intelligent terminal |
-
2019
- 2019-10-12 CN CN201910966328.1A patent/CN112650640B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108933802A (zh) * | 2017-05-26 | 2018-12-04 | 北京京东尚科信息技术有限公司 | 用于监控操作的方法和装置 |
CN109977633A (zh) * | 2019-03-28 | 2019-07-05 | 武汉斗鱼鱼乐网络科技有限公司 | 一种程序保护方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112650640A (zh) | 2021-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11487880B2 (en) | Inferring security incidents from observational data | |
CN108073821B (zh) | 数据安全处理方法及装置 | |
CN112787992A (zh) | 一种敏感数据的检测与防护的方法、装置、设备和介质 | |
JP7069399B2 (ja) | コンピュータセキュリティインシデントを報告するためのシステムおよび方法 | |
GB2598214A (en) | System and method for SIEM rule sorting and conditional execution | |
JP2023550974A (ja) | イメージ基盤悪性コード検知方法および装置とこれを利用する人工知能基盤エンドポイント脅威検知および対応システム | |
CN112995236A (zh) | 一种物联网设备安全管控方法、装置和系统 | |
CN114564757A (zh) | 一种区块链的数据审计方法、装置、设备及可读存储介质 | |
CN112650640B (zh) | 程序监测方法及装置、服务器、计算机存储介质 | |
CN113051573A (zh) | 一种基于大数据的主机安全实时监控警报系统 | |
CN112671767A (zh) | 一种基于告警数据分析的安全事件预警方法及装置 | |
EP3414683B1 (en) | Comparison of behavioral populations for security and compliance monitoring | |
US10282239B2 (en) | Monitoring method | |
CN107885634B (zh) | 监控中异常信息的处理方法和装置 | |
CN115766215A (zh) | 一种异常流量检测方法及装置 | |
CN110378120A (zh) | 应用程序接口攻击检测方法、装置以及可读存储介质 | |
CN114610560B (zh) | 系统异常监控方法、装置和存储介质 | |
CN110958267B (zh) | 一种虚拟网络内部威胁行为的监测方法及系统 | |
CN113722712A (zh) | 一种基于hook的程序恶意行为的检测方法及相关装置 | |
CN113992355A (zh) | 一种攻击预测方法、装置、设备及机器可读存储介质 | |
JP2023523079A (ja) | 行動予測モデルを用いたエンドポイントセキュリティ | |
CN112631551A (zh) | 随机数生成方法、装置、电子设备及存储介质 | |
KR102541888B1 (ko) | 이미지 기반 악성코드 탐지 방법 및 장치와 이를 이용하는 인공지능 기반 엔드포인트 위협탐지 및 대응 시스템 | |
CN109284206A (zh) | 一种基于区块链的数据库备份方法及相关设备 | |
US11089037B2 (en) | Method for automatically retrieving workflow and method for detecting intrusion in distributed system |
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 |