200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【逆向】【Android微信】加密数据库踩坑

【逆向】【Android微信】加密数据库踩坑

时间:2023-10-01 12:47:34

相关推荐

【逆向】【Android微信】加密数据库踩坑

-02-19 晴 焦作

出场人物

饭咸 - 程序员沉瓶 - 产品经理

工作环境

硬件:MacBook Pro (Retina, 13-inch, Early )硬件相应系统:macOS Catalina,10.15.3微信版本7.0.4

需求

打开加密的数据库文件EnMicroMsg.db

故事

沉瓶:今天我发现PC上的微信好友头像保存到了电脑的某个目录上,是不是其他信息也是保存在电脑上的,比如好友列表,聊天记录等等。饭咸:是的,为了更好的体验,微信会将很多数据保存到本地,下次再启动软件的时候就不用再请求服务器了。沉瓶:那我能不能把数据直接读出来用呢?饭咸:这得看微信怎么实现的了,一般情况下,关键数据都是加密的。不过微信被人们分析的太多了,这个在网上应该能找到破解方法。沉瓶:嗯嗯,网上是不少文章,都说微信开源了它的数据库,叫WCDB(WeChat Database)(/Tencent/wcdb),是基于SQLite的,加密使用的是开源的SQLCipher,那你试试看能打开它的加密后的数据库不?饭咸:好的,盘它。

需求分析

1 使用现成的SQLite软件 1-1MySQLWorkbench1-2SQLiteClient1-3DB Browser for SQLite1-4Navicat for SQLite1-5Datum - Lite1-6 SQLiteManager1-7SQLiteStudio2 自己编译sqlcipher

实现步骤

1 使用现成的SQLite软件

先看下我的电脑上关于SQL的软件,截图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUrar2Tr-1582999544614)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/Mac上的Sqlite数据库软件__-02-.23.17.png)]

1-1MySQLWorkbench

这是个MySql软件,很久以前安装的,直接忽略掉吧。

1-2SQLiteClient

这个没能打开数据库文件,难道我用错了,也忽略掉。

1-3DB Browser for SQLite

DBBrowser是个开源的项目,支持Windows、Mac,github直接搜索即可下载,我使用的是最新的版本3.11.2。

直接打开加密文件EnMicroMsg.db,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-35DGtbBP-1582999544616)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/DBBrowser__截屏-02-.13.30.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DtiYrqUn-1582999544619)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/DBBrowser__截屏-02-.14.06.png)]

DBBrowser提供了复杂的加密选项,供用户选择,看着似乎离答案不远了,可是结果出乎意料。我对两个账号进行测试,其中一个选择"SQLCipher3

default"选项能正常解密,而另一个账号的EnMicroMsg.db无论怎么更改选项都未能正常的打开。为此,我还专门调试了下程序,将其选项复制出来一项一项的对比,如下所示:

p2 = {SQLiteCipherSpec@9102} hmacAlgorithm = 0hmacEnabled = falsekdfAlgorithm = 0kdfIteration = 4000pageSize = 1024shadow$_klass_ = {Class@8246} "class com.tencent.wcdb.database.SQLiteCipherSpec"shadow$_monitor_ = -2105857932

一番折腾,也放弃了。

1-4Navicat for SQLite

Navicat是一个很有名气的软件,但是它的加密选项并不多,最终也未能打开EnMicroMsg.db文件。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XmGQNfsl-1582999544621)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/Navicat__截屏-02-.30.46.png)]

1-5Datum - Lite

Datum的加密选项只有密码和页大小,也未能打开EnMicroMsg.db文件。如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4cvwwx0-1582999544624)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/Datum__截屏-02-.37.07.png)]

1-6 SQLiteManager

SQLiteManager是个收费软件,打开数据库,只用输入密码,就可以直接进入查看数据库内容了,不过DEMO版本只能查看20行数据,只能另寻它路了!!!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81xOnqBE-1582999544625)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/SQLiteManager__截屏-02-.41.35.png)]

1-7SQLiteStudio

SQLiteStudio是开源项目,在github上下载最新的软件即可,该软件跨平台(Mac、Windows已经测试通过)、支持多种加密方式(这里选择SQLCipher选项),使用方法如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n8AnYzuj-1582999544629)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/SQLiteStudio设置页面__截屏-02-.50.09.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sa3Ef3es-1582999544632)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/SQLiteStudio主页面__截屏-02-.59.30.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWicFfg8-1582999544634)(https://ninecents.github.io/ProgrammerDairy/-02-19__微信加密数据库采坑/SQLiteStudio关于__截屏-02-.48.56.png)]

2 自己编译sqlcipher

在找到SQLiteStudio之前,曾经发现一种源码的方式,也做了尝试,不过不知道为什么,一直提示"out of

memory",搜到的答案大多说是是版本的问题(以前做过Sqlite相关的项目,的确会出现类似的情况),暂时记录下操作过程。

2-1 SQLCipher安装

找到很多复杂的安装方法,太复杂,直接放弃了,知道找到下面的代码才开始编译自己的SQLCipher。

直接执行下面的两行代码就行了:

ruby -e "$(curl -fsSL /Homebrew/install/master/install)" < /dev/null 2> /dev/nullbrew install sqlcipher

2-1 解密数据库

进入sqlite后可以设置各种加密参数:cipher_page_size、kdf_iter、cipher_hmac_algorithm、cipher_kdf_algorithm等等。

$ sqlcipher encrypted.dbSQLCipher version 3.8.4.3 -04-03 16:53:12Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite> PRAGMA key = 'thisiskey';sqlite> PRAGMA cipher_page_size = 1024;sqlite> PRAGMA kdf_iter = 4000;sqlite> PRAGMA cipher_hmac_algorithm = HMAC_SHA1;sqlite> PRAGMA cipher_kdf_algorithm = PBKDF2_HMAC_SHA1;sqlite> PRAGMA cipher_use_hmac = OFF;sqlite> ATTACH DATABASE 'plaintext.db' AS plaintext KEY '';sqlite> SELECT sqlcipher_export('plaintext');sqlite> DETACH DATABASE plaintext;

参考资料

Install sqlcipher on Mac OSX使用SQLCipher 对sqlite数据库进行解密sqlcipher 数据库解密

声明

本文章仅供用于技术研究用途,请勿利用文章内容操作用于违反法律的事情。

广而告之

欢迎各位关注公众号和QQ群进行技术交流,关注有福利喔。

微信公众号:

qq群:IT技术控/953949723

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。