一种软件代码存储方法与流程

文档序号:11250677阅读:306来源:国知局

本发明涉及计算机技术领域,特别涉及一种软件代码存储方法。



背景技术:

当前一个商用软件代码编写量非常大,所占用存储空间也比较大,且某些软件代码是否被他人盗用,需要大量文本文件的阅读或者比对;由此可见,针对软件代码的相关处理时,软件代码识别的难度很大。



技术实现要素:

有鉴于此,本申请提供一种软件代码存储方法,不需要对源软件代码文件全部进行存储,能够节省存储空间,也能够降低相似软件代码识别的难度。

为解决上述技术问题,本申请的技术方案是这样实现的:

一种软件代码存储方法,该方法包括:

读取软件代码文件中的软件代码;

按照预设规则对该软件代码的内容分块,形成多个代码块;

针对每个代码块对应的内容分别进行扫描,识别该代码块中的逻辑判断,以及逻辑判断嵌套的层次,以各逻辑判断的层次号形成一个数字序列,作为该代码块的特征序列;

将各代码块的名称,以及各代码块的特征序列,作为该软件代码的特征集合进行存储。

由上面的技术方案可知,本申请中通过将一软件代码按照预设规则划分为多个代码块,并针对每个代码块按照逻辑判断、逻辑嵌套层次确定代码块的特征序列,将各代码块的特征序列作为该软件代码的特征集进行存储,不需要对源软件代码文件全部进行存储,能够节省存储空间,也能够降低相似软件代码识别的难度。

附图说明

图1为本申请实施例中软件代码存储流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,下面结合附图并举实施例,对本发明的技术方案进行详细说明。

本申请实施例中提供一种软件代码存储方法,通过将一软件代码按照预设规则划分为多个代码块,并针对每个代码块按照逻辑判断、逻辑嵌套层次确定代码块的特征序列,将各代码块的特征序列作为该软件代码的特征集进行存储,不需要对源软件代码文件全部进行存储,能够节省存储空间,也能够降低相似软件代码识别的难度。

下面结合附图,详细说明本申请实施例中实现软件代码存储的过程。

参见图1,图1为本申请实施例中软件代码存储流程示意图。具体步骤包括:

步骤101,处理设备读取软件代码文件中的软件代码。

本申请实施例中将针对软件代码进行特征序列确定的设备称为处理设备。

软件代码为高级计算机语言编写,如c语言、c++、java、c#、sql、net、php、visualbasic、pascal、python等;

且该软件代码能够正确编译,即没有语法的错误,保证需编译执行的代码能通过编译的语法分析阶段,脚本代码在执行过程中可以无误完整执行。

步骤102,该处理设备按照预设规则对该软件代码的内容分块,形成多个代码块。

本申请实施例中预先配置将软件代码分块的预设规则,针对面向过程的软件代码,预设规则为以函数为颗粒划分代码块,即一个函数划分为一个代码块;

若软件代码为面向过程的代码,则按照代码里的函数对该软件代码的内容进行分块,以函数的名称作为对应代码块的名称;针对不属于任何函数中的语句,作为一个独立主函数划分为一个代码块。

针对面向对象的软件代码,预设规则为以对象内的方法划分代码块。

若软件代码为面向对象的代码,则按照代码里的对象内的方法对该软件代码的内容进行分块,以对象和对应方法的名称作为对应代码块的名称;针对不属于任何对象内的语句,作为一个独立方法划分为一个代码块。

以面向对象的软件代码为例,先按对象划分,一个对象中有几个方法则针对该对象划分为几个代码块,如一个软件代码包括3个对象,第1个对象内有2个方法,第2个对象内有3个方法,第3个对象内有1个方法,则该软件代码划分为6个代码块。

步骤103,该处理设备针对每个代码块对应的内容分别进行扫描,识别该代码块中的逻辑判断,以及逻辑判断嵌套的层次,以各逻辑判断的层次号形成一个数字序列,作为该代码块的特征序列。

本步骤中针对每个代码块对应的内容分别进行扫描,识别该代码块中的逻辑判断,以及逻辑判断嵌套的层次,以各逻辑判断的层次号形成一个数字序列,包括:

针对该代码块设置逻辑嵌套计数器初始值为0;

扫描该代码块,若扫描到代码块中存在逻辑判断词,则将逻辑嵌套计数器增加1,并记录;

若在满足逻辑判断而执行的代码中又有新的逻辑判断,则逻辑嵌套计数器加1,并记录;

当代码完成一个满足逻辑判断的执行过程,逻辑嵌套计数器减1,不记录;以此类推,直到扫描完该代码块的全部内容。

这里的逻辑判断词如:if、else、for、while、do、switch等,针对不同的编程语言,根据具体编程语言确定逻辑判断词,判断一个逻辑判断的结束。

针对每个代码块执行上述操作,当所有代码块扫描结束时,完成整个软件代码的特征集的生成。

步骤104,该处理设备将各代码块的名称,以及各代码块的特征序列,作为该软件代码的特征集。

本申请具体实现时,可以json格式生成并存储软件代码的特征集。但是不限于此格式,如还可以使用xml,html等格式进行存储。

在存储软件代码的特征集时,存储附加信息;其中,所述附加信息包括下述一项或任意项组合:软件版本、特征集生成时间、特征集对应的哈希值、数字签名、软件编写者名称、软件备注和说明;所述哈希值和数字签名用于软件代码的特征集唯一性的标识。

