代码检测方法、装置及非瞬时性计算机可读存储介质与流程

文档序号:30233950发布日期:2022-06-01 07:28阅读:103来源:国知局
代码检测方法、装置及非瞬时性计算机可读存储介质与流程

1.本公开涉及计算机技术领域,特别涉及一种代码检测方法、装置及非瞬时性计算机可读存储介质。


背景技术:

2.在程序中采用硬编码方式对密码进行加密处理,会得到硬编码密码。
3.硬编码加密意味着拥有代码权限的人都可以查看到硬编码密码,也可以通过反编译代码看到硬编码密码。而硬编码加密的漏洞一旦被利用,会造成难以修改正的安全问题。


技术实现要素:

4.本公开解决的一个技术问题是,如何更加准确、高效的检测出代码中的硬编码密码。
5.根据本公开的一个方面,提供了一种代码检测方法,包括:识别代码中的函数和参数;从参数中查找调用网络函数的连接参数以及连接参数的定义参数,函数包括网络函数;从函数中查找将定义参数处理为连接参数的参数处理函数,函数包括参数处理函数;根据参数处理函数及定义参数,判断连接参数是否为硬编码密码;在连接参数为硬编码密码的情况下,输出在代码中检测硬编码密码的检测报告。
6.在一些实施例中,输出在代码中检测硬编码密码的检测报告包括:判断代码是否经过混淆;若代码未经过混淆,输出连接参数,并报告在代码中检测到硬编码密码;若代码经过混淆,利用密码关键字对代码进行匹配,输出代码中与密码关键字匹配的参数,并报告在代码中检测到硬编码密码。
7.在一些实施例中,根据参数处理函数及定义参数,判断连接参数是否为硬编码密码包括:若经过参数处理函数的处理,定义参数与连接参数不同,则连接参数不为硬编码密码;若经过参数处理函数的处理,定义参数与连接参数相同,或者,未查找到参数处理函数,则连接参数为硬编码密码。
8.在一些实施例中,代码检测方法还包括:在连接参数不为硬编码密码的情况下,判断参数处理函数是否利用加密参数将定义参数处理为连接参数;若参数处理函数利用加密参数将定义参数处理为连接参数,报告在代码中检测到强处理密码;若参数处理函数未利用加密参数将定义参数处理为连接参数,报告在代码中检测到弱处理密码。
9.在一些实施例中,代码检测方法还包括:确定文件的文件类型;在文件类型为非二进制文件的情况下,预加载文件中的代码;在文件类型为二进制文件的情况下,对文件进行逆向处理,预加载逆向处理后的文件中的代码。
10.根据本公开的另一个方面,提供了一种代码检测装置,包括:代码识别模块,被配置为识别代码中的函数和参数;参数查找模块,被配置为从参数中查找调用网络函数的连接参数以及连接参数的定义参数,函数包括网络函数;函数查找模块,被配置为从函数中查找将定义参数处理为连接参数的参数处理函数,函数包括参数处理函数;硬编码判断模块,
被配置为根据参数处理函数及定义参数,判断连接参数是否为硬编码密码;报告输出模块,被配置为在连接参数为硬编码密码的情况下,输出在代码中检测硬编码密码的检测报告。
11.在一些实施例中,报告输出模块被配置为:判断代码是否经过混淆;若代码未经过混淆,输出连接参数,并报告在代码中检测到硬编码密码;若代码经过混淆,利用密码关键字对代码进行匹配,输出代码中与密码关键字匹配的参数,并报告在代码中检测到硬编码密码。
12.在一些实施例中,硬编码判断模块被配置为:若经过参数处理函数的处理,定义参数与连接参数不同,则连接参数不为硬编码密码;若经过参数处理函数的处理,定义参数与连接参数相同,或者,未查找到参数处理函数,则连接参数为硬编码密码。
13.在一些实施例中,代码检测装置还包括函数判断模块,被配置为:在连接参数不为硬编码密码的情况下,判断参数处理函数是否利用加密参数将定义参数处理为连接参数;报告输出模块还被配置为:若参数处理函数利用加密参数将定义参数处理为连接参数,报告在代码中检测到强处理密码;若参数处理函数未利用加密参数将定义参数处理为连接参数,报告在代码中检测到弱处理密码。
14.在一些实施例中,代码检测装置还包括代码预加载模块,被配置为:确定文件的文件类型;在文件类型为非二进制文件的情况下,预加载文件中的代码;在文件类型为二进制文件的情况下,对文件进行逆向处理,预加载逆向处理后的文件中的代码。
15.根据本公开的又一个方面,提供了又一种代码检测装置,包括:存储器;以及耦接至存储器的处理器,处理器被配置为基于存储在存储器中的指令,执行前述的代码检测方法。
16.根据本公开的再一个方面,提供了一种非瞬时性计算机可读存储介质,其中,非瞬时性计算机可读存储介质存储有计算机指令,指令被处理器执行时实现前述的代码检测方法。
17.本公开能够更加准确、高效的检测出代码中的硬编码密码。
18.通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得清楚。
附图说明
19.为了更清楚地说明本公开实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
20.图1示出了本公开一些实施例的代码检测方法的流程示意图。
21.图2示出了输出在代码中检测硬编码密码的检测报告的一些实施例的流程示意图。
22.图3示出了本公开一些实施例的代码检测装置的结构示意图。
23.图4示出了本公开另一些实施例的代码检测装置的结构示意图。
具体实施方式
24.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本公开保护的范围。
25.发明人研究发现,如果在代码中搜索密码关键字(例如password、pass、pwd、jdbc等)来检测代码中是否存在硬编码密码,通常检测准确率较低且检测效率较低,需要工作人员进行人工的二次确认。检测准确率较低的原因主要分两方面,一方面代码中可能存在与密码关键字相同的命名字段,但该字段实际上并不是密码;另一方面代码中可能直接使用密码而不采用密码关键字对密码进行表示。检测效率较低的原因是,搜索密码关键字时需要在全部代码中进行字符匹配。有鉴于此,发明人提供了一种码检测方法,能够更加准确、高效的检测出代码中的硬编码密码。
26.下面结合图1描述本公开代码检测方法的一些实施例。
27.图1示出了本公开一些实施例的代码检测方法的流程示意图。如图1所示,代码检测方法包括步骤s101~步骤s109。其中,步骤s101~步骤s104为准备阶段,步骤s105~步骤s109为检测阶段。
28.(准备阶段)
29.在步骤s101中,确定文件的文件类型。
30.文件的文件类型包括二进制类型和非二进制类型。根据文件的文件名后缀可以确定文件的文件类型,例如文件名后缀为.bin的文件为二进制文件。根据文件的魔数magic number也可以确定文件的文件类型,例如通过linux命令行输出文件的前四个字节为7f45,则该文件为二进制文件。
31.在文件类型为非二进制文件的情况下,执行步骤s102。在步骤s102中,预加载文件中的代码。
32.在文件类型为二进制文件的情况下,执行步骤s103~步骤s104。在步骤s103中,对文件进行逆向处理,例如采用ida(interactive disassembler,交互式反汇编程序)软件等逆向工具对文件进行逆向处理。在步骤s104中,预加载逆向处理后的文件中的代码。
33.(检测阶段)
34.在步骤s105中,识别代码中的函数和参数。
35.识别代码中的函数和参数后,可以将代码抽象为语法树。
36.在步骤s106中,从参数中查找调用网络函数的连接参数以及连接参数的定义参数。
37.代码中的函数包括网络函数。例如,代码中建立socket连接时调用了socket库中的函数,该socket库中的函数属于网络函数。那么,通过检测对网络函数的连接调用,或者通过检测代码中“connect”等关键字的检测,可以查找到调用网络函数的连接参数。假设连接参数为b,连接参数b的定义参数为a。本领域技术人员应理解,连接参数的实际数量可以为多个,为便于描述技术方案,在此从单个连接参数的角度进行解释说明。
38.在步骤s107中,从函数中查找将定义参数处理为连接参数的参数处理函数。
39.本领域技术人员能够理解,代码中的函数包括参数处理函数。
40.在步骤s108中,根据参数处理函数及定义参数,判断连接参数是否为硬编码密码。
41.若经过参数处理函数的处理,定义参数与连接参数不同,则连接参数不为硬编码密码;若经过参数处理函数的处理,定义参数与连接参数相同,或者,未查找到参数处理函数,则连接参数为硬编码密码。
42.在连接参数为硬编码密码的情况下,执行步骤s109。在步骤s109中,输出在代码中检测硬编码密码的检测报告。
43.上述实施例适用于白盒测试以及灰盒测试场景。在预加载代码后,通过对代码中函数和参数的识别、查找和判断,能够更加准确、高效的检测出代码中的硬编码密码,解决了传统代码检测方法中检测硬编码密码时误报率高、漏报率高、检测效率低、需要工作人员进行人工的二次确认的问题。
44.在一些实施例中,代码检测方法还包括步骤s110~步骤s112。
45.在连接参数不为硬编码密码的情况下,执行步骤s110。在步骤s110中,判断参数处理函数是否利用加密参数将定义参数处理为连接参数。
46.若参数处理函数利用加密参数将定义参数处理为连接参数,执行步骤s111。在步骤s111中,报告在代码中检测到强处理密码。
47.在参数处理函数利用加密参数将定义参数处理为连接参数的情况下,通过对定义参数进行简单的处理操作无法获得连接参数,此时确定代码中存在强处理密码。
48.若参数处理函数未利用加密参数将定义参数处理为连接参数,执行步骤s112。在步骤s112中,报告在代码中检测到弱处理密码。
49.在参数处理函数未利用加密参数将定义参数处理为连接参数的情况下,通过对定义参数进行简单的处理操作能够获得连接参数,此时确定代码中存在弱处理密码。
50.这些实施例不仅能够准确、高效的检测出代码中的硬编码密码,还能够检测出代码中的弱处理密码和强处理密码。
51.下面结合图2描述输出在代码中检测硬编码密码的检测报告的一些实施例。
52.图2示出了输出在代码中检测硬编码密码的检测报告的一些实施例的流程示意图。如图2所示,该方法包括步骤s2091~步骤s2094。
53.在步骤s2091中,判断代码是否经过混淆。
54.经过混淆的代码中,参数和函数为例如“c”、“d”等不具有可读性的形式。
55.若代码未经过混淆,执行步骤s2092。在步骤s2092中,输出连接参数,并报告在代码中检测到硬编码密码。
56.若代码经过混淆,执行步骤s2093。在步骤s2093中,利用密码关键字(例如password、pass、pwd、jdbc等)对代码进行匹配,输出代码中与密码关键字匹配的参数,并报告在代码中检测到硬编码密码。本领域技术人员能够理解,如果代码中不存在与密码关键字匹配的参数,表明从代码中难以检测到密码,代码的安全性较高。
57.如果代码中存在硬编码密码,那么无论代码是否经过混淆,本实施例都能够从代码中检测到硬编码密码,并输出在代码中检测硬编码密码的检测报告。
58.下面结合图3描述本公开代码检测装置的一些实施例。
59.图3示出了本公开一些实施例的代码检测装置的结构示意图。如图3所示,代码检
测装置30包括:代码识别模块301,被配置为识别代码中的函数和参数;参数查找模块302,被配置为从参数中查找调用网络函数的连接参数以及连接参数的定义参数,函数包括网络函数;函数查找模块303,被配置为从函数中查找将定义参数处理为连接参数的参数处理函数,函数包括参数处理函数;硬编码判断模块304,被配置为根据参数处理函数及定义参数,判断连接参数是否为硬编码密码;报告输出模块305,被配置为在连接参数为硬编码密码的情况下,输出在代码中检测硬编码密码的检测报告。
60.在一些实施例中,代码检测装置30还包括代码预加载模块300,被配置为:确定文件的文件类型;在文件类型为非二进制文件的情况下,预加载文件中的代码;在文件类型为二进制文件的情况下,对文件进行逆向处理,预加载逆向处理后的文件中的代码。
61.在一些实施例中,硬编码判断模块304被配置为:若经过参数处理函数的处理,定义参数与连接参数不同,则连接参数不为硬编码密码;若经过参数处理函数的处理,定义参数与连接参数相同,或者,未查找到参数处理函数,则连接参数为硬编码密码。
62.上述实施例适用于白盒测试以及灰盒测试场景。在预加载代码后,通过对代码中函数和参数的识别、查找和判断,能够更加准确、高效的检测出代码中的硬编码密码,解决了传统代码检测方法中检测硬编码密码时误报率高、漏报率高、检测效率低、需要工作人员进行人工的二次确认的问题。
63.在一些实施例中,报告输出模块305被配置为:判断代码是否经过混淆;若代码未经过混淆,输出连接参数,并报告在代码中检测到硬编码密码;若代码经过混淆,利用密码关键字对代码进行匹配,输出代码中与密码关键字匹配的参数,并报告在代码中检测到硬编码密码。
64.如果代码中存在硬编码密码,那么无论代码是否经过混淆,本实施例都能够从代码中检测到硬编码密码,并输出在代码中检测硬编码密码的检测报告。
65.在一些实施例中,代码检测装置30还包括函数判断模块306,被配置为:在连接参数不为硬编码密码的情况下,判断参数处理函数是否利用加密参数将定义参数处理为连接参数;报告输出模块305还被配置为:若参数处理函数利用加密参数将定义参数处理为连接参数,报告在代码中检测到强处理密码;若参数处理函数未利用加密参数将定义参数处理为连接参数,报告在代码中检测到弱处理密码。
66.本实施例不仅能够准确、高效的检测出代码中的硬编码密码,还能够检测出代码中的弱处理密码和强处理密码。
67.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
68.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
69.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以
是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
70.下面结合图4描述本公开代码检测装置的另一些实施例。
71.图4示出了本公开另一些实施例的代码检测装置的结构示意图。如图4所示,代码检测装置40包括:存储器410以及耦接至该存储器410的处理器420,处理器420被配置为基于存储在存储器410中的指令,执行前述任意一些实施例中的代码检测方法。
72.其中,存储器410例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(boot loader)以及其他程序等。
73.代码检测装置40还可以包括输入输出接口430、网络接口440、存储接口450等。这些接口430、440、450以及存储器410和处理器420之间例如可以通过总线460连接。其中,输入输出接口430为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络接口440为各种联网设备提供连接接口。存储接口450为sd卡、u盘等外置存储设备提供连接接口。
74.本公开还包括一种非瞬时性计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现前述任意一些实施例中的代码检测方法。
75.前述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
76.本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
77.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
78.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
79.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例。此外,术语“包括”和“具
有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
80.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
81.以上所述仅为本公开的较佳实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1