直接利用Android手机破解微信加密数据库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自有库:

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

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;");  //最关键的一句!!!
			  }
		};

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

时间: 2024-10-09 16:38:36

直接利用Android手机破解微信加密数据库EnMicroMsg.db的相关文章

Android 手机卫士--md5加密过程

在之前的文章中,我们将用户的密码使用SharedPreferences存储,我们打开/data/data/com.wuyudong.mobilesafe/shared_prefs文件夹下的 config.xml 文件,导入到本地,查看内容: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="mobile_safe_psd">123</stri

手机端微信聊天记录数据库解密过程记录

出发点是想找回微信被撤回的信息. 根据<PC版QQ微信防撤回补丁>文章,拦截PC端的撤回函数,新的撤回消息将不会被撤回.但是打补丁前撤回的消息,依然无法查看. 之前发现,手机端的微信,图片.视频信息撤回后,可以在本地找到相应的记录.由此猜测,文本信息是否本地依然有记录.查询资料得知,文本的聊天记录,存放在Sqlite数据库中.本来想破解PC端的数据库,但是收集到的资料都是手机端的. 根据<手把手教你破解微信本地数据库(利用Sqlcipher查看)>和<Android动态破解微

Android手机如何通过USB共享网络给Mac?

最近网络挂了,mac不能上网查资料,心情非常毛躁,急切寻求用mac蹭WiFi的方法. 没有找到电脑端破解WiFi密码的软件,手头的Android手机没有root,也无法查看WiFi密码--->破解密码的道路行不通~~~ 那就曲线救国吧. Android手机有USB共享网络的功能,这个功能我在Windows系统下使用过. 在OS X系统下如何使用呢?求助万能的百度,找到了解决方法.通过android usb共享网络给mac系统上网 HoRNDIS:这是一款针对mac os x系统的USB teth

cocos2d-x 2.1 Win32+Android开发中的sqlite数据库加密技术探讨

注意:本博客转移自本人约一年前的ITPUB博客文章,为的是便于学员参考之用. 很显然,cocos2d-x编程中只了解基本的sqlite数据库操作技术只是一个开头,真正把此数据库数据应用于实际中不使用一定的加密及解密技术几乎是不行的. 这个问题尽早会来到我面前,这不?现在就来了.一开始,自然想使用最省工的了:但是,这样的好事并不多,极少极少...... 于是,我先搜罗了一些现成的文章拿来一阅. 1,Sqlite数据库加密解密 SRC: http://blog.sina.com.cn/s/blog_

Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息

一.猜想数据存放路径 微信现在是老少皆宜,大街小巷都在使用,已经替代了传统的短信聊天方式了,只要涉及到聊天就肯定有隐私消息,那么本文就来讲解如何获取微信的聊天记录以及通讯录信息. 首先我们在没有网络的时候,打开微信同样可以查看聊天记录,说明微信会把聊天记录保存到本地,那么这么多信息肯定会保存在数据库中,所以我们可以去查看微信的databases目录看看内容: 可惜的是,我们在这个里面并没有发现一些有用的数据,所以这时候就了解到了微信因为把重要信息的数据库存在其他目录下面,我们可以直接把微信的整个

破解android手机图形锁

安卓手机的图形锁包括3*3,4*4,5*5的点阵,按次序连接数个点从而达到锁定/解锁的功能.以3*3为例,最少需要连接4个点,最多能连接9个点.在我们进行绘制图形的过程中,每选中这9个点中的一个点,实际上就代表选中了一位数字.当我们连接完4个点时,产生的图形也会间接生成一组密码.比如我们选中02.04.05.08这四个点位,那么组成的密码即为02040508.当然,为了安全,生成的密码是不可能直接被存储的,于是安卓系统将02040508转换为16进制并以sha1加密,并存储在手机里的/data/

Android手机通讯录项目开发--联系人数据库contacts2.db介绍

项目描述:该项目为基于Android平台的手机通讯录,主要模块分为四个部分:联系人管理模块,通话记录管理模块,短信管理模块,系统设置模块. 系统结构图如下: 本项目启动时间:2014年5月28日 说明:本次开发项目的所有源码全部会分享给大家.开发此项目的目的有这几点:一.锻炼独立开发项目的能力,二.增加对Android开发的了解,三.熟悉Android通讯录机制. 闲话不多说,正式开始! 技术要点一:熟悉Android联系人数据库contacts2.db 1.获得联系人数据库contacts2.

如何从android手机中把自己的数据库给COPY出来

============问题描述============ 自己写个APK,安装在android手机,程序运行时会创建一个SQLITE的数据库: 用eclipse,可以看到数据库的位置,我把手机插入电脑,打USB连接后,却不能在手机中找到数据库文件(APK绝对是安装在SD卡上的),有人说要有ROOT的权限.不知如何实现,如果要写一个程序来实现,请高手指点思想,列出相关重点函数,谢谢 ============解决方案1============ 自己的应用复制自己的数据库,无需root,直接文件复制就

利用html5实现类似微信的手机摇一摇功能

利用html5实现类似微信的手机摇一摇功能,并播放音乐. 1.  deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度.方位.朝向等. 2.  deviceMotion:封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据. 不多说直接上代码, Javascript: [javascript] view plaincopy var SHAKE_THRESHOLD = 3000; var last_update = 0;