Window上sqlcipher软件打不开32位密码的sqlite数据库解决方法

一. 前言

最近要研究一个安卓应用的数据库加密,密码和数据库都导出来了,但用window上的sqlcipher.exe怎么都打不开,分析了应用的apk,里面用到的数据库是微信开源的那一套数据库。在导出微信的数据库,并获得密码后,sqlcipher.exe是能打开的。不过我研究的应用的数据库和微信的数据库唯一不同是:前者密码长度为32位,后者是7位。初步怀疑打不开的原因是:1. 我所研究的应用对微信那一套数据库进行了更改,2. sqlcipher.exe工具对密码长度有限制。

二. 分析过程

在用各种工具都打不开的情况下,我只能先判别是否是上面说的第一种可能了,于是又是hook,又是调试,最终发现底层so代码中密码传参过程跟微信的都是一样的,于是断定就是第二种可能了。
在一位大牛的帮助下,才知道把数据库和密码放到Linux系统中解密,最后发现,可解,一时兴奋不已,也就是说是sqlcipher.exe限制了秘钥的长度,当然sqlcipher.exe是开源工具,改下其中代码,然后重新编译应该也能解决。
平时用Linux系统不多,特地将使用中的命令,及遇到的问题记录一下,整个过程使用命令为:

  1. sudo apt-get install sqlcipher
  2. cd /数据库所在目录
  3. sqlcipher xx.db;
  4. PRAGMA key = ‘****’;
  5. ATTACH DATABASE ‘plaintext.db’ AS plaintext KEY ‘’;
  6. SELECT sqlcipher_export(‘plaintext’);
  7. DETACH DATABASE plaintext;
  8. 当前目录下的plaintext.db即为解密后的数据库文件,拖到windows中,用sqlcipher.exe打开即可。

在执行 apt install sqlcipher 这一命令是碰到问题,提示:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
的错误,解决方法:

  1. 查看是否有apt-get这个程序在运行
    ps aux|grep apt-get,如果发现存在这样的程序在运行那么就kill掉,否则执行
  2. 直接删除锁文件
    sudo rm /var/lib/dpkg/lock-frontend
    sudo rm /var/lib/dpkg/lock
  3. 或者先进root,sudo root,然后rm /var/lib/dpkg/lock-frontend,rm /var/lib/dpkg/lock

三. 总结

之所以对该应用的数据库分析这么久,也不是因为逆向分析慢,而是在逆向完成后,对工具的使用的不熟,身边有经验丰富的大牛还是好,哈哈,可以少走些弯路。
另外,Windows在软件运行性能和编译代码速度方面跟Linux还是没法比的,但是使用会方便一些。作为程序员,感觉以后还是得将各种工具及分析思路转到Linux上或者Mac上了。

你可能感兴趣的:(Window上sqlcipher软件打不开32位密码的sqlite数据库解决方法)