一种静态检测安卓代码中的资源回收漏洞的方法和装置制造方法及图纸

技术编号:18203911 阅读:33 留言:0更新日期:2018-06-13 06:11
本发明专利技术公开了一种静态检测安卓代码中的资源回收漏洞的方法和装置。其中所述方法包括:读取待检测的安卓应用的源代码到内存中;检测所述源代码中是否包含有创建占用资源的待回收对象的操作指令;如果有,进一步检测所述源代码中是否包含有与所述占用资源的待回收对象对应的资源回收指令;如果没有对应的资源回收指令,则确定所述源代码中存在资源回收漏洞。该技术方案不需要人工进行代码检索,准确率和效率都得到了大量提升,也减轻了开发人员的压力,提高了代码开发过程中的自动化程度。

【技术实现步骤摘要】
一种静态检测安卓代码中的资源回收漏洞的方法和装置
本专利技术涉及计算机
,特别涉及一种静态检测安卓代码中的资源回收漏洞的方法和装置。
技术介绍
在JAVA中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。然而,JAVA自身的垃圾回收机制只能回收无用对象的内存空间,对于数据库连接、磁盘IO流等物理类型资源无法释放,需要手动释放处理。如果开发者未在代码中使用对应的资源回收方法,这些资源就会一直占用,日积月累造成内存溢出,因此这种漏洞被称为资源回收漏洞。现有技术中对安卓代码中资源回收漏洞的排查只能通过人工方式进行代码检索,费时费力,效率低下。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的静态检测安卓代码中的资源回收漏洞的方法和装置。依据本专利技术的一个方面,提供了一种静态检测安卓代码中的资源回收漏洞的方法,包括:读取待检测的安卓应用的源代码到内存中;检测所述源代码中是否包含有创建占用资源的待回收对象的操作指令;如果有,进一步检测所述源代码中是否包含有与所述占用资源的待回收对象对应的资源回收指令;如果没有对应的资源回收指令,则确定所述源代码中存在资源回收漏洞。可选地,所述读取待检测的安卓应用的源代码到内存中包括:获取所述源代码的路径信息;根据所述源代码的路径信息,以多线程方式读取该路径下的所有代码文件到内存中。可选地,所述检测所述源代码中是否包含有创建占用资源的待回收对象的指令包括:调用所述源代码的解析器解析所述源代码,得到所述源代码的抽象语法树;对所述抽象语法树中的各节点进行分类,将类型相同的节点保存到对应的同一个节点集合中,得到类型不同的多个节点集合;确定创建占用资源的待回收对象的指令的多个属性,根据该多个属性从所述多个节点集合中查找与创建占用资源的待回收对象的指令对应的节点;检测该节点下是否包含有创建占用资源的待回收对象的操作指令。可选地,所述确定待定位的指定内容的多个属性包括:确定所述指定内容的分类属性;以及确定所述指定内容的一个或多个其他属性。可选地,所述根据该多个属性从所述多个节点集合中查找与所述指定内容对应的节点包括:先根据所述指定内容的分类属性,确定与该分类属性对应的一个节点集合;从所述其他属性中选择一个属性,从所确定的节点集合中查找出与该属性匹配的节点;判断所述一个或多个其他属性中是否存在未被选择的属性,如果存在则从查找的节点中进一步选出与该属性匹配的节点,直到所述的其他属性均被选择过一次。可选地,所述创建占用资源的待回收对象的操作指令为:数据库操作函数。可选地,所述创建占用资源的待回收对象的操作指令为:读/写数据流函数。可选地,所述创建占用资源的待回收对象的操作指令为:数据库连接函数。可选地,所述资源回收指令为:trycatch函数。可选地,该方法进一步包括:如果有对应的资源回收指令,进一步检测该资源回收指令是否包含在特定语句结构中;如果不包含在特定语句结构中,则确定所述源代码中存在资源回收漏洞。可选地,所述特定语句结构为finally语句结构。依据本专利技术的另一方面,提供了一种静态检测安卓代码中的资源回收漏洞的装置,包括:读取单元,适于读取待检测的安卓应用的源代码到内存中;检测单元,适于检测所述源代码中是否包含有创建占用资源的待回收对象的操作指令;如果有,进一步检测所述源代码中是否包含有与所述占用资源的待回收对象对应的资源回收指令;如果没有对应的资源回收指令,则确定所述源代码中存在资源回收漏洞。可选地,所述读取单元,适于获取所述源代码的路径信息;根据所述源代码的路径信息,以多线程方式读取该路径下的所有代码文件到内存中。可选地,所述检测单元,适于调用所述源代码的解析器解析所述源代码,得到所述源代码的抽象语法树;对所述抽象语法树中的各节点进行分类,将类型相同的节点保存到对应的同一个节点集合中,得到类型不同的多个节点集合;确定创建占用资源的待回收对象的指令的多个属性,根据该多个属性从所述多个节点集合中查找与创建占用资源的待回收对象的指令对应的节点;检测该节点下是否包含有创建占用资源的待回收对象的操作指令。可选地,所述检测单元,适于确定所述指定内容的分类属性;以及确定所述指定内容的一个或多个其他属性。可选地,所述检测单元,适于先根据所述指定内容的分类属性,确定与该分类属性对应的一个节点集合;从所述其他属性中选择一个属性,从所确定的节点集合中查找出与该属性匹配的节点;判断所述一个或多个其他属性中是否存在未被选择的属性,如果存在则从查找的节点中进一步选出与该属性匹配的节点,直到所述的其他属性均被选择过一次。可选地,所述创建占用资源的待回收对象的操作指令为:数据库操作函数。可选地,所述创建占用资源的待回收对象的操作指令为:读/写数据流函数。可选地,所述创建占用资源的待回收对象的操作指令为:数据库连接函数。可选地,所述资源回收指令为:trycatch函数。可选地,所述检测单元,进一步适于在有对应的资源回收指令时,检测该资源回收指令是否包含在特定语句结构中;如果不包含在特定语句结构中,则确定所述源代码中存在资源回收漏洞。可选地,所述特定语句结构为finally语句结构。由上述可知,本专利技术的技术方案,在读取待检测的安卓代码到内存后,先判断是否存在创建占用资源的待回收对象的操作指令,如果存在,则进一步判断是否有与其对应的资源回收指令,如果没有,则说明该安卓代码在编译执行后,会创建无法自动回收的占用资源的待回收对象,这样累积会造成大量内存无法自动被释放,可能造成内存溢出,因此判断源代码中存在资源回收漏洞。该技术方案不需要人工进行代码检索,准确率和效率都得到了大量提升,也减轻了开发人员的压力,提高了代码开发过程中的自动化程度。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本专利技术一个实施例的一种静态检测安卓代码中的资源回收漏洞的方法的流程图;图2示出了根据本专利技术一个实施例的一种静态检测安卓代码中的资源回收漏洞的装置的结构示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1示出了根据本专利技术一个实施例的一种静态检测安卓代码中的资源回收漏洞的方法的流程图,如图1所示,该方法包括:步骤S110,读取待检测的安卓应用的源代码到内存中。步骤S120,检测源代码中是否包含有创建占用资源的待回收对象的操作指令。步骤S130,如果有,进一步检测源代码中是否包含有与占用资源的待回收对象对应的资源回收本文档来自技高网...
一种静态检测安卓代码中的资源回收漏洞的方法和装置

