程序员人生 网站导航

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

栏目:综合技术时间:2014-12-23 09:01:06

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

要先批评1下微信,竟然用开源的数据库加密方式,这不是1破解1个准吗...

如果你的摹拟器或真机已取得了root权限,就能够直接将记录聊天记录的数据库文件拷贝出来,数据库文件具体寄存位置以下:

在/data/data/中:


(题外话:android原生的摹拟器root起来很复杂,推荐1款第3方摹拟器: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是1个提供数据库文件加密解密功能的第3方开源库,我们先来访问以下他们的官网看个究竟:

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自有库:


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

public void readWeChatDatabase() { SQLiteDatabase.loadLibs(this); String password = "XXXXXXX"; File databaseFile = getDatabasePath("/data/data/com.tencent.mm/MicroMsg/47d58c79e692e212XXXXXXXXXXXXX/EnMicroMsg.db"); //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;"); //最关键的1句!!! } }; 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的功能确切相当强大,我这里介绍的只是冰山1角,更多的功能大家可以通过其官网或Github中提供的工程代码进行探究)

最后展现1下程序运行效果,从Logcat信息可以看到,我们成功读取了微信的EnMicroMsg.db文件中的message数据表:


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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