QtCipherSqlitePlugin插件使用 (3)
写在前面
- 关于使用 QtCipherSqlitePlugin 插件加密的一些注意事项。比如,修改默认加密算法的某些关键值
- 如果 还没有读过作者的文档, 请移步到这里
- 之前笔者也做过逆向,SqliteCipher加密原来是将密码和锁放在了本地, 看来本地加密文件蛮失望的。 😄
- 显然, 只要知道了密码, 剩下的都不是问题了。
- 那么, 密码怎么来? 如果你的密码是从写在本地的(程序内), 那么 IDA 就是密码查找工具。 很轻松就能找到代码中的密码。 什么, 密码放在服务器? 哈哈,找出密码还有其他的攻击方式, 具体的方法,这里不展开了。 (有点跑题了)
本文目标
- 关于 SqlieCipher 加密
- 修改源码,尽量避免和他人的一致
QtCipherSqlitePlugin 加密
- QtCipherSqlitePlugin插件内部调用了 sqlite3_rekey 函数 实现密钥的增加、变更和解除
- 加密源码分析,文件sqlitecipher.cpp中 open函数 做了一些关于加密算法解析的逻辑
- 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.cpp中 open函数做做一些修改, 在算法默认值的范围内修改算法的一些初始值和条件。
- 以插件支持的 SQLCipher: AES 256 Bit CBC - SHA1 HMAC 算法为例, 可以修改下面的参数
- 代码哪里修改呢? 文件sqlitecipher.cpp中 open函数:
- 加密算法说明,官方也有对应的算法说明,请移步
最后
- 如果你使用SqliteCipher加密了本地文件, 且本地加密的文件中存放了非常敏感的信息,那么,劝你改用其他的方式对信息加密, 这本身就不保险。