CN113946345A - 一种基于字符级局部敏感哈希法进行同源性检测的方法 - Google Patents

一种基于字符级局部敏感哈希法进行同源性检测的方法 Download PDF

Info

Publication number
CN113946345A
CN113946345A CN202111294922.4A CN202111294922A CN113946345A CN 113946345 A CN113946345 A CN 113946345A CN 202111294922 A CN202111294922 A CN 202111294922A CN 113946345 A CN113946345 A CN 113946345A
Authority
CN
China
Prior art keywords
character
fingerprint
source code
files
sensitive hashing
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
Application number
CN202111294922.4A
Other languages
English (en)
Inventor
常剑秋
于微
郑永震
任望
王强
王博
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Hongjian Technology Co ltd
Original Assignee
Beijing Hongjian Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Hongjian Technology Co ltd filed Critical Beijing Hongjian Technology Co ltd
Priority to CN202111294922.4A priority Critical patent/CN113946345A/zh
Publication of CN113946345A publication Critical patent/CN113946345A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2474Sequence data queries, e.g. querying versioned data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Collating Specific Patterns (AREA)

Abstract

本发明公开一种基于字符级局部敏感哈希法进行同源性检测的方法,包括步骤一、筛选符合的后缀名源代码文件并除去文本和图片,步骤二、源代码预处理及滑窗处理并通过映射和进制转换得到最终指纹,步骤三、根据源代码计算出的指纹选择匹配同源文件,步骤四、查询结果后进行排序并选出最终选定版本;本发明从字符级直接对输入的字符进行滑窗处理,粒度更细,准确性更高,通过将较长的源代码转换为较短的指纹,不仅可以解决同源检测中的相似性问题,而且漏报率大大降低。

Description

