Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/jessek/hashdeep
哈希分析取证分析数据恢复数字取证
GitHubjessek/hashdeep

hashdeep

跨平台哈希工具集,用于计算消息摘要(MD5,SHA-1,SHA-256,Tiger,Whirlpool),支持递归目录遍历和文件完整性审计功能。

查看仓库
78613599年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

这是md5deep,一套跨平台工具,用于计算任意数量文件的哈希值(或消息摘要),同时可选择递归遍历目录结构。它还可以接收已知哈希列表,并显示输入文件中哈希值与已知哈希值匹配或不匹配的文件名。此版本支持MD5、SHA-1、SHA-256、Tiger和Whirlpool哈希。

有关版本间变更的列表,请参阅NEWS文件。

有关本程序许可信息,请参阅COPYING文件。

有关(通用)编译和安装说明,请参阅INSTALL文件。以下是在大多数情况下可正常工作的简要说明:

root@kitploit:~
sh bootstrap.sh # 运行 autoconf, automake
./configure
make
make install

请注意,要安装到默认位置,通常需要root权限。sudo命令对此很有帮助。您可以使用configure脚本的--prefix选项指定其他安装位置。例如,要安装到/home/foo/bin,请使用:

$ ./configure --prefix=/home/foo

有关如何使用该程序的完整文档,请访问项目主页:https://github.com/jessek/hashdeep

发布版本哈希

最新版本为4.4。以下是Win32版本的哈希值:

  • MD5 047ff5311d821f667150f37695bd01b3
  • SHA256 d5e85933e74e5ba6a73f67346bc2e765075d26949c831a428166c92772f67dbc

md5deep 对比 hashdeep

出于历史原因,当程序以“hashdeep”和“md5deep”名称运行时,具有不同的选项和功能。

hashdeep具有名为“audit”的功能,可以使用已知哈希列表来审核一组FILES。错误报告到标准错误。如果未指定FILES,则从标准输入读取。

root@kitploit:~
-a 审计模式。每个输入文件与已知集进行比较。如果每个输入文件正好与已知集中的某一个文件匹配,则审计通过。任何冲突、新文件或丢失文件都会导致审计失败。单独使用此标志会产生一条消息,即"Audit passed"或"Audit Failed"。
   -v = 打印每个类别的文件数量
   -v -v = 打印所有差异
   -v -v -v = 打印所检查的每个文件以及每个已知文件的结果。

-k <file> - 必须使用 -k 选项来加载审计文件

执行审计:

root@kitploit:~
hashdeep -r dir  > /tmp/auditfile            # 生成审计文件
hashdeep -a -k /tmp/auditfile -r dir          # 测试审计

请注意,审计是使用标准的hashdeep输出文件进行的(在内部,审计是作为哈希过程的一部分计算的)。

Unicode 问题

基于POSIX的现代计算机系统将文件名视为一个字节序列,其显示方式由应用程序决定。这意味着文件名通常包含ASCII,但也可以包含UTF-8、UTF-16、latin1甚至无效的Unicode编码。

基于Windows的系统有一套用于基于ASCII的文件名的API调用,另一套用于编码为UCS-2的文件名,根据wikipedia的说法,UCS-2“通过简单地使用码点作为16位代码单元来产生固定长度的格式,并且对于0-0xFFFF范围内的63,488个码点,产生与UTF-16完全相同的结果”。但维基百科的讨论页上对此声明的准确性存在争议。显然,没有人完全确定Windows实际上做了什么,而Windows本身可能并不一致。

本程序版本3通过使用TCHAR变量在Windows上保存文件名,并在打印时拒绝打印它们,而是打印“?”来解决此问题。本程序版本4会尽快将TCHAR字符串转换为std::string字符串,使用Windows函数WideCharToMultiByte。已添加标志以在打印Unicode时进行转义。

(显然)在Windows上没有办法打开UTF-8文件名;需要使用MultiByteToWideChar将其转换回多字节文件名。

幸运的是,我们实际上几乎不需要转换回来。

请注意,在Windows上,被哈希的文件可以包含Unicode字符,但包含哈希值的文件必须具有ASCII名称。

为WINDOWS编译:

-D_UNICODE 导致 TCHAR 被定义为 'wchar_t'。

为POSIX编译:

-D_UNICODE 未定义,导致 TCHAR 被定义为 'char'。

以前,win32函数使用#ifdef语句控制,如下所示:

root@kitploit:~
#ifdef _WIN32
  _wfullpath(d_name,fn,PATH_MAX);
#else
  if (NULL == realpath(fn,d_name))
    return TRUE;
#endif

还有一个名为tchar-local.h的文件,它实际上在不同的平台上改变了函数的语义,例如:

root@kitploit:~
   #define  _tcsncpy   strncpy
   #define  _tstat_t   struct stat

这使得代码非常难以维护。

在4.0重写中,我们更改了这段代码,使用了返回对象的C++函数,并避免使用#define,这样在_WIN32系统上,函数realpath()在其使用之前被定义,而主线代码中则没有realpath()函数。您可以在cycles.cpp中看到这一点:

root@kitploit:~
/* 在Windows和POSIX系统上返回UTF-8格式的规范化绝对路径 */
std::string get_realpath(const TCHAR *fn)
{
#ifdef _WIN32
    /*
     * 将相对路径扩展为完整路径。
     * http://msdn.microsoft.com/en-us/library/506720ff(v=vs.80).aspx
     */
    TCHAR absPath[PATH_MAX];
    if(_fullpath(absPath,fn,PAT_HMAX)==0) return "";
    return tchar_to_utf8(absPath);
#else
    char resolved_name[PATH_MAX];	//
    if(realpath(fn,resolved_name)==0) return "";
    return string(resolved_name);
#endif
}

您可以安装mingw,然后简单地使用类似以下方式配置:

$ export PATH=$PATH:/usr/local/i386-mingw32-4.3.0/bin $ ./configure --host=i386-mingw32

哈希算法参考

MD5算法定义于RFC 1321: http://www.ietf.org/rfc/rfc1321.txt

SHA1算法定义于FIPS 180-1: http://www.itl.nist.gov/fipspubs/fip180-1.htm

SHA256算法定义于FIPS 180-2: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

Tiger算法定义于: http://www.cs.technion.ac.il/~biham/Reports/Tiger/

Whirlpool算法定义于: http://planeta.terra.com.br/informatica/paulobarreto/WhirlpoolPage.html

操作原理

  • main.cpp
    • 设置系统
  • dig.cpp
    • 遍历各个目录
    • 对每个要哈希的文件调用 hash.cpp 中的 hash_file()
  • hash.cpp
    • 执行每个文件的哈希计算
  • display.cpp
    • 存储/显示结果
下载工具