恢复微信聊天记录 破解微信加密数据库EnMicroMsg.db

[复制链接]

该用户从未签到

472

主题

532

回帖

1万

积分

[INTOHARD]旅长

Rank: 9Rank: 9Rank: 9

积分
16542
发表于 2015-7-1 12:14:12 | 显示全部楼层 |阅读模式
手机微信聊天记录删除恢复,首先要获取到微信数据库EnMicroMsg.db,然后查询数据库中的聊天记录,同样微信删除的聊天记录也存储在数据库EnMicroMsg.db中,不过有一个情况你必须了解,微信数据库EnMicroMsg.db加密了,下文将详细说明如何破解微信数据库EnMicroMsg.db。

※简单介绍一下微信加密数据库EnMicroMsg.db的破解方法:


如果你的模拟器或者真机已经获得了root权限,就可以直接将记录聊天记录的数据库文件拷贝出来,数据库文件具体存放位置如下:
在/data/data/中:



(友情提示:android原生的模拟器root起来很复杂,推荐一款第三方模拟器:genymotion,很方便)

※我们拿到EnMicroMsg.db后,用常用的数据库管理软件打开,发现EnMicroMsg.db被加密了,但是密码生成规则很简单,具体如下:
(手机IMEI + 微信uin )取MD5的前7位

手机的IMEI获取:手机拨号盘输入:*#06#

微信uin获取:http://blog.csdn.net/yuanbohx/article/details/41280837

但是即使算出来解密密码,我们仍发现用刚才使用的数据库管理软件是打不开的。因为其用的是SQLCipher开源库提供的加密解密算法,故在网上下载SQLCipher.exe这个软件,打开.db文件时,输入计算出来的密码后,就可以打开EnMicroMsg.db文件了:



※上面提到了SQLCipher是一个提供数据库文件加密解密功能的第三方开源库,我们先来访问以下他们的官网看个究竟:
https://www.zetetic.net/sqlcipher/open-source/

我们惊喜的发现,现在SQLCipher提供了Android操作系统的开源库,源码在Github上可以下载获得,但是我尝试下载了Github上的工程,编译的时候遇到了很多问题,导致最终没有编译成功。所以建议大家下载如下图所示的开源库压缩包:



解压下载的压缩包,其目录如下图所示:



※下面涉及到Android工程创建、导入SQLCipher开源库等工作:
创建Android工程就不详细说了,创建完工程后,直接将sqlcipher-for-android-v3.2.0文件夹中的内容全部拷贝到android工程中即可:



接下来的步骤也很关键:
右键工程,Build Path → Configure Build Path,按照下图所示添加相应的jar包,删除android自有库:



最后在程序中加入读取加密数据库的关键代码即可:

  1. public void readWeChatDatabase() {
  2.                
  3.                 SQLiteDatabase.loadLibs(this);
  4.                 String password = "XXXXXXX";       
  5.                 File databaseFile = getDatabasePath("/data/data/com.tencent.mm/MicroMsg/47d58c79e692e212XXXXXXXXXXXXX/EnMicroMsg.db");
  6.                 //File databaseFile = getDatabasePath("EnMicroMsg.db");
  7.                 eventsData = new myDataHelper(this);
  8.                
  9.                 SQLiteDatabaseHook hook = new SQLiteDatabaseHook(){
  10.                           public void preKey(SQLiteDatabase database){
  11.                           }
  12.                           public void postKey(SQLiteDatabase database){
  13.                                   database.rawExecSQL("PRAGMA cipher_migrate;");  //最关键的一句!!!
  14.                           }
  15.                 };
  16.        
  17.                 try {
  18.                         SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(databaseFile, "XXXXXXX(密码)", null, hook);               
  19.                         Cursor c = db.query("message", null, null, null, null, null, null);
  20.                         while (c.moveToNext()) {  
  21.                                 int _id = c.getInt(c.getColumnIndex("msgId"));  
  22.                                 String name = c.getString(c.getColumnIndex("content"));  
  23.                                 Log.i("db", "_id=>" + _id + ", content=>" + name);  
  24.                         }  
  25.                         c.close();
  26.                         db.close();
  27.                 } catch (Exception e) {}
  28.         }
