OALabs/hashdb

GitHub: OALabs/hashdb

一个社区驱动的恶意软件哈希算法库,帮助逆向工程师通过哈希值快速还原被混淆的 API 名称和字符串。

Stars: 398 | Forks: 74

overview_hashdb ![AWS Deploy](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0010792930014243.svg) [![Chat](https://img.shields.io/badge/chat-Discord-blueviolet)](https://discord.gg/cw4U3WHvpn) [![Support](https://img.shields.io/badge/Support-Patreon-FF424D)](https://www.patreon.com/oalabs) # HashDB HashDB 是一个由社区贡献的哈希算法库,主要用于恶意软件分析。 ## 如何使用 HashDB HashDB 可以作为独立的哈希库使用,但它同时也为 OALabs 运营的 [HashDB 查询服务](https://hashdb.openanalysis.net) 提供数据支持。该服务允许分析人员逆向哈希,并获取经过哈希处理的 API 名称和字符串值。 ### 独立模块 HashDB 可以像任何标准的 Python 模块一样被克隆并用于你的逆向工程脚本中。以下是一些示例代码。 ``` >>> import hashdb >>> hashdb.list_algorithms() ['crc32'] >>> hashdb.algorithms.crc32.hash(b'test') 3632233996 ``` ### HashDB 查询服务 OALabs 运营着一个免费的 [HashDB 查询服务](https://hashdb.openanalysis.net),可用于在哈希表中查询 HashDB 库中列出的任何哈希。哈希表中包含了完整的 Windows API 集合,以及恶意软件中使用的许多常见字符串。你甚至可以添加自己的字符串! #### HashDB IDA 插件 HashDB 查询服务提供了一个 IDA Pro 插件,可用于直接在 IDA 中自动执行哈希查询! 你可以从 GitHub [此处](https://github.com/OALabs/hashdb-ida) 下载该客户端。 ## 如何添加新哈希 HashDB 依靠社区的支持来保持我们哈希库的时效性!我们的目标是让贡献者从首次提交到发出 PR,添加一个新哈希的时间**不超过五分钟**。为了实现这一目标,我们提供了以下简化流程。 1. 确保该哈希算法尚未存在……我们知道这听起来有点傻,但请仔细检查一遍。 2. 创建一个具有描述性名称的分支。 3. 在 `/algorithms` 目录中添加一个新的 Python 文件,并以你的哈希算法命名。尽量使用该算法的官方名称,如果它是特定的,请使用其所对应的特定恶意软件的名称。 4. 使用以下模板来设置你的新哈希算法。所有字段均为必填项,且区分大小写。 #!/usr/bin/env python DESCRIPTION = "your hash description here" # Type 可以是 'unsigned_int' (32bit) 或 'unsigned_long' (64bit) TYPE = 'unsigned_int' # Test 必须匹配字符串 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' 的精确 hash TEST_1 = hash_of_string_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 def hash(data): # your hash code here 5. 仔细检查你的 Python 代码风格,我们在 Python 3.9 上使用 Flake8。你可以在 git 仓库的根目录下本地尝试以下 lint 命令。 pip install flake8 flake8 ./algorithms --count --select=E9,F63,F7,F82 --show-source --statistics 6. 使用我们的测试套件在本地测试你的代码。在 git 仓库的根目录下运行以下命令。请注意,你必须将 pytest 作为模块运行,而不是直接运行,否则它将无法识别我们的测试目录。 pip install pytest python -m pytest 7. 发起 pull request —— 你的新算法将自动进入测试队列,如果测试成功,它将被合并。 就是这样!你的新哈希不仅可以在 HashDB 库中使用,还会为 [HashDB 查询服务](https://hashdb.openanalysis.net) 生成新的哈希表,你可以立即开始逆向哈希! ### ❗新哈希规则 在 `/algorithms` 目录之外进行更改的 PR 不属于我们自动化 CI 的一部分,将受到额外的审查。 所有哈希必须在 `DESCRIPTION` 字段中具有有效的描述。 所有哈希必须在 `TYPE` 字段中具有 `unsigned_int` 或 `unsigned_long` 类型。HashDB 目前仅接受无符号的 32 位或 64 位哈希。 所有哈希必须在 `TEST_1` 字段中包含字符串 __ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789__ 的哈希值。 所有哈希必须包含一个 `hash(data)` 函数,该函数接收一个字节串并返回该字符串的哈希值。 ### 添加自定义 API 哈希 某些哈希算法会对模块名和 API 分别进行哈希,并将这些哈希组合起来以创建一个单一的模块+API 哈希。这方面的一个例子是标准的 [Metasploit ROR13 哈希](https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/x86/src/hash.py)。这些算法无法与标准词表配合使用,需要包含模块名和 API 的自定义词表。为了处理这些情况,我们允许使用仅对部分单词返回有效哈希的自定义算法。 添加自定义 API 哈希需要以下额外组件。 1. `TEST_1` 字段必须设置为 4294967294 (-1)。 2. 对于所有无效的哈希,哈希算法必须返回值 4294967294。 3. 必须添加额外的 `TEST_API_DATA_1` 字段,其中包含对该算法有效的示例单词。 4. 必须添加额外的 `TEST_API_1` 字段,其中包含 `TEST_API_DATA_1` 字段内容的哈希值。 ## 站在巨人的肩膀上 非常感谢 FLARE 团队在 [shellcode_hashes](https://github.com/fireeye/flare-ida/tree/master/shellcode_hashes) 方面所做的努力。许多年前,这个项目为快速简便的恶意软件哈希逆向树立了标杆,至今它仍然是一个极其有用的工具。那么为什么要重复造轮子呢? 坦白说,这完全是为了词表和可用性。我们看到现在的恶意软件已经开始大量转向对各种字符串使用哈希,而以前那种仅仅将所有 Windows 的 DLL 导出项进行哈希的方法已经不够用了。我们想要一种能够持续处理数以百万计的注册表项和值、文件名以及进程名的解决方案。并且我们希望通过 REST API 提供这些数据,以便我们不仅能在静态分析工具中,还能在自动化工作流中使用它。话虽如此,如果没有 shellcode_hashes,也就没有我们的今天,所以我们要将荣誉归于应得之人 🙌

标签:DAST, 哈希算法, 威胁情报, 安全规则引擎, 开发者工具, 恶意软件分析, 漏洞利用检测, 逆向分析, 逆向工具