存储的附加信息可以由处理设备的使用者根据实际应用确定,不限于上述列出软件版本、特征集生成时间、特征集对应的哈希值、数字签名、软件编写者名称、软件备注、说明等信息。

下面结合具体实例,详细说明特征序列的生成方式。

实施例一

以面向过程的,c语言软件代码为例。

参见表1,表1为面向过程的软件代码特征集包含的内容。

表1

表1中以软件代码example.c为例;由于该软件代码中包括两个函数,一个为a函数,一个为不在任何函数中的语句,作为main函数;因此,将该软件代码划分为两个代码块,名称分别为a和main。

针对代码块a进行扫描,根据逻辑嵌套次序生成代码块a的特征序列为:1,2,3,3,1。

针对代码块main进行扫描,根据逻辑嵌套次序生成main代码块的特征序列1,2,2

以json格式生成代码块a的特征序列{“a”:[1,2,3,3,1]}

以json格式生成代码块main的特征序列{“main”:[1,2,2]}

生成附加信息:“version”:“1.0”,“timestamp”:“2017-04-1416:49:20”

以json格式生成软件代码文件的特征集:{“example.c”:[{“a”:[1,2,3,3,1]},{“main”:[1,2,2]}],“version”:“1.0”,“timestamp”:“2017-04-1416:49:20”}。

实施例二

以面向对象的,python语言软件代码为例。

参见表2,表2为本申请实施例中面向对象的软件代码的特征集包含的内容。

表2

表2中以软件代码example.py为例,由于该软件代码中存在两个对象和不在对象中的可执行语句,其中一个对象中包括一个方法,另外一个对象中包括2个方法,因此,将该软件代码划分为4个代码块分别为:代码块a,代码块b.get,代码块b.post,代码块main,所有不在对象中的可执行语句,放入代码块main中。

针对代码块a进行扫描,根据逻辑嵌套次序生成代码块a的特征序列[1,1,1]。

针对代码块b.get进行扫描,根据逻辑嵌套次序生成代码块b.get的特征序列[1,1,1,1,2,2,1,2,2,3,3,2]。

针对代码块b.post进行扫描,根据逻辑嵌套次序生成代码块b.post的特征序列[0]。

针对代码块main进行扫描,根据逻辑嵌套次序生成代码块main的特征序列[1,1,1]。

生成附加信息如“version”:“1.0”,“timestamp”:“2017-04-1416:49:20”等

生成软件代码example.py的特征集{"example.py":[{"a":[1,1,1]},{"b":[{"get":[1,1,1,1,2,2,1,2,2,3,3,2]},{"post":[0]}]},{"main":[1,1,1]}],"version":"1.0","timestamp":"2017-04-1416:49:20"}。

本申请提取软件代码的特征序列的方案还可以应用到软件是否相同的确定中,具体如下:

第一步、当需要确定第一软件代码与存储的软件代码是否相同时,确定第一软件代码的特征集,并确定第一软件代码的特征集中的每一特征序列与存储的软件代码的特征集中每一特征序列的相似度;

在需要确定两个软件代码是否相同时,本申请实施例中给出的具体实现方案中不直接比对软件代码文件中的软件代码,而是先比较特征集,如果特征集相识度满足预设的条件,才会进行源代码的比对;否则,直接认为不同,不再使用源代码进行比较,这样能够节省大量的代码比对工作量。

在进行特征集比较时,使用两两组合的比较方式,即从第一软件代码合存储的软件代码的特征集中分别取出一个代码块的特征序列集,一一进行对比。如第一软件代码具备4个代码块,存储的软件代码具备4个代码块,则需要进行16组比对。

第二步,若第一软件代码有特征序列和存储的软件代码的特征集中一特征序列相似度大于预设相识度值,则确定第一软件代码中对应代码块与存储的软件代码中对应代码块有相同特征;否则,确定对应代码块的特征不同。

第三步,若第一软件代码和存储软件代码有相同特征的代码块数目大于预设相同数目值,则通过对第一软件代码文件和存储的软件代码源文件中的软件代码进行比较,确定第一软件代码与存储的软件代码是否相同;否则,不需要进行源代码比较,则确认第一软件代码和存储的软件代码不同。

在具体实现时,还可以使用上述方法直接确定两个存储的软件代码是否相同;确定两个均未进行特征提取的软件代码是否相同。

具体实现时,可以先比较代码块个数是否相近、代码块命名是否相似,把命名相似代码块进行相似性比较,比较方法如统计学里的两数字序列的相关性计算,以检查是否存在数学高相关性的特征序列。也可第一软件代码的全部特征序列和受保护的软件代码特征集中的全部特征序更进行两两比较,比较方法如统计学里的两数字序列的相关性计算,看是否存在数学高相关性的特征序列。本申请实施例对使用特征集进行比较的规则不做限制。

本申请实施例中可以把软件代码特征集进行存储过程作为该软件代码文件受到保护的标志;通过使用软件代码的特征集进行相识度比较,来确定受保护的软件代码是否受到侵害。

本申请实施例中将对软件代码的比对,简化为特征集相似性的比对,降低了软件代码的识别难度。

综上所述,本申请通过将一软件代码按照预设规则划分为多个代码块,并针对每个代码块按照逻辑判断、逻辑嵌套层次确定代码块的特征序列,将各代码块的特征序列作为该软件代码的特征集进行存储,不需要对源软件代码文件全部进行存储,能够节省存储空间,也能够降低相似软件代码识别的难度。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1