使用密钥解密 SQLite 数据库

逆向工程 加密 解密
2021-07-02 19:10:05

我有一个 SQLite 数据库,其中包含可以用免费但专有的软件打开的字典(只有单词和定义)。要使用该软件,它需要一个“解锁”键,我有。我可以在这个程序中看到它,但我想操纵数据并重新排列它。目前,我在 Fiverr 上付钱给自由职业者以将每个条目复制/粘贴到文本文档中。老派刮痧。

我可以在 SQL 查看器(如 DBBrowser for SQLite)中打开这些文档。条目列表采用纯文本格式,但定义采用 BLOB 格式。我试过 hex(),但没有用。我以为有什么地方可以粘贴我的密钥来解密它,但我找不到那个。我应该在这里做什么?

  • 我有数据库
  • 我在读取它的软件中拥有解锁它所需的密钥
  • 我有读取它的软件

这是我第一次涉足逆向工程,因此感谢您的帮助和耐心。

1个回答

SQLite存在一个官方加密插件,但从您的描述来看,它听起来更像是数据只是加密存储在 blob 中,应用程序在显示其内容之前在内部对其进行解密,但是:

  • 我们不知道确切的加密算法
  • 我们不知道您输入的密码是如何转换成解密密钥的
  • 我们不知道解密后的数据是如何转换成你在屏幕上看到的

要解决您的问题,您需要找到这些问题的答案(可能还有我没有想到的其他问题)。您可以通过猜测和尝试不同的算法来尝试做到这一点,但我怀疑您会因此而走运。

如果我必须这样做,我可能会这样进行:

  1. 反汇编或调试二进制文件并识别 SQLite API 函数,可能通过查看对数据库/表/列名称的引用和/或将编译后的代码与 SQLite 源代码进行比较。
  2. 检查从数据库检索到的数据做了什么,看看是否有任何处理它的函数看起来像解密函数(例如,使用标准加密常量或具有特定的循环结构)。
  3. 查看解密密钥的来源并尝试弄清楚它是如何从密码中派生出来的(可选,因为我们可以只使用来自调试器的最终密钥)
  4. 如果解密数据的结构不明显,请检查它是如何解析和输出的。

PS 对于技术含量较低的解决方案,您可以尝试一些 UI 自动化解决方案(例如可能是 AutoIt),但这超出了本网站的范围。