一种基于字符级局部敏感哈希法进行同源性检测的方法
技术领域
本发明涉及软件分析技术领域,尤其涉及一种基于字符级局部敏感哈希法进行同源性检测的方法。
背景技术
随着互联网的发展,开源代码增长迅速,绝大部分的开发者为了加快开发速度,直接将开源网站上的相近功能的代码拷贝到自己的软件中,然而,开发者在引入这些开源项目或代码时,经常会默认这些代码是完美的,不会出现任何问题,导致在完成相关业务功能后,开发者不会再去关注这些代码,会导致侵犯开源项目开发者的著作权,目前通常采用同源性检测技术去发现开发者软件中与开源项目中相似的文件,以便发现开发者软件中引用了哪些开源项目;
传统的同源性检测技术包括局部敏感哈希检测技术和SIMHASH检测技术,传统哈希检测技术无法解决同源检测的相似性问题,而SIMHASH检测技术能解决部分同源检测的相似性问题,但可能会导致漏报,因此,本发明提出一种基于字符级局部敏感哈希法进行同源性检测的方法以解决现有技术中存在的问题。
发明内容
针对上述问题,本发明的目的在于提出一种基于字符级局部敏感哈希法进行同源性检测的方法,该基于字符级局部敏感哈希法进行同源性检测的方法从字符级直接对输入的字符进行滑窗处理,粒度更细,准确性更高,通过将较长的源代码转换为较短的指纹,不仅可以解决同源检测中的相似性问题,而且漏报率大大降低。
为实现本发明的目的,本发明通过以下技术方案实现:一种基于字符级局部敏感哈希法进行同源性检测的方法,包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
对筛选处理后的源代码文件进行预处理,再对预处理后的源代码用大小为5的滑窗处理并进行重新组合,并使用Person Hash将获取的字符映射为[0,127]的整数,创建长度为128的数组,遍历重新组合的一系列整数找出四分点并经映射得到指纹的二进制表示,最后将其转换为得到指纹;
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找进行指纹匹配;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本并进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
进一步改进在于:所述步骤二中预处理的方法是将输入的源代码文件中的注释和空白符无用字符去除,并转换为小写。
进一步改进在于:所述步骤二中对预处理后的源代码用大小为5的滑窗处理,将滑窗中的字符每3位进行重新组合,保证原顺序不变且均包含首个字符。
进一步改进在于:所述步骤二中使用Person Hash将获取的字符映射后创建长度为128的数组,其各项初始值为0,然后遍历重新组合的整数,对应数组中下标和该整数相同的项数值+1。
进一步改进在于:所述步骤二中找出数组的四分点后根据四分点对数组中的值进行映射,得到指纹的二进制表示,再将其转换为16进制得到最终的指纹。
进一步改进在于:所述步骤三中指纹匹配时查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件。
进一步改进在于:所述步骤四中对应到相应的成分和版本后得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序后选定最终版本。
本发明的有益效果为:本发明从字符级直接对输入的字符进行滑窗处理,粒度更细,准确性更高,通过将较长的源代码转换为较短的指纹,不仅可以解决同源检测中的相似性问题,而且漏报率大大降低。
附图说明
图1为本发明检测方法流程图。
图2为本发明实施例2指纹生成示意图。
图3为本发明指纹匹配示意图。
具体实施方式
为了加深对本发明的理解,下面将结合实施例对本发明做进一步详述,本实施例仅用于解释本发明,并不构成对本发明保护范围的限定。
实施例1
根据图1、2、3所示,本实施例提供了一种基于字符级局部敏感哈希法进行同源性检测的方法,包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
1)将筛选处理后的源代码文件中的注释和空白符无用字符去除,并转换为小写;
2)再对预处理后的源代码用大小为5的滑窗处理,将滑窗中的字符每3位进行重新组合,保证原顺序不变且均包含首个字符;
3)使用Person Hash将获取的字符映射为[0,127]的整数;
4)创建长度为128的数组,其各项初始值为0,然后遍历2)中的一系列整数,相对应数组中下标和该整数相同的项数值+1;
5)找出数组的四分点后根据四分点对数组中的值进行映射,得到指纹的二进制表示,再将其转换为16进制得到最终的指纹。
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本,得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
实施例2
根据图1、2、3所示,本实施例提供了一种基于字符级局部敏感哈希法进行同源性检测的方法,包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
1)将筛选处理后的源代码文件中的注释和空白符无用字符去除,并转换为小写;
2)再对预处理后的源代码用大小为5的滑窗处理,每次移动一个字符,直到字符串末尾。假设每次获取到的滑窗内容为ABCDE,将其分为ABC、ABD、ABE、ACD、ACE、ADE;
3)使用Person Hash将获取的字符映射为[0,127]的整数i;
4)创建长度为128的数组a[128],其各项初始值为0,当进行1)时,每得到一个映射值i,则相应的a[i]++;
5)滑窗截止时,数组a[128]中值发生变化,找出数组的四分点Q1、Q2、Q3,即数组a[128]中25%的数据≤Q1,50%的数据≤Q2,50%的数据≤Q3;
6)根据四分点Q1、Q2、Q3对数组a[128]中的值X参照公式进行映射,再将其转换为16进制,得到最终的指纹。优选地,将得到的指纹切割为多段,和原指纹均存储到库中。
Figure BDA0003336201860000061
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本,得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
实施例3
选取三种不同大小的文本,进行实施例1步骤测试,效果如下表
Figure BDA0003336201860000062
由表中可以看出当不同大小的文件进行不同程度修改时,局部敏感哈希在文件越小,改变越大,则指纹改变位数越多,越敏感,反之,变化位数越少,这一特性,恰是同源性检测所需要的。当修改导致文件变化过大时,是不需要匹配出来的。
实施例4
选取GitHub上star>10000的10个开源项目作为测试集。对其源代码文件进行筛选,去除非代码文件,最终获得源代码文件67685个,将这些源代码文件按照此发明的方法计算指纹,存入数据库中,作为底层匹配数据。
对这些项目中的源代码文件进行适量修改,计算指纹信息,从库中匹配成分信息,结果如下表所示。经统计分析,漏报来源于个别源代码过小,整体实际变化过大,然而这类文件在同源性匹配中是可以忽略的。误报来源于修改后的文件与库中其他文件更为相似。
项目名称 文件数量(个) 匹配个数 漏报个数 误报个数
hadoop 10480 10456 24 5
linux 40173 40171 2 7
redis 3796 3776 20 0
openssl 1178 1175 3 0
elasticsearch 10771 10759 12 1
vue 376 375 1 0
zlib 91 90 1 0
react 662 657 5 0
tensorflow 65 64 1 0
spring 93 93 0 0
以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

