SSDEEP分析二进制文件的相似性

本文探讨了SSDEEP在安全分析中的应用,介绍了如何使用Python接口进行文件哈希计算,比较文件相似度,并揭示了最大结果长度的原理。通过实例演示了如何安装ssdeep工具,以及如何利用其在取证、恶意代码检测和漏洞挖掘中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文讨论内容涉及如何使用SSDEEP、python调用SSDEEP和SSDEEP的计算块最大的大小。

背景

安全分析里经常会遇到一个场景,当一个文件被人为有意或无意地操作变化变成了一个新的文件,例如,有意的情况有作者改动文本内容、恶意代码自动填充垃圾字节等变化;无意的情况有传输出错、磁盘存储出错等。如何衡量这些文件的是否发生变化,如何有效比较两个文件是否有差异是否相似,成了取证分析和病毒分析里经常要面对的问题。

针对上面的场景,业内比较程序办法是采用模糊哈希进行比较,模糊哈希算法又叫基于内容分割的分片哈希算法(context triggered piecewise hashing, CTPH),主要用于文件的相似性比较。

2006年,Jesse Kornblum 提出CTPH,并给出一个名为spamsum的算法实例。随后,Jason Sherman开发了ssdeep工具以实现这一算法。该算法最初用于取证,后来被用于恶意代码检测,最近又有用于开源软件漏洞挖掘等。

模糊哈希的主要原理是,使用一个弱哈希计算文件局部内容,在特定条件下对文件进行分片,然后使用一个强哈希对文件每片计算哈希值,取这些值的一部分 并连接起来,与分片条件一起构成一个模糊哈希结果。使用一个字符串相似性对比算法判断两个模糊哈希值的相似度有多少,从而判断两个文件的相似程度。

对文件的部分变化(包括在多处修改、增加、删除部分内容),使用模糊哈希均能发现与源文件的相似关系,是目前判断相似性较好的一种方法。

安装

无论是Ubuntu的apt-get还是OS X上的brew都可以直接安装,也有相应的Windows版本。

brew install ssdeep

计算单个文件的SSDEEP哈希

ssdeep -b webshell.php

会的到一个结果由“计算块的大小:长哈希:短哈希,文件名”的结果

3:sYrXkI6xmFqXDKaHFXVe4KUNvVXFUNvedrM:sYrpWEaHFP3G8M,"test.py"

批量比对筛选相似度90以上的的结果,result.txt存放了一些ssdeep结果。

ssdeep -t 90 -bm result.txt webshell/*

python接口

 pip install ssdeep

任何可以被二进制都可以进行计算,包括支持从文件输入进行扫描。

https://python-ssdeep.readthedocs.io/en/latest/index.html#

主要函数是ssdeep.hash_from_file()

>>> ssdeep.hash_from_file('/etc/resolv.conf')
'3:S3yE29cFrrMOoiECAaHJgvn:S3m+COoiUCuvn'

相似度比较

>>> import ssdeep
>>> hash1 = ssdeep.hash('Also called fuzzy hashes, Ctph can match inputs that have homologies.')
>>> hash1
'3:AXGBicFlgVNhBGcL6wCrFQEv:AXGHsNhxLsr2C'
>>> hash2 = ssdeep.hash('Also called fuzzy hashes, CTPH can match inputs that have homologies.')
>>> hash2
'3:AXGBicFlIHBGcL6wCrFQEv:AXGH6xLsr2C'
>>> ssdeep.compare(hash1, hash2)
22

compare函数会返回一个0-100的值,值越大越相似,100表示完全一样。

最大长度结果

ssdeep计算的哈希值的最大长度的任何信息。

根据源码的头文件fuzzy.h及其documentation的描述。

存在一个常量FUZZY_MAX_RESULT,它定义了148 ASCII字符/字节的哈希值的最大长度:

#define SPAMSUM_LENGTH 64
#define FUZZY_MAX_RESULT (2 * SPAMSUM_LENGTH + 20)
<think>嗯,用户想了解ssdeep库或工具的使用方法,包括安装和使用。首先,我需要回忆一下ssdeep的基本信息。ssdeep是一个用于模糊哈希的库,常用于文件相似性比较或数据匹配,比如恶意软件分析。用户提到的项目是python-ssdeep,这是Python的一个封装库。 首先,我应该先检查安装步骤。在Linux系统下,安装通常需要先安装依赖库,然后通过pip安装python-ssdeep。需要确保用户是否有正确的权限,是否需要使用sudo。对于Windows用户,可能需要预编译的二进制文件,但有时候安装可能会遇到问题,比如依赖缺失,这时候需要提醒用户可能需要注意的地方。 接下来是基本使用方法,比如如何生成模糊哈希,比较相似度。这里需要给出具体的代码示例,比如调用ssdeep.hash_from_file()函数。同时,要注意不同版本之间的API变化,比如旧版本可能函数名不同,需要指出这点避免用户混淆。 另外,用户可能遇到的问题,比如安装失败,这时候需要提供常见解决方法,比如安装libffi-dev等依赖库,或者使用虚拟环境。还有,比较哈希时的阈值设置,可能需要解释一般建议的匹配阈值是多少,帮助用户理解结果。 还要考虑用户的应用场景,比如恶意软件分析或数据去重,说明ssdeep在这些场景下的作用。同时,相关问题部分需要生成相关的问题,引导用户进一步学习,比如如何提高比较准确性,或者与其他哈希的区别。 需要确保回答的结构清晰,步骤明确,代码正确,并且引用提供的参考链接。不过,用户给的引用中,引用[1]是python-ssdeep的项目地址,引用[2]是C#的文件加密解密,可能和当前问题关联不大,所以主要引用引用[1]。但要注意用户的问题是关于ssdeep的安装和使用,所以需要围绕这个展开。 最后,确保使用中文回答,符合格式要求,数学公式正确(虽然这个问题可能用不到太多数学公式,但如果有的话要检查),并且生成的相关问题有意义,能帮助用户深入理解。</think>### ssdeep模糊哈希库安装及使用指南 ssdeep是用于文件模糊哈希计算的开源工具,可识别相似文件(如恶意软件变种检测)[^1]。以下是详细步骤: 一、安装方法 1. Linux系统安装: ```bash sudo apt-get install ssdeep libffi-dev # 安装底层库 pip install ssdeep # 安装Python绑定 ``` 2. Windows安装: ```powershell # 需先安装Microsoft Visual C++ Build Tools pip install ssdeep ``` 二、基本使用 ```python import ssdeep # 生成文件哈希 file_hash = ssdeep.hash_from_file("sample.exe") print(f"模糊哈希值:{file_hash}") # 输出示例:3:axx...:Bxx... # 比较相似度 hash1 = ssdeep.hash_from_file("file1.txt") hash2 = ssdeep.hash_from_file("file2.txt") similarity = ssdeep.compare(hash1, hash2) print(f"相似度得分:{similarity}/100") # 超过70分通常认为相关 ``` 三、典型应用场景 1. 恶意软件变种检测 2. 文档相似性分析 3. 数据去重处理 四、常见问题解决 1. 安装报错时尝试: ```bash sudo apt-get install python3-dev libffi-dev ``` 2. 旧版本API差异: ```python # 2.x版本使用 from ssdeep import fuzzy_hash fuzzy_hash(data) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值