2020-02-19 晴 焦作

出场人物

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

工作环境

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

需求

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

故事

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

需求分析

  • 1 使用现成的SQLite软件

    • 1-1 MySQLWorkbench
    • 1-2 SQLiteClient
    • 1-3 DB Browser for SQLite
    • 1-4 Navicat for SQLite
    • 1-5 Datum - Lite
    • 1-6 SQLiteManager
    • 1-7 SQLiteStudio
  • 2 自己编译sqlcipher

实现步骤

1 使用现成的SQLite软件

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

1-1 MySQLWorkbench

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

1-2 SQLiteClient

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

1-3 DB Browser for SQLite

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

直接打开加密文件EnMicroMsg.db,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-35DGtbBP-1582999544616)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/DBBrowser__截屏2020-02-2016.13.30.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DtiYrqUn-1582999544619)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/DBBrowser__截屏2020-02-2016.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-4 Navicat for SQLite

Navicat是一个很有名气的软件,但是它的加密选项并不多,最终也未能打开EnMicroMsg.db文件。如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XmGQNfsl-1582999544621)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/Navicat__截屏2020-02-2016.30.46.png)]

1-5 Datum - Lite

Datum的加密选项只有密码和页大小,也未能打开EnMicroMsg.db文件。如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4cvwwx0-1582999544624)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/Datum__截屏2020-02-2016.37.07.png)]

1-6 SQLiteManager

SQLiteManager是个收费软件,打开数据库,只用输入密码,就可以直接进入查看数据库内容了,不过DEMO版本只能查看20行数据,只能另寻它路了!!!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81xOnqBE-1582999544625)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/SQLiteManager__截屏2020-02-2016.41.35.png)]

1-7 SQLiteStudio

SQLiteStudio是开源项目,在github上下载最新的软件即可,该软件跨平台(Mac、Windows已经测试通过)、支持多种加密方式(这里选择SQLCipher选项),使用方法如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n8AnYzuj-1582999544629)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/SQLiteStudio设置页面__截屏2020-02-2016.50.09.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sa3Ef3es-1582999544632)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/SQLiteStudio主页面__截屏2020-02-2016.59.30.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWicFfg8-1582999544634)(https://ninecents.github.io/ProgrammerDairy/2020-02-19__微信加密数据库采坑/SQLiteStudio关于__截屏2020-02-2016.48.56.png)]

2 自己编译sqlcipher

在找到SQLiteStudio之前,曾经发现一种源码的方式,也做了尝试,不过不知道为什么,一直提示"out of
memory",搜到的答案大多说是是版本的问题(以前做过Sqlite相关的项目,的确会出现类似的情况),暂时记录下操作过程。

2-1 SQLCipher安装

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

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

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/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.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for instructions
Enter 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

【逆向】【Android微信】加密数据库踩坑相关推荐

  1. android微信分享图片踩坑之旅

    分享图片代码如下 bitmap.recycle() 资源被回收了,所以每次分享的bitmap必须是重新创建出来的 /*** 微信图片分享** @param shareType {@link SendM ...

  2. 直接利用Android手机破解微信加密数据库EnMicroMsg.db

    ※首先,简单介绍一下微信加密数据库EnMicroMsg.db的破解方法: 要先批评一下微信,居然用开源的数据库加密方式,这不是一破解一个准吗... 如果你的模拟器或者真机已经获得了root权限,就可以 ...

  3. 微信小程序踩坑记——ColorUI组件的使用

    微信小程序踩坑记--组件的使用 组件类型 ColorUI Vant weapp ColorUI 首先贴上官网链接:官网链接,GitHub链接 简介 ColorUI是一个css库!!!在你引入样式后可以 ...

  4. 微信小程序踩坑—用户登录界面

    最近做的一个项目有涉及到用户登录.微信小程序的用户登录在我看来有两种,一种是需要用微信提供的用户身份标识,简单地说就是小程序的登录者就是使用这个小程序的微信用户,还有一种是小程序和服务器之间有自己的一 ...

  5. Realm数据库踩坑

    今天升级Realm数据库实体类的时候,发现数据库东西不见了,折腾了一下午,得到一些教训,这里转一些知识点,下次升级时候用. /*** Realm数据库升级*/ public class MyMigra ...

  6. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题

    微信小程序踩坑日记-微信小程序首次加载样式错乱问题 在实际开发项目中,遇到了个棘手的问题,就是在某些因素下,进入小程序发现有些样式发生偏移.错乱等问题 问题原因:-未知(估计是组件的问题) ↓ 解决办 ...

  7. 利用Android手机破解微信加密数据库EnMicroMsg.db文件

    要先批评一下微信,居然用开源的数据库加密方式,这不是一破解一个准吗? 如果你的模拟器或者真机已经获得了root权限,就可以直接将记录聊天记录的数据库文件拷贝出来,数据库文件具体存放位置如下: 在/da ...

  8. Android逆向_微信本地数据库解密与删除聊天记录恢复完全教程

    # 前言 在电子数据取证过程中,对微信本地数据库的解密.提取与恢复是非常重要的工作内容.本文以华为mate系列手机和最新版的微信(7.0.3)为例,通过总结互联网上已经发表的文章经验,主要针对**华为 ...

  9. 微信数据库最新的解密方式,使用C++代码解密微信加密数据库信息!

    原文转载于:https://blog.csdn.net/jiangwei0910410003/article/details/79436956 一.知识回顾 最近有人找我弄微信数据库解密的东西,其实这 ...

最新文章

  1. Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战
  2. 第十五届全国大学生智能汽车竞赛确定各分赛区总决赛名单数量分配草案
  3. Python生成器的用法,使用生成器灵活的生成斐波那契数列
  4. mysql 创建、修改、删除表
  5. 51CTO 新人报道
  6. Spring Cloud Alibaa
  7. CrazyWing:Python自动化运维开发实战 十八、Python面向对象
  8. 宜信正式开源其 AIOps 落地三大利器
  9. php智能电视如何安装直播软件,海信 LED 55EC520UA 怎么安装第三方软件看直播?教你安装方法...
  10. /etc/config/wireless解析
  11. [LAMP兄弟连李明老师讲Linux].课件Shell编程
  12. python重启电脑
  13. pfSense与CARP的硬件冗余
  14. drools规则语言指南(五)规则条件和行为
  15. 什么是责任心?如何提高责任心?HR人才测评
  16. matlab论文致谢,大学毕业论文致谢信3篇
  17. 白鹭安装node_Egret Engine(白鹭引擎)介绍及windows下安装
  18. 机器学习算法实践-SVM中的SMO算法
  19. 佳能ir2004打印机显示无法连接计算机,教你解决打印机无法连接USB故障困扰
  20. Win7右击计算机管理打不开,提示找不到文件或没有关联的程序

热门文章

  1. 如何设计一个公司级别的消息通知系统?
  2. mac下搭建svn环境
  3. 开源EDA软件-KiCAD
  4. Java黑皮书课后题第9章:**9.9(几何:正n边形)在一个正n边形中,所有边的长度都相同,且所有角的度数都相等(即这个多边形是等边等角的)
  5. flow 类型生成工具 flow-typed 简单使用
  6. 忙中偷闲,研究一下软件设计师资格认证题目
  7. SEREN射频电源维修Seren电源维修R301MKⅡ SEREN射频匹配器维修
  8. 软件开发模式之瀑布式 | 迭代式 | 螺旋式 | 敏捷式
  9. Mac使用技巧:怎样打开、关闭屏幕共享!
  10. 半导体存储芯片及译码驱动方式