【技术保护点】
一种静态检测安卓代码中的资源回收漏洞的方法,其中,该方法包括:读取待检测的安卓应用的源代码到内存中;检测所述源代码中是否包含有创建占用资源的待回收对象的操作指令;如果有,进一步检测所述源代码中是否包含有与所述占用资源的待回收对象对应的资源回收指令;如果没有对应的资源回收指令,则确定所述源代码中存在资源回收漏洞。

【技术特征摘要】
1.一种静态检测安卓代码中的资源回收漏洞的方法,其中,该方法包括:读取待检测的安卓应用的源代码到内存中;检测所述源代码中是否包含有创建占用资源的待回收对象的操作指令;如果有,进一步检测所述源代码中是否包含有与所述占用资源的待回收对象对应的资源回收指令;如果没有对应的资源回收指令,则确定所述源代码中存在资源回收漏洞。2.如权利要求1所述的方法,其中,所述读取待检测的安卓应用的源代码到内存中包括:获取所述源代码的路径信息;根据所述源代码的路径信息,以多线程方式读取该路径下的所有代码文件到内存中。3.如权利要求1所述的方法,其中,所述检测所述源代码中是否包含有创建占用资源的待回收对象的指令包括:调用所述源代码的解析器解析所述源代码,得到所述源代码的抽象语法树;对所述抽象语法树中的各节点进行分类,将类型相同的节点保存到对应的同一个节点集合中,得到类型不同的多个节点集合;确定创建占用资源的待回收对象的指令的多个属性,根据该多个属性从所述多个节点集合中查找与创建占用资源的待回收对象的指令对应的节点;检测该节点下是否包含有创建占用资源的待回收对象的操作指令。4.如权利要求3所述的方法,其中,所述确定待定位的指定内容的多个属性包括:确定所述指定内容的分类属性;以及确定所述指定内容的一个或多个其他属性。5.如权利要求4所述的方法,其中,所述根据该多个属性从所述多个节点集合中查找与所述指定内容对应的节点包括:先根据所述指定内容的分类属性,确定与该分类属性对应的一个节点集合;从所述其他属性中选择一个属性,从所确定的节点集合中查找出与该属性匹配的节点;判断所述一个或多个其他属性中是否存在未被选择的属性,如果存在则从查找的节点中进...

【专利技术属性】
技术研发人员:袁伟刘俊
申请(专利权)人:北京奇虎科技有限公司奇智软件北京有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1