复制代码


程序很简答,password即为数据库的加密密码,databaseFile为数据库文件路径,database.rawExecSQL("PRAGMA cipher_migrate")这句最为关键,原因如下:

现在SQLCipher for Android已经是3.X版本了,而微信居然还停留在2.X时代,所以这句话是为了能够用3.X的开源库兼容2.X的加密解密方法,如果不加这句话,是无法对数据库进行解密的。

(题外话:SQLCipher的功能确实相当强大,我这里介绍的只是冰山一角,更多的功能大家可以通过其官网或者Github中提供的工程代码进行探究)
最后展示一下程序运行效果,从Logcat信息可以看到,我们成功读取了微信的EnMicroMsg.db文件中的message数据表:



当然,我所做的工作有着明显的不足,即需要先通过各种人工方式计算出数据库解密密码,然后再进行.db文件的解密。有兴趣的网友可以尝试直接在程序中取得IMEI与微信uin(这个应该是难点),然后MD5取前7位,最后用算出的解密码对数据库进行解密。

提醒:
* 取MD5的前7位,字母用小写形式;
* 如果不打算编译sqlcipher,可以到http://download.csdn.net/detail/wang382758656/7000933下载编译好的windows版本。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

该用户从未签到

1

主题

1

回帖

9

积分

[INTOHARD]工兵

Rank: 1

积分
9
发表于 2015-7-16 12:37:21 | 显示全部楼层
获取了手机的imei和微信uin
怎么才能算出md5值的前7个字符啊?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2020-2-5 10:03
  • 签到天数: 71 天

    [LV.6]五品郎中

    4

    主题

    186

    回帖

    416

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    416
    发表于 2015-7-19 21:08:06 | 显示全部楼层
    看着有点晕 但还是 感谢楼主
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    8

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    8
    发表于 2015-11-2 15:37:22 | 显示全部楼层
    请问您还有没有sqlcipher-for-android-v3.2.0这个东西啊,这个版本网上找不到,最新的版本也没有下载的。另外,请教一下,myDataHelper这个类是怎么写的?可否赐教?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-12-27 14:43
  • 签到天数: 1415 天

    [LV.10]一品大学士

    43

    主题

    4413

    回帖

    2万

    积分

    Intohard Team

    Rank: 7Rank: 7Rank: 7

    积分
    20254
    QQ
    发表于 2015-11-4 11:39:10 | 显示全部楼层
    (1:(1:(1:(1:(1:(1:(1:(1:(1:(1:(1:(1:(1:
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    13

    积分

    [INTOHARD]工兵

    Rank: 1

    积分
    13
    发表于 2015-12-3 23:43:56 | 显示全部楼层
    楼主可以帮我吗,我的qq
    309379067
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-5-16 09:50
  • 签到天数: 145 天

    [LV.7]四品道员

    0

    主题

    164

    回帖

    721

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    721
    发表于 2015-12-4 10:49:05 | 显示全部楼层
    看起来有点复杂
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-5-17 11:26
  • 签到天数: 30 天

    [LV.5]六品通判

    0

    主题

    39

    回帖

    211

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    211
    发表于 2015-12-9 13:04:55 | 显示全部楼层
    感谢楼主提供,虽不懂,慢慢学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-5-21 09:20
  • 签到天数: 13 天

    [LV.3]八品县丞

    0

    主题

    15

    回帖

    75

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    75
    发表于 2015-12-14 19:42:48 来自手机 | 显示全部楼层
    看样子挺复杂,感谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-1 07:19
  • 签到天数: 15 天

    [LV.4]七品知县

    2

    主题

    954

    回帖

    1万

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    14100
    发表于 2015-12-20 16:26:45 | 显示全部楼层

    看着有点晕 但还是 感谢楼主
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表