Claims (7)

1.一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
对筛选处理后的源代码文件进行预处理,再对预处理后的源代码用大小为5的滑窗处理并进行重新组合,并使用Person Hash将获取的字符映射为[0,127]的整数,创建长度为128的数组,遍历重新组合的一系列整数找出四分点并经映射得到指纹的二进制表示,最后将其转换为得到指纹;
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找进行指纹匹配;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本并进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
2.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中预处理的方法是将输入的源代码文件中的注释和空白符无用字符去除,并转换为小写。
3.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中对预处理后的源代码用大小为5的滑窗处理,将滑窗中的字符每3位进行重新组合,保证原顺序不变且均包含首个字符。
4.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中使用Person Hash将获取的字符映射后创建长度为128的数组,其各项初始值为0,然后遍历重新组合的整数,对应数组中下标和该整数相同的项数值+1。
5.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中找出数组的四分点后根据四分点对数组中的值进行映射,得到指纹的二进制表示,再将其转换为16进制得到最终的指纹。
6.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤三中指纹匹配时查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件。
7.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤四中对应到相应的成分和版本后得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序后选定最终版本。
CN202111294922.4A 2021-11-03 2021-11-03 一种基于字符级局部敏感哈希法进行同源性检测的方法 Pending CN113946345A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111294922.4A CN113946345A (zh) 2021-11-03 2021-11-03 一种基于字符级局部敏感哈希法进行同源性检测的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111294922.4A CN113946345A (zh) 2021-11-03 2021-11-03 一种基于字符级局部敏感哈希法进行同源性检测的方法

Publications (1)

Publication Number Publication Date
CN113946345A true CN113946345A (zh) 2022-01-18

Family

ID=79337565

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111294922.4A Pending CN113946345A (zh) 2021-11-03 2021-11-03 一种基于字符级局部敏感哈希法进行同源性检测的方法

Country Status (1)

Country Link
CN (1) CN113946345A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114422389A (zh) * 2022-02-24 2022-04-29 成都北中网芯科技有限公司 一种基于哈希和硬件加速的高速实时网络数据监测方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114422389A (zh) * 2022-02-24 2022-04-29 成都北中网芯科技有限公司 一种基于哈希和硬件加速的高速实时网络数据监测方法
CN114422389B (zh) * 2022-02-24 2023-09-12 成都北中网芯科技有限公司 一种基于哈希和硬件加速的高速实时网络数据监测方法

Similar Documents

Publication Publication Date Title
CN110765458B (zh) 一种基于深度学习的恶意软件图像格式检测方法及其装置
US8244767B2 (en) Composite locality sensitive hash based processing of documents
US6119124A (en) Method for clustering closely resembling data objects
CN108595710B (zh) 一种快速的海量图片去重方法
US9292690B2 (en) Anomaly, association and clustering detection
CN110851598B (zh) 文本分类方法、装置、终端设备及存储介质
US10474818B1 (en) Methods and devices for detection of malware
US7730316B1 (en) Method for document fingerprinting
CN111868710B (zh) 搜索大规模非结构化数据的随机提取森林索引结构
US8316041B1 (en) Generation and processing of numerical identifiers
US20090319506A1 (en) System and method for efficiently finding email similarity in an email repository
CN109492118B (zh) 一种数据检测方法及检测装置
CN112579155A (zh) 代码相似性检测方法、装置以及存储介质
US20230334154A1 (en) Byte n-gram embedding model
WO2018164879A1 (en) Aggregating procedures for automatic document analysis
CN111737966B (zh) 文档重复度检测方法、装置、设备和可读存储介质
CN113946345A (zh) 一种基于字符级局部敏感哈希法进行同源性检测的方法
CN113901474A (zh) 一种基于函数级代码相似性的漏洞检测方法
CN112613310A (zh) 一种人名匹配方法、装置、电子设备及存储介质
Prilepok et al. Spam detection using data compression and signatures
US11755550B2 (en) System and method for fingerprinting-based conversation threading
WO2023154779A2 (en) Methods and systems for identifying anomalous computer events to detect security incidents
Chen et al. Email visualization correlation analysis forensics research
CN112784040B (zh) 基于语料库的垂直行业文本分类方法
Koga et al. Effective construction of compression-based feature space

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