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

编程知识 更新时间:2023-04-17 17:24:36

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

(题外话:android原生的模拟器root起来很复杂,推荐一款第三方模拟器:Bluestacks,很方便)

我们拿到EnMicroMsg.db后,用常用的数据库管理软件打开,发现EnMicroMsg.db被加密了,但是密码生成规则很简单,具体如下:
(手机IMEI + 微信uin )取MD5的前7位(微信uin获取)
手机的IMEI获取:手机拨号盘输入:*#06#
但是即使算出来解密密码,我们仍发现用刚才使用的SQLite数据库管理软件是打不开的。因为其用的是SQLCipher开源库提供的加密解密算法,故在网上下载SQLCipher.exe这个软件(地址:http://pan.baidu/s/1qWPr30w),打开.db文件时,输入计算出来的密码后,就可以打开EnMicroMsg.db文件了:

上面提到了SQLCipher是一个提供数据库文件加密解密功能的第三方开源库,我们先来访问以下他们的官网看个究竟:
https://www.zetetic/sqlcipher/open-source/
我们惊喜的发现,现在SQLCipher提供了Android操作系统的开源库,源码在Github上可以下载获得,但是我尝试下载了Github上的工程,编译的时候遇到了很多问题,导致最终没有编译成功。所以建议大家下载如下图所示的开源库压缩包:

你也可以直接点击这里下载。

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

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

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

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

public void readWeChatDatabase() {

    SQLiteDatabase.loadLibs(this);   
    String password = "XXXXXXX";       
    File databaseFile = getDatabasePath("/data/data/com.tencent.mm/MicroMsg/47d58c79e692e212XXXXXXXXXXXXX/EnMicroMsg.db");  //来自www.oicqzone   
    //File databaseFile = getDatabasePath("EnMicroMsg.db");   
    eventsData = new myDataHelper(this);   

    SQLiteDatabaseHook hook = new SQLiteDatabaseHook(){   
          public void preKey(SQLiteDatabase database){   
          }   
          public void postKey(SQLiteDatabase database){   
              database.rawExecSQL("PRAGMA cipher_migrate;");  //最关键的一句!!!   
          }   
    };   

    try {   
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(databaseFile, "XXXXXXX(密码)", null, hook);          
        Cursor c = db.query("message", null, null, null, null, null, null);   
        while (c.moveToNext()) {     
            int _id = c.getInt(c.getColumnIndex("msgId"));     
            String name = c.getString(c.getColumnIndex("content"));     
            Log.i("db", "_id=>" + _id + ", content=>" + name);     
        }     
        c.close();   
        db.close(); 
    } catch (Exception e) {}   
}   

程序很简答,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位,最后用算出的解密码对数据库进行解密。

更多推荐

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

本文发布于:2023-04-14 02:16:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/359b8d60b65135f867bd62f4ea396aba.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库   文件   手机   Android   EnMicroMsg

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 74255文章数
  • 14阅读数
  • 0评论数