QtCipherSqlitePlugin插件使用 (3)

写在前面

  • 关于使用 QtCipherSqlitePlugin 插件加密的一些注意事项。比如,修改默认加密算法的某些关键值
  • 如果 还没有读过作者的文档, 请移步到这里
  • 之前笔者也做过逆向,SqliteCipher加密原来是将密码和锁放在了本地, 看来本地加密文件蛮失望的。 😄
  • 显然, 只要知道了密码, 剩下的都不是问题了。
  • 那么, 密码怎么来? 如果你的密码是从写在本地的(程序内), 那么 IDA 就是密码查找工具。 很轻松就能找到代码中的密码。 什么, 密码放在服务器? 哈哈,找出密码还有其他的攻击方式, 具体的方法,这里不展开了。 (有点跑题了)

本文目标

  • 关于 SqlieCipher 加密
  • 修改源码,尽量避免和他人的一致

QtCipherSqlitePlugin 加密

  • QtCipherSqlitePlugin插件内部调用了 sqlite3_rekey 函数 实现密钥的增加、变更和解除
  • 加密源码分析,文件sqlitecipher.cppopen函数 做了一些关于加密算法解析的逻辑
  • open 函数直接将密码password参数传给了sqlite3_rekey函数,
  • sqlite3_rekey函数声明如下
/*
** Change the key on an open database.
** If the current database is not encrypted, this routine will encrypt
** it.  If pNew==0 or nNew==0, the database is decrypted.
**
** Arguments:
**   db       - Database to be encrypted
**   zDbName  - Name of the database (e.g. "main")
**   pKey     - Passphrase
**   nKey     - Length of passphrase
*/
SQLITE_API int sqlite3_rekey(sqlite3* db, const void* pKey, int nKey);

第一个参数: 是哪个数据库, 第二个参数-密钥, 第三个参数-密钥长度

QtCipherSqlitePlugin 插件源码算法的一些设置

  • 尽量避免和他人的该插件源码一致。 可对加密算法做一些修改。
  • 文件sqlitecipher.cppopen函数做做一些修改, 在算法默认值的范围内修改算法的一些初始值和条件。
  • 以插件支持的 SQLCipher: AES 256 Bit CBC - SHA1 HMAC 算法为例, 可以修改下面的参数
  • 代码哪里修改呢? 文件sqlitecipher.cppopen函数:
  • 加密算法说明,官方也有对应的算法说明,请移步

最后

  • 如果你使用SqliteCipher加密了本地文件, 且本地加密的文件中存放了非常敏感的信息,那么,劝你改用其他的方式对信息加密, 这本身就不保险。
posted @ 2023-03-25 01:08  mohist  阅读(224)  评论(0编辑  收藏  举报