CN115080426A - 程序文件的检测方法及装置、存储介质和电子设备 - Google Patents
程序文件的检测方法及装置、存储介质和电子设备 Download PDFInfo
- Publication number
- CN115080426A CN115080426A CN202210742716.3A CN202210742716A CN115080426A CN 115080426 A CN115080426 A CN 115080426A CN 202210742716 A CN202210742716 A CN 202210742716A CN 115080426 A CN115080426 A CN 115080426A
- Authority
- CN
- China
- Prior art keywords
- program file
- target
- file
- source program
- unit
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种程序文件的检测方法及装置、存储介质和电子设备,涉及金融科技领域。该方法包括:获取目标源程序文件;对目标源程序文件进行插桩处理,得到目标程序文件;通过junit测试案例运行目标程序文件,得到运行目标程序文件的监控日志;对监控日志进行分析,得到junit断言结果,以完成对目标源程序文件的检测。通过本申请,解决了相关技术中采用juint测试方法检测程序文件时,难以定位导致程序文件被篡改的代码,导致检测效率较低的问题。
Description
技术领域
本申请涉及金融科技领域,具体而言,涉及一种程序文件的检测方法及装置、存储介质和电子设备。
背景技术
随着移动化与互联网化的不断发展,越来越多的互联网金融类业务已经尝试使用微服务架构、分布式技术、DevOps框架进行应用开发与维护。同时,在企业级应用开发的过程中,迭代开发是很常见的开发模式。而且,为保持高质量的迭代开发,我们通常使用junit测试用例完成对代码逻辑的覆盖测试,并输出对应的测试用例的运行结果。
而目前相关技术中,在采用junit测试方法时,只能单一的通过断言来验证运行结果是否和预期一致。并且如果要对所有核心业务数据进行断言,需要开发人员人工去梳理核心业务数据,这样不仅费时费力而且还容易造成遗漏。另外,当某个业务数据断言与预期不符时,开发人员只能通过一行一行的查看代码的方式,并结合断点测试方法,人工的一步一步的去定位哪一行代码对该业务数据进行了意外篡改,而导致了最后结果与预期不符。因此,该定位的整个过程比较机械化,如果全部由开发人员进行逐行核对,从而去定位由于意外数据篡改而造成的数据污染问题,不仅效率很低而且费时费力。
针对相关技术中采用juint测试方法检测程序文件时,难以定位导致程序文件被篡改的代码,导致检测效率较低的问题,目前尚未提出有效的解决方案。
发明内容
本申请的主要目的在于提供一种程序文件的检测方法及装置、存储介质和电子设备,以解决相关技术中采用juint测试方法检测程序文件时,难以定位导致程序文件被篡改的代码,导致检测效率较低的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种程序文件的检测方法。该方法包括:获取目标源程序文件;对所述目标源程序文件进行插桩处理,得到目标程序文件;通过junit测试案例运行所述目标程序文件,得到运行所述目标程序文件的监控日志;对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测。
进一步地,对所述目标源程序文件进行插桩处理,得到目标程序文件包括:确定所述目标源程序文件的目标字段;基于所述目标源程序文件的目标字段,解析所述目标源程序文件的字节码指令,得到解析结果;依据所述解析结果,向所述目标源程序文件中插入监听代码,得到目标程序文件。
进一步地,对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测包括:若所述监控日志中表征没有对除所述目标源程序文件之外的程序文件进行目标操作,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;若所述监控日志中有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之后,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;若所述监控日志中表征有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之前,则指示所述junit断言结果为失败,所述目标源程序文件未通过检测。
进一步地,在对所述监控日志进行分析,得到junit断言结果之后,所述方法还包括:若所述junit断言结果为失败,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之前,则判定为第一类预警,并向目标对象发送所述第一类预警对应的代码在所述目标源程序文件中的位置;若所述junit断言结果为成功,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之后,则判定为第二类预警,并向目标对象发送所述第二类预警对应的代码在所述目标源程序文件中的位置。
进一步地,在获取目标源程序文件之前,所述方法还包括:获取目标代理程序文件;利用所述目标代理程序文件,拦截所述目标源程序文件。
进一步地,在获取目标代理程序文件之前,所述方法还包括:获取多个代理程序文件;将所述多个代理程序文件进行组合,得到目标文件;配置所述目标代理程序文件在所述目标文件中的路径信息和所述目标文件的路径信息。
进一步地,在对所述目标源程序文件进行插桩处理,得到目标程序文件之后,所述方法还包括:将所述目标程序文件发送给所述junit测试案例;所述junit测试案例接收所述目标程序文件,并运行所述目标程序文件。
为了实现上述目的,根据本申请的另一方面,提供了一种程序文件的检测装置。该装置包括:第一获取单元,用于获取目标源程序文件;第一处理单元,用于对所述目标源程序文件进行插桩处理,得到目标程序文件;第二处理单元,用于通过junit测试案例运行所述目标程序文件,得到运行所述目标程序文件的监控日志;第三处理单元,用于对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测。
进一步地,所述第一处理单元包括:第一确定模块,用于对确定所述目标源程序文件的目标字段;第一解析模块,用于基于所述目标源程序文件的目标字段,解析所述目标源程序文件的字节码指令,得到解析结果;第一插入模块,用于依据所述解析结果,向所述目标源程序文件中插入监听代码,得到目标程序文件。
进一步地,所述第三处理单元包括:第一处理模块,用于若所述监控日志中表征没有对除所述目标源程序文件之外的程序文件进行目标操作,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;第二处理模块,用于若所述监控日志中有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之后,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;第三处理模块,用于若所述监控日志中表征有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之前,则指示所述junit断言结果为失败,所述目标源程序文件未通过检测。
进一步地,所述装置还包括:第四处理单元,用于在对所述监控日志进行分析,得到junit断言结果之后,若所述junit断言结果为失败,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之前,则判定为第一类预警,并向目标对象发送所述第一类预警对应的代码在所述目标源程序文件中的位置;第五处理单元,用于若所述junit断言结果为成功,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之后,则判定为第二类预警,并向目标对象发送所述第二类预警对应的代码在所述目标源程序文件中的位置。
进一步地,所述装置还包括:第二获取单元,用于在获取目标源程序文件之前,获取目标代理程序文件;第一拦截单元,用于利用所述目标代理程序文件,拦截所述目标源程序文件。
进一步地,所述装置还包括:第三获取单元,用于在获取目标代理程序文件之前,获取多个代理程序文件;第一组合单元,用于将所述多个代理程序文件进行组合,得到目标文件;第一配置单元,用于配置所述目标代理程序文件在所述目标文件中的路径信息和所述目标文件的路径信息。
进一步地,所述装置还包括:第一发送单元,用于在对所述目标源程序文件进行插桩处理,得到目标程序文件之后,将所述目标程序文件发送给所述junit测试案例;第六处理单元,用于所述junit测试案例接收所述目标程序文件,并运行所述目标程序文件。
为了实现上述目的,根据本申请的另一方面,提供了一种计算机可读存储介质,所述存储介质包括存储的程序,其中,所述程序执行上述的任意一项所述的程序文件的检测方法。
为了实现上述目的,根据本申请的另一方面,提供了一种电子设备,所述电子设备包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的任意一项所述的程序文件的检测方法。
通过本申请,采用以下步骤:获取目标源程序文件;对目标源程序文件进行插桩处理,得到目标程序文件;通过juint测试案例运行目标程序文件,得到运行目标程序文件的监控日志;对监控日志进行分析,得到juint断言结果,以完成对目标源程序文件的检测,解决了相关技术中采用juint测试方法检测程序文件时,难以定位导致程序文件被篡改的代码,导致检测效率较低的问题。通过juint测试案例运行进行插桩处理后的目标源程序文件,得到监控日志,再对监控日志进行分析,得到juint断言结果,并确定juint断言结果对应的预警和预警对应的代码在目标源程序文件中的位置,从而可以定位导致程序文件被篡改的代码,进而达到了提升检测效率的效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例提供的程序文件的检测方法的流程图;
图2是根据本申请实施例提供的可选的程序文件的检测方法的示意图;
图3是根据本申请实施例提供的程序文件的检测装置的示意图;
图4是根据本申请实施例提供的电子设备的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
下面结合优选的实施步骤对本发明进行说明,图1是根据本申请实施例提供的程序文件的检测方法的流程图,如图1所示,该方法包括如下步骤:
步骤S101,获取目标源程序文件。
例如,上述的目标源程序文件可以为源class(一种文件格式)文件。所以,需要先获取源class文件。
步骤S102,对目标源程序文件进行插桩处理,得到目标程序文件。
例如,对源class文件进行插桩处理,即向源class文件中插入监听代码,得到目标class文件。
步骤S103,通过junit测试案例运行目标程序文件,得到运行目标程序文件的监控日志。
例如,junit测试案例运行目标class文件,在运行过程中,打印监听代码记录的监控日志。
步骤S104,对监控日志进行分析,得到junit断言结果,以完成对目标源程序文件的检测。
例如,对监控日志进行分析,得到junit断言结果,并根据junit断言结果判断目标源程序文件是通过检测。
通过上述的步骤S101至S104,通过juint测试案例运行进行插桩处理后的目标源程序文件,得到监控日志,再对监控日志进行分析,得到juint断言结果,并确定juint断言结果对应的预警和预警对应的代码在目标源程序文件中的位置,从而可以定位导致程序文件被篡改的代码,进而达到了提升检测效率的效果。
可选地,在本申请实施例提供的程序文件的检测方法中,对目标源程序文件进行插桩处理,得到目标程序文件包括:确定目标源程序文件的目标字段;基于目标源程序文件的目标字段,解析目标源程序文件的字节码指令,得到解析结果;依据解析结果,向目标源程序文件中插入监听代码,得到目标程序文件。
例如,被测程序有线程A和线程B两个线程。线程A判断金额amount如果为0,将其赋值为2,最后断言金额是否为2;线程B则是判断金额如果为0,则将其赋值为3。在执行线程A的测试案例时,可以使用Javassist(一个开源的分析、编辑和创建Java字节码的类库)进行字节码分析以及插桩。具体为,被测程序Java源代码经过编译之后,会以class文件的格式在jvm(java virtual machine,java虚拟机)加载运行。在应用Java agent(一种代理程序)对其拦截之后,可以通过Javassist获取其源class文件,并对该class文件进行解析并插桩。另外,class文件是一组以8位字节为基础的二进制流,各个数据项目按照严格顺序紧凑排列在class文件中,且class文件中的fields域保存了当前类的所有成员列表,故可以使用Javassist提供的getDeclaredFields(用于获得某个类的所有声明的字段)方法获取所有成员字段的详细信息。这里通过该方法获取到了被测程序的金额amount字段。而且,Javassist提供的CodeIterator(一种代码迭代器)对象可以检查方法体中的每个字节码指令,通过对字节码指令进行解析,判断对该变量的操作是读操作还是写操作。比如,以线程A的代码为例,当扫描到‘==’操作符时,说明该语句对金额amount字段进行了一次读操作,此时可以使用addMethod(添加方法),增加我们的监听代码,记录该次读操作的具体信息:包括变量名(amount)、读写操作类型(Read)、进程ID(Thread A,线程A)、所属类名以及该指令在源码的代码行(line 1)等信息;当扫描到‘=’操作符、且amount字段在该操作符的左边,说明该语句对金额amount字段进行了一次写操作,此时继续使用addMethod(添加方法),增加我们的监听代码,记录该次写操作的具体信息:包括变量名(amount)、读写操作类型(Write)、进程ID(Thread A,线程A)、所属类名以及该指令在源码的代码行(line 2)等信息。循环源class文件中的每一条指令,按照上述方案,即可在每次读写操作后,增加了我们的监听代码。在向源class文件中插入监听代码之后,得到目标class文件。
通过上述的方案,可以依据字节码指令,快速的对源程序文件进行插桩处理,从而得到插桩后的程序文件。
可选地,在本申请实施例提供的程序文件的检测方法中,对监控日志进行分析,得到junit断言结果,以完成对目标源程序文件的检测包括:若监控日志中表征没有对除目标源程序文件之外的程序文件进行目标操作,则指示junit断言结果为成功,目标源程序文件通过检测;若监控日志中有对除目标源程序文件之外的程序文件进行目标操作,且目标操作在使用junit断言之后,则指示junit断言结果为成功,目标源程序文件通过检测;若监控日志中表征有对除目标源程序文件之外的程序文件进行目标操作,且目标操作在使用junit断言之前,则指示junit断言结果为失败,目标源程序文件未通过检测。
例如,JVM加载目标class文件时,Junit测试案例执行的是进行插桩后的程序文件的代码。而且在实际运行过程中,会打印监听代码记录的监控日志。执行一次被测程序后的监控日志中可以包括的日志文件名,比如amount.log,即代表amount(变量名)的监控日志。另外,监控日志中还可以包括“Read-Thread_A-line_1;”,即代表线程A的第一行代码对amount变量进行了一次读操作。所以,该日志输出的便是amount变量在这次案例执行中的完整读写序列。经过对被测程序的多次运行,收集到多次amount变量的读写序列,并对其进行分析,然后可以得到:当amount变量的读写序列中,没有混入线程B的写操作时,断言会是成功的;当amount变量的读写序列中,有混入线程B的写操作时,并且该写操作在使用线程A的断言之后时,断言也是成功的;当amount变量的读写序列中,有混入线程B的写操作时,并且该写操作在使用线程A的断言之前时,断言就会是失败的。而且,如果junit断言结果为成功,则代表源class文件通过了检测,如果junit断言结果为失败,则代表源class文件未通过检测。
综上所述,通过Junit测试案例多次运行目标class文件,可以得到多次运行的监控日志,并对多次运行的监控日志进行分析,可以准确的得到junit断言结果,并判断程序是否通过检测。
可选地,在本申请实施例提供的程序文件的检测方法中,在对监控日志进行分析,得到junit断言结果之后,该方法还包括:若junit断言结果为失败,且监控日志中表征对除目标源程序文件之外的程序文件的操作在使用junit断言之前,则判定为第一类预警,并向目标对象发送第一类预警对应的代码在目标源程序文件中的位置;若junit断言结果为成功,且监控日志中表征对除目标源程序文件之外的程序文件的操作在使用junit断言之后,则判定为第二类预警,并向目标对象发送第二类预警对应的代码在目标源程序文件中的位置。
例如,进一步对读写序列(监控日志)进行分析,如果断言失败,并且出现Write-Thread_B->Read-Thread_A序列时,则说明变量已经遭到了意外的修改。因此,为了对该类型错误进行识别,可以提供以下两种级别的预警:(1)Error级别:将断言失败,并且出现Write-Thread_B->Read-Thread_A序列的情况归纳为Error级别,且该级别表示变量已经遭到了意外修改,然后再提供对应的序列明细给开发人员,方便开发人员进行定位,确定出现问题的代码在源class文件中的哪一行,并进行修改;(2)Warn级别:将断言成功,但是也出现Read-Thread_A->Write-Thread_B序列的情况归纳为Warn级别,且该级别表示可能出现数据篡改,但未影响断言结果,然后再提供对应的序列给开发人员,由开发人员进行核实。
通过上述的方案,可以自动的分析核心业务数据的读写序列,并识别出业务数据在整个交易流程中的数据流走向,进而可以自动的定位到每次读写对应的代码行。当出现对应级别的预警时,开发人员可以快速定位哪里出现了数据篡改或者识别出可能存在意外篡改的地方,从而进行bug修复。因此,通过上述的方案为开发人员发现问题提供了便利,进而提升了开发人员的研发效率;同时也为项目迭代开发、守护项目代码提供了便利。
可选地,在本申请实施例提供的程序文件的检测方法中,在获取目标源程序文件之前,该方法还包括:获取目标代理程序文件;利用目标代理程序文件,拦截目标源程序文件。
例如,获取Java agent(代理程序),再使用Java agent(代理程序)对源class文件进行动态拦截。
综上所述,通过采用应用代理程序的方式,可以方便的获取到源程序文件。
可选地,在本申请实施例提供的程序文件的检测方法中,在获取目标代理程序文件之前,该方法还包括:获取多个代理程序文件;将多个代理程序文件进行组合,得到目标文件;配置目标代理程序文件在目标文件中的路径信息和目标文件的路径信息。
例如,在使用Java agent(代理程序)拦截源class文件之前,需先通过Java agent构建一个独立于应用程序的代理程序,用来监测和协助运行在JVM上的程序。而且,一个代理程序通常包含三个步骤:(1)设置入口程序:由Java agent代理程序提供通用的程序入口,再通过实现agent类的premain(在程序的main方法之前执行的方法)方法设置入口程序,如可以事先设置premain方法中包括扫描class文件的操作,然后再通过该方法设置入口程序,且该方法会在JVM加载源class文件时被触发;(2)文件打包:将多个Java agent代理程序打包成一个jar文件,并在其中的manifest属性中配置premain方法的路径;(3)配置启动参数:在JVM启动参数中加入-javaagent参数,并指定jar包文件的路径。
通过上述的方案,可以便捷的对代理程序进行配置。
可选地,在本申请实施例提供的程序文件的检测方法中,在对目标源程序文件进行插桩处理,得到目标程序文件之后,该方法还包括:将目标程序文件发送给junit测试案例;junit测试案例接收目标程序文件,并运行目标程序文件。
例如,对源class文件添加完监听代码后,需将插桩后的代码提供给JVM加载。可以使用instrumention.redefineClasses(一种直接把处理结果给JVM的方法)方法,生成目标class文件,来替换源class文件,最后将目标class提供给junit执行。
通过上述的方案,可以将源文件替换为进行插桩后的程序文件,从而可以使juint执行插桩后的程序文件。
可选的程序文件的检测方法的示意图,如图2所示。图2中的(001)为本申请中的一种基于分布式系统数据污染的轻量级插件。通过将其与junit相结合的方式,在执行junit测试案例的时候,动态拦截被测程序的字节码文件,进行插桩植入我们的监控字节码,重新定向成新的字节码文件去跑测试案例。案例执行过程中,输出我们的监控日志,并提供日志分析的功能。
综上,本申请实施例提供的程序文件的检测方法,通过获取目标源程序文件;对目标源程序文件进行插桩处理,得到目标程序文件;通过junit测试案例运行目标程序文件,得到运行目标程序文件的监控日志;对监控日志进行分析,得到junit断言结果,以完成对目标源程序文件的检测,解决了相关技术中采用junit测试方法检测程序文件时,难以定位导致程序文件被篡改的代码,导致检测效率较低的问题。通过juint测试案例运行进行插桩处理后的目标源程序文件,得到监控日志,再对监控日志进行分析,得到juint断言结果,并确定juint断言结果对应的预警和预警对应的代码在目标源程序文件中的位置,从而可以定位导致程序文件被篡改的代码,进而达到了提升检测效率的效果。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例还提供了一种程序文件的检测装置,需要说明的是,本申请实施例的程序文件的检测装置可以用于执行本申请实施例所提供的用于程序文件的检测方法。以下对本申请实施例提供的程序文件的检测装置进行介绍。
图3是根据本申请实施例的程序文件的检测装置的示意图。如图3所示,该装置包括:第一获取单元301、第一处理单元302、第二处理单元303和第三处理单元304。
具体地,第一获取单元301,用于获取目标源程序文件;
第一处理单元302,用于对目标源程序文件进行插桩处理,得到目标程序文件;
第二处理单元303,用于通过junit测试案例运行目标程序文件,得到运行目标程序文件的监控日志;
第三处理单元304,用于对监控日志进行分析,得到junit断言结果,以完成对目标源程序文件的检测。
综上,本申请实施例提供的程序文件的检测装置,通过第一获取单元301获取目标源程序文件;第一处理单元302对目标源程序文件进行插桩处理,得到目标程序文件;第二处理单元303通过junit测试案例运行目标程序文件,得到运行目标程序文件的监控日志;第三处理单元304对监控日志进行分析,得到junit断言结果,以完成对目标源程序文件的检测,解决了相关技术中采用JUINT测试方法检测程序文件时,难以定位导致程序文件被篡改的代码,导致检测效率较低的问题,通过juint测试案例运行进行插桩处理后的目标源程序文件,得到监控日志,再对监控日志进行分析,得到juint断言结果,并确定juint断言结果对应的预警和预警对应的代码在目标源程序文件中的位置,从而可以定位导致程序文件被篡改的代码,进而达到了提升检测效率的效果。
可选地,在本申请实施例提供的程序文件的检测装置中,第一处理单元包括:第一确定模块,用于对确定目标源程序文件的目标字段;第一解析模块,用于基于目标源程序文件的目标字段,解析目标源程序文件的字节码指令,得到解析结果;第一插入模块,用于依据解析结果,向目标源程序文件中插入监听代码,得到目标程序文件。
可选地,在本申请实施例提供的程序文件的检测装置中,第三处理单元包括:第一处理模块,用于若监控日志中表征没有对除目标源程序文件之外的程序文件进行目标操作,则指示junit断言结果为成功,目标源程序文件通过检测;第二处理模块,用于若监控日志中有对除目标源程序文件之外的程序文件进行目标操作,且目标操作在使用junit断言之后,则指示junit断言结果为成功,目标源程序文件通过检测;第三处理模块,用于若监控日志中表征有对除目标源程序文件之外的程序文件进行目标操作,且目标操作在使用junit断言之前,则指示junit断言结果为失败,目标源程序文件未通过检测。
可选地,在本申请实施例提供的程序文件的检测装置中,该装置还包括:第四处理单元,用于在对监控日志进行分析,得到junit断言结果之后,若junit断言结果为失败,且监控日志中表征对除目标源程序文件之外的程序文件的操作在使用junit断言之前,则判定为第一类预警,并向目标对象发送第一类预警对应的代码在目标源程序文件中的位置;第五处理单元,用于若junit断言结果为成功,且监控日志中表征对除目标源程序文件之外的程序文件的操作在使用junit断言之后,则判定为第二类预警,并向目标对象发送第二类预警对应的代码在目标源程序文件中的位置。
可选地,在本申请实施例提供的程序文件的检测装置中,该装置还包括:第二获取单元,用于在获取目标源程序文件之前,获取目标代理程序文件;第一拦截单元,用于利用目标代理程序文件,拦截目标源程序文件。
可选地,在本申请实施例提供的程序文件的检测装置中,该装置还包括:第三获取单元,用于在获取目标代理程序文件之前,获取多个代理程序文件;第一组合单元,用于将多个代理程序文件进行组合,得到目标文件;第一配置单元,用于配置目标代理程序文件在目标文件中的路径信息和目标文件的路径信息。
可选地,在本申请实施例提供的程序文件的检测装置中,该装置还包括:第一发送单元,用于在对目标源程序文件进行插桩处理,得到目标程序文件之后,将目标程序文件发送给junit测试案例;第六处理单元,用于junit测试案例接收目标程序文件,并运行目标程序文件。
所述程序文件的检测装置包括处理器和存储器,上述第一获取单元301、第一处理单元302、第二处理单元303和第三处理单元304等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来提升程序文件的检测效率。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现所述程序文件的检测方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述程序文件的检测方法。
如图4所示,本发明实施例提供了一种电子设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:获取目标源程序文件;对所述目标源程序文件进行插桩处理,得到目标程序文件;通过junit测试案例运行所述目标程序文件,得到运行所述目标程序文件的监控日志;对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测。
处理器执行程序时还实现以下步骤:对所述目标源程序文件进行插桩处理,得到目标程序文件包括:确定所述目标源程序文件的目标字段;基于所述目标源程序文件的目标字段,解析所述目标源程序文件的字节码指令,得到解析结果;依据所述解析结果,向所述目标源程序文件中插入监听代码,得到目标程序文件。
处理器执行程序时还实现以下步骤:对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测包括:若所述监控日志中表征没有对除所述目标源程序文件之外的程序文件进行目标操作,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;若所述监控日志中有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之后,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;若所述监控日志中表征有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之前,则指示所述junit断言结果为失败,所述目标源程序文件未通过检测。
处理器执行程序时还实现以下步骤:在对所述监控日志进行分析,得到junit断言结果之后,所述方法还包括:若所述junit断言结果为失败,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之前,则判定为第一类预警,并向目标对象发送所述第一类预警对应的代码在所述目标源程序文件中的位置;若所述junit断言结果为成功,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之后,则判定为第二类预警,并向目标对象发送所述第二类预警对应的代码在所述目标源程序文件中的位置。
处理器执行程序时还实现以下步骤:在获取目标源程序文件之前,所述方法还包括:获取目标代理程序文件;利用所述目标代理程序文件,拦截所述目标源程序文件。
处理器执行程序时还实现以下步骤:在获取目标代理程序文件之前,所述方法还包括:获取多个代理程序文件;将所述多个代理程序文件进行组合,得到目标文件;配置所述目标代理程序文件在所述目标文件中的路径信息和所述目标文件的路径信息。
处理器执行程序时还实现以下步骤:在对所述目标源程序文件进行插桩处理,得到目标程序文件之后,所述方法还包括:将所述目标程序文件发送给所述junit测试案例;所述junit测试案例接收所述目标程序文件,并运行所述目标程序文件。本文中的设备可以是服务器、PC、PAD、手机等。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:获取目标源程序文件;对所述目标源程序文件进行插桩处理,得到目标程序文件;通过junit测试案例运行所述目标程序文件,得到运行所述目标程序文件的监控日志;对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:对所述目标源程序文件进行插桩处理,得到目标程序文件包括:确定所述目标源程序文件的目标字段;基于所述目标源程序文件的目标字段,解析所述目标源程序文件的字节码指令,得到解析结果;依据所述解析结果,向所述目标源程序文件中插入监听代码,得到目标程序文件。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测包括:若所述监控日志中表征没有对除所述目标源程序文件之外的程序文件进行目标操作,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;若所述监控日志中有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之后,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;若所述监控日志中表征有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之前,则指示所述junit断言结果为失败,所述目标源程序文件未通过检测。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在对所述监控日志进行分析,得到junit断言结果之后,所述方法还包括:若所述junit断言结果为失败,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之前,则判定为第一类预警,并向目标对象发送所述第一类预警对应的代码在所述目标源程序文件中的位置;若所述junit断言结果为成功,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之后,则判定为第二类预警,并向目标对象发送所述第二类预警对应的代码在所述目标源程序文件中的位置。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在获取目标源程序文件之前,所述方法还包括:获取目标代理程序文件;利用所述目标代理程序文件,拦截所述目标源程序文件。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在获取目标代理程序文件之前,所述方法还包括:获取多个代理程序文件;将所述多个代理程序文件进行组合,得到目标文件;配置所述目标代理程序文件在所述目标文件中的路径信息和所述目标文件的路径信息。
当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在对所述目标源程序文件进行插桩处理,得到目标程序文件之后,所述方法还包括:将所述目标程序文件发送给所述junit测试案例;所述junit测试案例接收所述目标程序文件,并运行所述目标程序文件。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种程序文件的检测方法,其特征在于,包括:
获取目标源程序文件;
对所述目标源程序文件进行插桩处理,得到目标程序文件;
通过junit测试案例运行所述目标程序文件,得到运行所述目标程序文件的监控日志;
对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测。
2.根据权利要求1所述的方法,其特征在于,对所述目标源程序文件进行插桩处理,得到目标程序文件包括:
确定所述目标源程序文件的目标字段;
基于所述目标源程序文件的目标字段,解析所述目标源程序文件的字节码指令,得到解析结果;
依据所述解析结果,向所述目标源程序文件中插入监听代码,得到目标程序文件。
3.根据权利要求1所述的方法,其特征在于,对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测包括:
若所述监控日志中表征没有对除所述目标源程序文件之外的程序文件进行目标操作,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;
若所述监控日志中有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之后,则指示所述junit断言结果为成功,所述目标源程序文件通过检测;
若所述监控日志中表征有对除所述目标源程序文件之外的程序文件进行目标操作,且所述目标操作在使用junit断言之前,则指示所述junit断言结果为失败,所述目标源程序文件未通过检测。
4.根据权利要求3所述的方法,其特征在于,在对所述监控日志进行分析,得到junit断言结果之后,所述方法还包括:
若所述junit断言结果为失败,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之前,则判定为第一类预警,并向目标对象发送所述第一类预警对应的代码在所述目标源程序文件中的位置;
若所述junit断言结果为成功,且所述监控日志中表征对除所述目标源程序文件之外的程序文件的操作在使用junit断言之后,则判定为第二类预警,并向目标对象发送所述第二类预警对应的代码在所述目标源程序文件中的位置。
5.根据权利要求1所述的方法,其特征在于,在获取目标源程序文件之前,所述方法还包括:
获取目标代理程序文件;
利用所述目标代理程序文件,拦截所述目标源程序文件。
6.根据权利要求5所述的方法,其特征在于,在获取目标代理程序文件之前,所述方法还包括:
获取多个代理程序文件;
将所述多个代理程序文件进行组合,得到目标文件;
配置所述目标代理程序文件在所述目标文件中的路径信息和所述目标文件的路径信息。
7.根据权利要求1所述的方法,其特征在于,在对所述目标源程序文件进行插桩处理,得到目标程序文件之后,所述方法还包括:
将所述目标程序文件发送给所述junit测试案例;
所述junit测试案例接收所述目标程序文件,并运行所述目标程序文件。
8.一种程序文件的检测装置,其特征在于,包括:
第一获取单元,用于获取目标源程序文件;
第一处理单元,用于对所述目标源程序文件进行插桩处理,得到目标程序文件;
第二处理单元,用于通过junit测试案例运行所述目标程序文件,得到运行所述目标程序文件的监控日志;
第三处理单元,用于对所述监控日志进行分析,得到junit断言结果,以完成对所述目标源程序文件的检测。
9.一种计算机可读存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序执行权利要求1至7中任意一项所述的程序文件的检测方法。
10.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至7中任意一项所述的程序文件的检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210742716.3A CN115080426A (zh) | 2022-06-28 | 2022-06-28 | 程序文件的检测方法及装置、存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210742716.3A CN115080426A (zh) | 2022-06-28 | 2022-06-28 | 程序文件的检测方法及装置、存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115080426A true CN115080426A (zh) | 2022-09-20 |
Family
ID=83255149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210742716.3A Pending CN115080426A (zh) | 2022-06-28 | 2022-06-28 | 程序文件的检测方法及装置、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115080426A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115270115A (zh) * | 2022-09-27 | 2022-11-01 | 北京航空航天大学 | 一种边缘应用行为信息采集方法及系统 |
-
2022
- 2022-06-28 CN CN202210742716.3A patent/CN115080426A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115270115A (zh) * | 2022-09-27 | 2022-11-01 | 北京航空航天大学 | 一种边缘应用行为信息采集方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9535823B2 (en) | Method and apparatus for detecting software bugs | |
US7503037B2 (en) | System and method for identifying bugs in software source code, using information from code coverage tools and source control tools to determine bugs introduced within a time or edit interval | |
Zeng et al. | Studying the characteristics of logging practices in mobile apps: a case study on f-droid | |
Elbaum et al. | Carving differential unit test cases from system test cases | |
US7882495B2 (en) | Bounded program failure analysis and correction | |
US9311217B2 (en) | Analyzing computer programs to identify errors | |
US8776029B2 (en) | System and method of software execution path identification | |
US20080244536A1 (en) | Evaluating static analysis results using code instrumentation | |
US7577889B1 (en) | Method for detecting software errors and vulnerabilities | |
CN110704306B (zh) | 测试中的断言处理方法、装置、设备及存储介质 | |
CN112286828B (zh) | 一种区块链智能合约的测试方法和系统 | |
Panichella et al. | Test smells 20 years later: detectability, validity, and reliability | |
US20140229923A1 (en) | Commit sensitive tests | |
CN115080426A (zh) | 程序文件的检测方法及装置、存储介质和电子设备 | |
Sârbu et al. | Profiling the operational behavior of OS device drivers | |
Black | Static analyzers: Seat belts for your code | |
Dalton et al. | Is exceptional behavior testing an exception? an empirical assessment using java automated tests | |
US20120102365A1 (en) | Generating a functional coverage model from a trace | |
US20100050162A1 (en) | Automatically detecting non-modifying transforms when profiling source code | |
Hermann et al. | Getting to know you: Towards a capability model for java | |
Tasiran et al. | Location pairs: a test coverage metric for shared-memory concurrent programs | |
CN114490413A (zh) | 测试数据的准备方法及装置、存储介质和电子设备 | |
CN112363870B (zh) | 应用程序开发处理方法、装置、计算机设备和存储介质 | |
US9311080B2 (en) | Instrumented file deployment | |
Li et al. | {ExChain}: Exception Dependency Analysis for Root Cause Diagnosis |
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 |