模糊散列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,
第六届年度数字取证研究研讨会论文集

 

标签:工具分享, 思路分享, 学习笔记