参考链接:https://mp.weixin.qq.com/s/7WrlFUepch6JhU2NhdSyJw 侵删
spamsum
spamsum是一种用于文本、文件和二进制数据的哈希算法,它将数据压缩到一个短字符串中。spamsum的主要应用是在大规模垃圾邮件过滤中,用于查找相似的邮件和判定垃圾邮件。spamsum的算法基于局部敏感哈希(LSH)和信息熵理论,并且在相似性比较上具有高效性和准确性。spamsum不是一种加密算法,因为它可以被反向工程和暴力破解。
原理
其原理基于Rabin-Karp字符串指纹算法,通过对输入文本进行块划分和哈希运算,生成一组短字符串的指纹,然后将这些指纹合并成一个较长的指纹,从而形成一个唯一标识该文本的字符串,称为spamsum值。
生成spamsum值的过程可以分为以下几个步骤:
- 划分块:将原始文本按固定大小的块进行划分,每个块可以是单词、行或字符等。
- 计算哈希:对每个块进行哈希计算,将每个块哈希成一个固定长度的指纹,通常使用CRC-32或MD5等哈希算法。
- 合并指纹:将所有块的指纹合并成一个spamsum值,合并方法类似于计算哈希,可以使用加法或异或等运算,最终生成的spamsum值可以用于比较文本文件的相似性。
由于spamsum算法具有高效、简单和可移植性等特点,因此广泛应用于文件去重、恶意代码检测和版权保护等领域。
Nilsimsa-近似字符串比较和相似度检测
Nilsimsa 是一种局部敏感哈希算法(Locality Sensitive Hashing, LSH),用于近似字符串比较和相似度检测。它最初是为了检测垃圾邮件中的相似文本而设计的,但其应用领域已经扩展到其他领域,如文档相似度、网络安全和恶意软件检测等。
Nilsimsa 的核心思想是将文本转换为一个 256 位的哈希值,这个哈希值可以用来衡量两个文本之间的相似度。相比于其他哈希算法(如 MD5 或 SHA-1),Nilsimsa 的特点是在输入文本发生微小变化时,产生的哈希值仍然具有很高的相似度。这意味着,即使文本之间有细微的差别,Nilsimsa 仍然可以有效地检测到它们之间的相似性。
Nilsimsa 哈希值之间的相似度可以通过计算它们的汉明距离(Hamming distance)来衡量。汉明距离是两个等长字符串之间对应位置上不同字符的数量。在 Nilsimsa 的情况下,汉明距离越小,两个哈希值(及其对应的文本)之间的相似度越高。
总之,Nilsimsa 是一种局部敏感哈希算法,旨在检测文本之间的相似性。它通过生成 256 位的哈希值来表示文本,并使用汉明距离来衡量哈希值之间的相似度。这使得 Nilsimsa 能够有效地处理微小变化的文本,并在各种应用领域中检测相似度。
原理
Nilsimsa算法的原理基于统计分析和加权哈希。它通过计算输入文本字符的频率分布来生成256位的哈希值。以下是Nilsimsa算法的基本步骤:
- 初始化:创建一个长度为256的数组(称为累加器),并将所有元素初始化为0。
- 分析文本:遍历输入文本,针对每一个字节,分析其与前一个字节(也称为字节对)之间的关系。将字节对映射到累加器数组的一个特定索引,并将该索引处的值加一。
- 生成哈希值:根据累加器数组中的统计信息生成最终的256位哈希值。这个过程涉及到一系列加权和阈值判断。如果累加器中某个元素的值大于某个阈值,则在最终哈希值的相应位上设置为1,否则设置为0。
- 比较相似度:通过计算两个哈希值之间的汉明距离来衡量文本之间的相似度。汉明距离越小,相似度越高。
SSDEEP-模糊哈希-检测文件和文本相似性
SSDEEP(Secure Hash Standard-based Perceptual Image Hashing)是一种基于分块哈希的上下文触发片段(CTPH,Context-Triggered Piecewise Hashing)算法,用于检测文件和文本相似性。SSDEEP主要用于恶意软件分析、垃圾邮件过滤、侵权内容检测等场景。
原理
SSDEEP的基本原理是将输入文件或文本分成大小可变的块,并为每个块生成一个哈希值。通过比较不同文件或文本的哈希值,可以计算出相似度。以下是SSDEEP算法的基本步骤:
- 分块:将输入文件或文本分成大小可变的块。块的大小取决于文件内容和上下文触发器(例如空格、换行符等)。
- 计算哈希值:对每个块应用哈希算法(如MD5、SHA-1等),生成一个哈希值。
- 生成指纹:将所有块的哈希值连接在一起,形成一个哈希指纹。
- 比较相似度:通过计算两个哈希指纹之间的编辑距离(如Levenshtein距离)来衡量文件或文本之间的相似度。编辑距离越小,相似度越高。
SSDEEP的优点在于它能够有效地检测文件或文本之间的局部相似性,即使文件或文本经过了修改、重排或添加噪声。此外,SSDEEP算法相较于其他相似性检测算法(如Nilsimsa)具有较高的鲁棒性,能够在大量数据集上提供较好的检测性能。
imphash-恶意软件分析和分类
imphash(Import Hash)是一种特定于Windows PE(Portable Executable)文件的哈希算法,主要用于恶意软件分析和分类。它通过对PE文件导入表中的导入函数和相关库进行哈希计算,生成一个唯一的哈希值。imphash可以帮助分析人员快速识别和关联具有相似导入函数结构的恶意软件样本。
imphash的主要目的是将具有类似功能和行为的不同恶意软件样本归为一组,从而简化恶意软件家族的识别和跟踪。这种方法对于检测恶意软件变种和新型恶意软件攻击非常有用,因为它们可能在代码和行为上存在微小差异,但导入函数结构保持相似。
原理
imphash 的基本原理是基于 Windows PE(Portable Executable)文件的导入表(Import Table)生成哈希值。导入表包含了 PE 文件所依赖的外部函数和相应的 DLL 库。imphash 通过分析这些导入的函数和库来识别恶意软件样本之间的相似性。
以下是 imphash 的基本计算过程:
- 提取 PE 文件的导入表。
- 对导入表中的每个库(DLL)和相应的导入函数进行排序。
- 对每个库及其导入的函数进行字符串处理(例如,将名称转换为小写)。
- 将处理后的库和函数名称连接在一起,形成一个长字符串。
- 对这个长字符串进行哈希计算,通常使用 MD5 哈希算法。
- 生成的哈希值就是 imphash。
由于 imphash 主要关注 PE 文件导入的函数和库,因此它可以识别具有相似结构和功能的恶意软件样本,即使它们在代码和行为上存在差异。这使得 imphash 成为分析和分类恶意软件家族的有效工具。
impfuzzy-比较和识别 PE(Portable Executable)文件之间的相似性
JPCERT/CC 在 2016 年发现一旦添加了新函数,生成的导入表哈希就会完全不一样,但这样不同导入表哈希的两个样本可能仍然有很高的相似度。故而 JPCERT/CC 开发了 pyimpfuzzy。
ImpFuzzy 是一种基于导入表(Import Table)的模糊哈希算法,用于比较和识别 PE(Portable Executable)文件之间的相似性。它主要用于恶意软件分析和分类,可以在不同的恶意软件变种和家族之间找到相似性。ImpFuzzy 通过计算 PE 文件导入表的模糊哈希值来实现这一目标,其基本原理与 ssdeep 模糊哈希类似。
原理
由于 imphash 使用 MD5 就要求导入表完全一致,但 impfuzzy 使用 ssdeep 作为哈希函数可以得到更好的效果。与 imphash 的区别只是使用 ssdeep 替换 MD5 作为哈希函数,其他都与 imphash 保持一致。以下是 ImpFuzzy 的基本过程:
- 提取 PE 文件的导入表。
- 对导入表中的每个库(DLL)和相应的导入函数进行排序。
- 对每个库及其导入的函数进行字符串处理(例如,将名称转换为小写)。
- 将处理后的库和函数名称连接在一起,形成一个长字符串。
- 对这个长字符串进行模糊哈希计算。
- 生成的模糊哈希值就是 ImpFuzzy。
ImpFuzzy 的主要优势在于它能够识别具有相似结构和功能的恶意软件样本,即使它们在代码和行为上存在差异。这使得 ImpFuzzy 成为分析和分类恶意软件家族的有效工具。不同于 imphash 使用 MD5 算法生成固定长度的哈希值,ImpFuzzy 则生成模糊哈希值,能够衡量两个 PE 文件之间的相似度。
richhash-比较不同 PE 文件之间的相似性
Rich Header 是 PE(Portable Executable)文件中的一个可选部分,通常包含有关编译器和链接器版本的信息。该信息可用于识别 PE 文件的编译环境以及进一步分析恶意软件的来源和变种。
Rich Header 哈希值可以用于比较不同 PE 文件之间的相似性。由于 Rich Header 包含有关编译环境的信息,因此相似的 Rich Header 哈希值可能表示相同的编译器和链接器设置。这有助于分析和识别恶意软件家族,尤其是在结合其他特征分析方法(如 ImpHash、ImpFuzzy 或 ssdeep)的情况下。然而,值得注意的是,并非所有 PE 文件都包含 Rich Header,且恶意软件作者有时会伪造或删除这些信息以逃避检测。因此,在实际应用中,需要结合其他特征分析方法以获得更全面的分析结果。
原理
基于 Rich Header 的哈希计算过程如下:
- 从 PE 文件中提取 Rich Header。
- 对 Rich Header 进行哈希计算,可以使用诸如 MD5、SHA-1 或 SHA-256 等加密哈希函数。
richpvhash
RichPV (Rich Portable Executable (PE) header Version) 是一种用于提取PE文件中Rich Header信息的技术。Rich Header是PE文件格式的一个组件,通常包含有关编译器、链接器版本以及编译器选项等元数据。在恶意软件分析中,Rich Header信息有时被用作样本关联和家族聚类的依据。
RichPV 从数据中剔除了易变的 Rich Header 字段(Product Count)再进行计算。查找在同一系统上编译、来自同一源代码项目的文件,更适合 RichPVHash。
参考:https://github.com/modubyk/PE_Richness
Machoc-基于调用关系
Machoc 是一种用于计算可执行文件(主要是PE文件,即Portable Executable)中函数调用关系的特征值。Machoc特征值的计算方法是基于文件中函数调用的顺序和频率,能够在一定程度上反映程序的行为特点。因此,Machoc常用于恶意软件分析和分类,以发现相似的恶意软件家族或变种。
在计算Machoc特征值时,首先要识别可执行文件的函数调用指令,然后根据调用指令的特征,统计不同类型的调用指令出现的次数。最后,将这些统计数据进行归一化处理,得到一个特征值。这个特征值可以用来比较不同可执行文件之间的相似度,从而辅助恶意软件分析和分类工作。
需要注意的是,Machoc特征值并非万能的,对于使用混淆技术或动态生成函数调用的恶意软件,其准确性可能会受到影响。因此,在实际应用中,通常会结合其他特征分析方法,如ImpHash、SSDeep等,来提高分析和分类的效果。
原理
Machoc特征值的计算原理主要包括以下几个步骤:
- 提取调用指令:首先,分析可执行文件中的指令序列,提取与函数调用相关的指令。这些指令通常包括直接调用(如 call、jmp 等)和间接调用(如 call eax、jmp ecx 等)。
- 统计调用特征:对提取到的调用指令进行分类,统计不同类型的调用指令出现的次数。例如,可以统计直接调用和间接调用的次数,或者进一步细分为不同寄存器的间接调用次数。
- 归一化处理:为了消除不同可执行文件大小对统计结果的影响,需要对统计数据进行归一化处理。通常,可以使用总调用次数来对每种类型的调用次数进行归一化,从而得到一个特征向量。
- 计算相似度:根据得到的特征向量,可以计算两个可执行文件之间的相似度。常用的相似度计算方法有余弦相似度、欧氏距离等。相似度越高,表示两个可执行文件的函数调用关系越相似,从而可能属于同一个恶意软件家族或变种。
TLSH-对恶意软件聚类分析
TLSH(Trend Micro Locality Sensitive Hash)是一种基于局部敏感哈希(Locality Sensitive Hashing,简称LSH)的二进制文件相似性哈希算法。它由Trend Micro公司的研究人员开发,主要用于对恶意软件样本进行聚类分析。与其他哈希算法(如MD5、SHA1等)不同
- 局部敏感性:TLSH对输入数据的小变化具有较高的敏感性。即使两个文件仅有细微差别,TLSH值之间的距离也会明显增加。这使得TLSH适合于检测具有微小差异的文件,例如恶意软件家族的变种。
- 可度量性:TLSH哈希值之间的距离可以直接用于计算文件相似度。这意味着,通过比较TLSH哈希值,可以快速确定两个文件的相似程度。与其他相似性哈希算法(如SSDeep)相比,TLSH能更准确地度量文件之间的相似度。
- 抗噪声:TLSH对输入数据中的噪声具有一定的鲁棒性。由于恶意软件可能会通过添加无关数据、修改代码结构等手段来规避检测,具有抗噪声特性的哈希算法在这种情况下更具优势。
- 快速计算:TLSH算法的计算速度较快,可以快速处理大量文件。这对于分析大规模恶意软件样本库时具有很大优势。
总之,TLSH是一种基于局部敏感哈希的二进制文件相似性哈希算法,适用于恶意软件样本聚类和相似性分析。它具有局部敏感性、可度量性、抗噪声和快速计算等特点,能够有效地检测具有微小差异的文件。
原理
TLSH算法的基本原理是将输入文件划分为多个数据块,并计算每个数据块的特征。然后将这些特征进行编码,生成最终的TLSH哈希值。以下是TLSH算法的主要步骤:
- 数据预处理:首先,对输入文件进行预处理,包括删除空白字符、转换为小写等操作。这有助于消除文件内容中的无关差异,提高哈希值的鲁棒性。
- 数据划分:将预处理后的数据划分为多个等大小的数据块。每个数据块的大小可以根据实际需求进行调整,以平衡计算速度和准确性。
- 特征提取:对每个数据块计算一组局部特征,如数据块中字节值的频率分布、字节对的出现次数等。这些特征能够捕捉文件内容的局部信息,从而提高哈希值的局部敏感性。
- 特征编码:将提取到的特征进行编码,生成一个固定长度的哈希值。TLSH使用一种基于二进制编码的方法,将特征值映射到一个较短的哈希字符串。这使得TLSH哈希值可以快速比较,且易于存储和传输。
- 相似度计算:通过计算两个TLSH哈希值之间的距离,可以直接得到文件相似度。TLSH算法使用汉明距离(Hamming distance)作为相似度度量,它表示两个等长字符串之间对应位置上不同字符的个数。汉明距离越小,文件相似度越高。
总之,TLSH算法通过对输入文件进行预处理、数据划分、特征提取、特征编码等操作,生成具有局部敏感性和可度量性的哈希值。通过比较TLSH哈希值之间的距离,可以快速评估文件相似度,从而实现恶意软件样本的聚类和相似性分析。
PEHash
PEHash是一种特定于Windows Portable Executable (PE)文件格式的哈希算法。该算法通过提取PE文件的结构和元数据特征来生成哈希值。这种方法在恶意软件分析和相似性检测中非常有用,因为它能够识别出具有相似结构和行为的文件,即使它们在二进制层面上有所不同。
原理
PEHash的工作原理如下:
- 读取PE文件头:解析PE文件头中的关键信息,如节表、数据目录、导入表、导出表等。
- 特征提取:从PE文件中提取一系列与文件结构和元数据相关的特征。这些特征可以包括代码段和数据段的大小、导入和导出的函数数量、资源目录的项数等。
- 特征组合:将提取到的特征值组合成一个特征向量。这个特征向量可以看作是PE文件的结构和元数据的高级表示。
- 哈希计算:使用一种哈希函数(如MD5、SHA-1等)对特征向量进行哈希计算,生成一个固定长度的哈希值。这个哈希值可以用来表示PE文件的结构和元数据特征。
- 相似度比较:通过比较两个PEHash哈希值之间的距离(例如,汉明距离),可以评估文件之间的相似度。相似的文件通常具有相似的结构和元数据特征,因此它们的PEHash哈希值也会非常接近。
总之,PEHash是一种针对Windows PE文件的哈希算法,通过提取文件结构和元数据特征生成哈希值。这种方法在恶意软件分析和相似性检测中非常有用,因为它可以识别具有相似结构和行为的文件。
Authenticode PE Image Hash
Authenticode是Microsoft开发的一种数字签名技术,旨在保证软件和其他可执行文件的完整性和来源可信。Authenticode PE Image Hash是用于对Windows Portable Executable (PE)文件进行哈希计算的一种方法,作为数字签名过程的一部分。
在Authenticode签名过程中,会对PE文件的各个部分进行哈希计算,以确保文件的完整性。具体来说,Authenticode PE Image Hash涉及以下步骤:
- 将PE文件分割成多个部分:这些部分包括文件头、各个节(如代码节、数据节等)、证书表和其他元数据。需要注意的是,不是所有部分都需要进行哈希计算,例如,证书表通常会被排除在哈希计算之外。
- 计算各个部分的哈希值:使用一种哈希算法(如SHA-1、SHA-256等)对PE文件的各个部分进行哈希计算。
- 将各个部分的哈希值组合起来:将计算出的哈希值组合成一个总的哈希值。这个哈希值表示了PE文件的完整性,可以用来检测文件是否被篡改。
- 对总的哈希值进行数字签名:使用发布者的私钥对总的哈希值进行数字签名。这个签名可以用来验证文件来源的可信性。
- 将数字签名附加到PE文件:将数字签名和证书信息附加到PE文件的证书表中,以便在安装或执行过程中进行验证。
总之,Authenticode PE Image Hash是一种用于对Windows PE文件进行哈希计算的方法,作为数字签名过程的一部分。它能确保文件的完整性和来源可信,从而防止恶意篡改和伪造。
TypeRefHash
.NET 文件尽管也是 PE 格式,但导入表通常只包含 .NET 运行时(mscoree.dll),这就令 imphash 在 .NET 文件上失效了。与 imphash 类似,G Data Cyber Defense 针对 .NET 文件提出的导入表哈希就是 TypeRefHash。TypeRefHash(类型引用哈希)是一种针对.NET应用程序的分析方法,通过计算类型引用哈希值来确定程序的特征。由于.NET应用程序使用共享库(例如.NET Framework或.NET Core库),不同的应用程序可能引用相同的库和类型。TypeRefHash可以用于快速识别程序中使用的库和类型,从而确定应用程序之间的相似性或差异性。
原理
TypeRefHash的计算过程涉及以下步骤:
- 从.NET程序集(如DLL或EXE文件)中提取元数据:元数据包括类型定义、类型引用、方法定义等信息。
- 筛选类型引用:从元数据中筛选出所有类型引用。类型引用是程序中使用的外部类型,通常来源于共享库。类型引用的示例包括System.String、System.IO.File等。
- 计算类型引用的哈希值:使用哈希算法(如SHA-1、SHA-256等)对筛选出的类型引用进行哈希计算。
- 将计算出的哈希值组合起来:将各个类型引用的哈希值组合成一个总的哈希值。这个哈希值表示了.NET程序的特征,可以用来比较不同程序之间的相似性和差异性。
TypeRefHash可以应用于恶意软件分析和相似性比较。例如,安全研究人员可以使用TypeRefHash来识别恶意软件家族中的新变种,或者比较不同的恶意软件样本以确定它们是否属于同一个家族。
Dhash
常有恶意软件将图标修改为 Office 等常用程序来欺骗用户,业界发现 PE 文件的图标可用于聚类相似样本。VirusTotal 和 Malwarebazaar 都支持 dhash 来跟踪相似样本,JoeSecurity 沙盒用使用 dhash,当然这种相似很多时候并非是同源的。DHash(差异哈希)是一种用于图像相似度比较的哈希方法。它通过计算相邻像素之间的差异来生成图像的指纹。DHash相对于其他哈希算法(如MD5、SHA-1等)具有更高的鲁棒性,能够在图像有轻微变化(如缩放、旋转、亮度调整等)的情况下仍然保持相似的哈希值。这使得DHash在图像搜索、图像去重以及相似图像检测等领域具有广泛的应用。
原理
DHash的计算过程通常包括以下步骤:
- 缩放图像:将输入图像缩放为一个较小的尺寸,例如8×8像素。这样可以降低计算复杂度,同时减小图像变化对哈希值的影响。
- 转换为灰度图像:将缩放后的彩色图像转换为灰度图像。这可以进一步降低计算复杂度,并且在大多数情况下,颜色信息对图像相似度比较的影响较小。
- 计算像素差异:计算相邻像素之间的差异。这可以通过比较每个像素与其右侧(或左侧、上侧、下侧)相邻像素的亮度值来实现。如果当前像素的亮度值大于相邻像素的亮度值,则将该位置的差异值设为1;否则设为0。
- 生成哈希值:将计算出的像素差异值组合成一个二进制串,然后将该二进制串转换为相应的十六进制哈希值。
DHash的主要优势在于其计算简单且对图像的轻微变化具有较高的鲁棒性。然而,对于图像的较大变化(如翻转、高度旋转等),DHash可能无法有效地识别相似图像。在这些情况下,可能需要使用其他更复杂的图像特征提取和相似度比较方法。
vhash-结构特征计算的哈希
VirusTotal 在 2020 年提出的,基于文件结构特征计算的哈希。VirusTotal 并未在公开场合讲述该算法的更多细节,但很多安全研究人员均表示该算法有效性尚可。
behash
VirusTotal 基于样本在沙盒中的行为计算的哈希,与 vhash 类似的 VirusTotal 也从未在公开场合讲述该算法的更多细节,计算方式不得而知。
SDHash-模糊哈希
2010 年提出的模糊哈希算法,通过查找文件中随机发现的概率最低的序列,SDHash 弥补了 ssdeep 的准确性和可扩展性缺陷。
SDHash 选择二进制文件中统计上不可能的特征,筛选出弱特征并使用布隆过滤器来支持不同大小对象的比较。
在 CODASPY 2018 中实验研究了四个哈希算法的效果,SDHash 的成绩相当好,但是比 TLSH 还是更差。
sdhash 比 ssdeep 准确度更高,其优势在片段比较而非全文件比较。
TELFHash
2020 年 4 月,趋势科技发布了 TELFHash(Trend Micro ELF Hash)。TELFHash 类似于 ELF 文件的导入表哈希。
TELFHash 利用 TLSH 代替 MD5 作为哈希函数。通过 ELF 文件的符号表获取 ELF 文件的导入函数。
Lempel-Ziv Jaccard
2017 年提出、用于为任意字节序列计算距离的算法,设计用于替换归一化压缩距离(Normalized Compression Distance,NCD)。Lempel-Ziv Jaccard (LZJD) 是一种用于测量两个数据对象之间相似性的算法。LZJD 基于 Lempel-Ziv 复杂度,该复杂度可以捕捉数据中的重复模式。与其他相似性度量方法(如哈希方法)相比,LZJD 更加稳健,对于噪声和较小的变化具有更强的容忍性。
原理
LZJD 的基本工作原理如下:
- 将输入数据对象(例如文件、文档等)进行 Lempel-Ziv 编码,生成一个词典,该词典包含了输入数据中的重复模式。
- 使用 Jaccard 相似性指数来比较两个词典,计算它们之间的相似性。Jaccard 相似性指数是两个集合交集与并集之比,取值范围为 0(完全不相似)到 1(完全相似)。
LZJD 算法在多个领域都有广泛的应用,例如:
- 恶意软件分析:通过比较恶意软件样本的 LZJD 值,分析人员可以找到具有相似行为的恶意软件家族或变种。
- 文本相似性检测:LZJD 可用于检测不同语言的文本之间的相似性,例如查重或翻译检测。
- 图像和视频相似性检测:LZJD 可以用于找到具有相似内容的图像或视频,即使它们的像素值有较大差异。
总之,Lempel-Ziv Jaccard 算法是一种鲁棒的相似性度量方法,适用于各种数据类型和领域。
mvHash-B
mvhash 是基于多数投票的模糊哈希,分为 mvHash-B 与 mvHash-L 两种。其中 mvHash-B 算法是在 2013 年提出的。
mvHash-B 将输入转换为等长度的 0x00 或者 0xFF 字节序列,在用 RLE 编码压缩后再利用改进的布隆过滤器生成等长的哈希值(2018 bit)。
根据测试,mvHash-B 比 sdHash 更好
mrsh-v2
2012 年发布的 MRSH-V2(Multiresolution Similarity Hashing-v2)相比 MRSH 在效率和性能上均有所改进。其整合了 ssdeep 和 sdhash,声称改进了 ssdeep 的安全性。
在七个字节的滑动窗口上使用滚动哈希,再使用 FNV-1A 哈希函数对每个块进行哈希,并将结果分成五个子哈希,每部分的 k×log2(m) 位用于寻址布隆过滤器。
模糊哈希
模糊哈希可分为以下四种类型:
上下文触发分段哈希(Context Triggered Piecewise Hashing,CTPH)
为了避免哈希随文件变大而无限变长,块大小不固定而是依赖触发点,触发点依据样本大小计算而来,如 ssdeep。尽管样本对齐问题并不像 BHB 那样明显,但其实仍然限于大小差不多的相对较小的文件,为了提高检测能力就可以像 ssdeep 一样使用两个不同的值作为块大小的触发点。
基于块的哈希(Block-Based Hashing,BHB)
为固定大小的块创建哈希,但通常用于数字取证,如 dcfldd。因为文件越大,哈希越长,这样是没法应用在样本狩猎的应用场景下的。
基于块的重构(Block-Based Rebuilding,BBR)
使用辅助数据重构文件,如 mvhash-B 通过多数投票将文件的每个字节与相邻字节进行比较,将文件的每个字节映射到 FF 或 00 上,再由字节序列组成哈希。