模糊散列API和模糊散列工具
作者:Sec-Labs | 发布时间:
项目介绍
基于C、C++编写的模糊测试hashing api的工具
项目地址
https://github.com/ssdeep-project/ssdeep
使用方法
**** 模糊散列API ****
这个文件记录了模糊散列的API。关于如何使用
ssdeep的信息可以在man page中找到。在*nix
系统中,你可以通过以下方式查看该文件。
$ man ./ssdeep.1
Windows用户可以从README.TXT中获得ssdeep的使用信息。
**在你自己的程序中使用API **
你可以在你自己的程序中使用模糊散列的API,具体做法是
以下几点
1. 包括模糊散列的头文件
#include <fuzzy.h>.
2. 调用其中一个函数。
* 模糊散列一个缓冲区的文本。
int fuzzy_hash_buf(const unsigned char *buf,
uint32_t buf_len,
char *result);
这个函数计算缓冲区'buf'的模糊哈希值,并将结果存入
结果。在调用这个函数之前,你必须将结果分配为可以容纳FUZZY_MAX_RESULT
字符,然后再调用此函数。缓冲区的长度应该
通过buf_len传入。用户有责任将文件名附加到
如果有的话,用户有责任将文件名附加到输出中。该函数成功时返回0。
错误时返回1。
* 模糊散列一个文件。
事实上,有两种方法可以模糊哈希一个文件。如果你已经
有一个开放的文件句柄,你就可以使用。
int fuzzy_hash_file(FILE *handle,
char *result);
这个函数计算handle所指向的文件的模糊哈希值
指向的文件的模糊哈希值,并将结果存储在结果中。你必须分配结果来容纳
FUZZY_MAX_RESULT字符,然后再调用这个函数。用户有责任在文件中加入
用户有责任将文件名附加到输出中。
该函数成功时返回0,错误时返回1。
另一个用于哈希文件的函数需要一个文件名。
int fuzzy_hash_filename(const char * filename,
char * result);
和上面的函数一样,这个函数将模糊哈希的结果
在参数result中。你必须分配result以容纳
FUZZY_MAX_RESULT字符,然后再调用此函数。
* 比较两个模糊哈希签名。
int fuzzy_compare(const char *sig1, const char *sig2);
这个函数返回一个从0到100的值,表示两个签名的匹配度。
表示两个签名的匹配分数。匹配分数为零表示
签名不匹配。
3. 编译
使用gcc来编译程序。
$ gcc -Wall -I/usr/local/include -L/usr/local/lib sample.c -lfuzzy
使用mingw。
C:\> gcc -Wall -Ic:\path\to\includes sample.c fuzzy.dll
使用Microsoft Visual C(MSVC)。
套用MinGW文档的说法。
http://www.mingw.org/mingwfaq.shtml#faq-msvcdll。
Windows ssdeep软件包包括一个Win32 DLL和一个.def文件。虽然
MSVC用户不能直接使用DLL,但他们可以使用微软的LIB工具轻松地创建一个.lib文件。
使用微软的LIB工具。
C:\> lib /machine:i386 /def:fuzzy.def
然后你就可以使用生成的库来编译你的程序了。
C:\> cl sample.c fuzzy.lib
** 样本程序 **
一个使用API的示例程序在sample.c中。
** 参见 **
- Jesse D. Kornblum, "使用上下文触发的分片散列识别几乎相同的文件
触发的分片散列",数字调查,3(S):91-97。
September 2006, http://dx.doi.org/10.1016/j.diin.2006.06.015,
第六届年度数字取证研究研讨会论文集