手机梦见车掉水里找不到了了,新买的手机怎么同步微信以前的聊天记录

手机微信聊天记录删除后如果未经过备份,那么是无法恢复查看的 所以,对于有用的通讯记录建议谨慎操作,避免删除

你对这个回答的评价是?

微信现在是老少皆宜大街小巷嘟在使用,已经替代了传统的短信聊天方式了只要涉及到聊天就肯定有隐私消息,那么本文就来讲解如何获取微信的聊天记录以及通讯錄信息

首先我们在没有网络的时候,打开微信同样可以查看聊天记录说明微信会把聊天记录保存到本地,那么这么多信息肯定会保存茬数据库中所以我们可以去查看微信的databases目录看看内容:

可惜的是,我们在这个里面并没有发现一些有用的数据所以这时候就了解到了微信因为把重要信息的数据库存在其他目录下面,我们可以直接把微信的整个沙盒数据全部导出来然后查找db文件:

在这个目录中找到了┅些db文件:

看到这个目录下有很多db文件,我们可以一个一个进行查看这里可以直接使用SQLite Expert可视化工具进行查看:

可惜的是,这里打开失败叻看到提示消息应该了解了,这个数据库文件被加密了这也更让我们相信这个数据库存放的是非常重要的信息,而且从安全角度来说加密操作也是很正常的。

好了到这里看来得去看代码了,因为数据库加密了既然是加密肯定有解密的过程,我们去分析代码获取其密码即可

首先我们可以使用apktool工具进行反编译,这里不演示了微信本身没有加固操作,所以反编译没有报错的:

这里的命令中加上了-d的參数了是为了反编译之后生成的是java文件,而不是smali文件便于后面能够导入Eclipse中

反编译之后,接下来咋们就开始把文件导入Eclipse中关于如何导叺的话,这里不介绍了不了解的同学可以转战这里: 我们成功导入之后:

这里看到有些报错,但是这个不用太关心我们分析源码就可鉯了,其实到这里有的同学可能想到的是速度调试:

借助之前说到的mprop工具来修改系统的调试属性ro.debuggable属性值不了解这个工具的同学可以看这篇文章: ,如果不想用这个工具就有点费事了修改反编译之后的AndroidManifest.xml中打开调试属性,然后在回编译不过可惜的是,在这个过程中我尝试過失败了几次所以我最后采用了mprop工具来进行操作的。修改系统调试属性之后可以看到:

微信出于debug模式了我们这时候只要按照之前说到嘚Eclipse中动态调试samli源码的步骤来即可。但是这里有一个问题就是在调试的过程中会被卡死的,我尝试了很多次结果都失败了所以这里就放棄了动态方式破解微信了,而是采用静态方式去破解微信获取密码

之前在说到使用静态方式破解的时候第一点,一定要找到关键点我們现在的问题是知道了数据库,但是这个是加密的我们需要密码,那么在Android中如果使用数据库的话肯定会涉及到一个类:SQLiteDatabase,我们可以在EclipseΦ先去全局搜一下这个类:

因为微信工程代码非常大所以在搜索的过程中需要等一段时间:

在samli中找到了com.tencent.kingkong.database.SQLiteDatabase类的定义了,因为smali语法看起来还昰比较费劲的所以我们使用Jadx工具进行可视化操作,之前一篇文章中介绍了: 这里讲解了apktool和jadx工具的原理为什么说jadx好用呢?主要是他是开源的而且用Java编写的,同时还支持方法的跟踪这个对于混淆代码的跟踪非常有用。

这里需要注意个问题因为微信的apk太大了,所以得分開查看因为微信有多个dex文件,而刚刚看到SQLiteDatabase类是在第一个dex中的我们使用jadx查看第一个dex文件即可:

这样看起来就方便很多了,我们找到这个類首先肯定看看他的openDatabase方法,不过这里会发现有很多重载方法不过最终都要调用的是这个openDatabase方法:

内部接着调用了open方法,继续跟进:

内部叒调用了openInner方法接着跟进:

哈哈,终于找到核心的地方了这里看到果然有一个密码的字段,那么这个值就是SQLiteDatabase中的openDatabase方法的第二个参数那麼现在我们就去分析哪里调用了SQLiteDatabase的openDatabase方法,因为SQLiteDatabase的openDatabase的重载方法太多了所以一个一个找很费劲,所以可以直接搜SQLiteDatabase被调用的地方可以直接使鼡Jadx的查找跟踪功能:

这里会发现,很多地方都调用了看起来非常麻烦,所以这里得想个办法缩减查找范围我们刚刚看到SQLiteDatabase类中的open方法都昰static的,所以在调用的时候肯定是这么使用的:Lcom/tencent/kingkong/database/SQLiteDatabase; 这个是标准的smali语法调用形式所以这时候我们在去Eclipse中全局搜索这个字符串内容:

最终看到在com.tencent.mm.bb.e這个类中,有多个地方都调用了咋们再去看看这个类:

果然在d方法中调用了数据库的open方法,而且传入的str2就是密码在跟踪d方法在哪里被調用了:

这里的this.Ee就是密码,看他的赋值是先调用j方法构造一个字符串出来,然后取前7个字符即可再看看j方法:

这个方法看起来就眼熟叻,计算字符串的MD5值的这里需要注意的是,MD5的值是小写的好了,到这里我们就了解了:密码其实是一个字符串的MD5值的前7位字符串那麼接下来的问题在继续跟踪是哪个字符串来计算MD5的:

在继续跟踪a方法在哪里被调用了:

继续查找这个a方法又在哪里被调用了,这里调用的仳较深所以需要多次进行查找跟踪,耐心点即可:

最终到了这个类的方法中我们看到,mY值是通过mY方法获取的j2值是上面的i值转化过来嘚:

查看mY方法的实现,很简单获取设备的IMEI值,而i值在前面进行赋值了:

看到了是一个uin值,再看看这个uin值在哪里进行赋值操作的:

看到這里就放心了原来这个uin值存放在SharedPreferences中的,那么就简单了我们在开始的时候把沙盒数据全部导出来了,可以全局搜一下uin字符串的值:

哈哈在这里找到了这个值。

到这里我们就分析完了微信中数据库加密的密码获取流程了下面来总结一下:

1、首先我们全局查找SQLiteDatabase类,因为这個类是操作数据库的核心类他是突破口。

2、找到这个类的定义之后再次查看他的open系列方法,因为要操作数据库肯定有open之类的方法

3、洅去全局查找SQLiteDatabase的open方法的调用地方,这里调用的地方比较多所以大家需要耐心的查找,而且为了缩小查找范围我们可以根据smali语法调用格式的字符串内容来进行查找。

4、找到了这个方法的被盗用的地方下面就开始一步一步的往下跟踪,到了一个核心的方法中了解到了密碼是一个字符串计算MD5之后取前7个字符串的值。

5、继续跟踪找到这个被计算MD5的字符串内容,最后跟踪到这个字符串其实是设备的IMEI加上用户嘚uin值而这个uin值是保存在SharedPreferences中的。

上面虽然找到了密码但是我们知道是如何进行数据加密的呢?这里就要借助经验了因为现在主流的Sqlite数據加密技术就是sqlitecipher,不了解的同学可以去看看这个数据库加密需要用到so文件,我们去微信的libs下面查看:

这里没有找到那个sqlitecipher.so文件但是我们看到了这个libkkdb.so文件,他貌似就是操作数据库的使用IDA打开进行查看内容:

看到了,这里的的sqlite操作都是在native层进行的所以我们如果要查看数据庫的话,需要用sqlcipher软件来进行查看这个软件网上的下载地址很多,专门用来查看sqlitecipher加密的数据库信息的

首先获取设备的IMEI,可以直接拨打:*#06#即可查看;然后查看他的uin值直接读取SharedPreferences中的值即可,然后拼接到一起用txt文件档保存一下,在使用HashTab工具进行查看属性即可得到MD5的值关于HashTab笁具:

这个工具还是很有用的,可以很方便的右键文件属性即可查看文件的MD5值了:

这里看到前七位就是:748B34D,注意字符小写=》748b34d:

输入密码の后就可以查看数据库中的各个表格信息了:

可以发现这个数据库中存了很多表格内容,但是这里我们最关心的就是通讯录信息表和聊忝记录表:

看到了聊天记录表格是message,通讯录表格是recontact:

而且这里有一个好玩的东东就是你以前删除的好友,都会存在的这个是微信会紦你的通讯录保存到服务端,及时你本地删除了联系人但是服务端并不会删除,所以如果你想找到你以前删除的好友可以在次查找重噺加上好友。

到这里我们就用静态方式去破解微信知道了数据库加密的密码,然后看到他是使用的主流的数据库加密框架:sqlitecipher而且现在佷多app都用这个框架,比如一些小说类的app这里就不指定说是谁了,我之前反编译过几个小说类的app有两个都是用的这个框架进行加密的。

1、猜想信息是保存在本地数据库

想得到聊天记录和通讯录信息我们的想法是这些信息在设备没有连接网络的时候也是可以查看的,所以峩们猜想这些信息是保存在本地的数据库中的

2、使用sqlite工具查看信息报错

我们把微信的沙盒数据全部导出到本地,然后查找db文件找到了EnMicroMsg.db攵件,使用sqlite expert工具进行查看报错提示数据库被加密了。

3、根据数据库的常规使用流程找到入口

我们在Android中使用数据库的时候都会用到SQLiteDatabase类所鉯可以全局搜索这个类,找到这个类的定义然后再找到他的一些open方法,看看这些方法的调用地方

4、通过数据库的入口方法进行代码跟蹤

知道了open系列方法的调用地方,就开始使用Jadx工具进行代码跟踪最后跟踪到了有利信息,就是密码是用户设备的IMEI+uin值计算MD5值注意是小写字苻,然后在取MD5的前7位字符构成的密码

得到密码之后,使用sqlcipher工具进行数据库的查看可以找到通讯录表格recontact和聊天记录表格message。

概要:微信的核心数据库是EnMicroMsg.db但是是加密操作的,而加密的密码是设备的IMEI+用户的UIN值(在SP中保存了)计算MD5(字符是小写),取出前7位字符即可

1、微信的通讯录信息和聊天记录信息对于一个用户来说是非常重要的隐私,所以这也是微信对数据库进行加密的原因但是不管最后怎么加密,都会需要解密的所以这就是我们破解的关键,只要解密操作在本地进行密码肯定能够获取到。

2、关于微信的这个密码获取的规则不会发生改变嘚有的同学会想微信会改掉数据库加密的密码获取算法吗?答案是不会的原因很简单,如果密码算法改了就会影响到老用户,比如噺版本中密码改了老用户更新之后,在读取数据库的时候进行解密那么加密的数据库是老的,新的加密算法是解密失败的这个用户體验会疯的,那有的同学又说了对数据库进行升级处理,但是这里的升级一定要保证老的数据不能丢失那么这里就存在一个老数据迁迻的工作,这个工作是巨大的因为现在很多微信使用的过程中如果不去主动的清除数据,聊天信息非常多那个数据库也会非常的大,幾十M很正常的那么在数据迁移的时候风险是非常巨大的,所以这样一来微信短期内是不会改变密码算法规则的,其实我已经尝试了很哆老版本的反编译发现的确这个算法一直都是这样的。所以一定要记住微信的数据库加密算法是:MD5(IMEI+UNI)=>前7个字符

3、这里为什么使用静态方式去分析呢?原因是微信的包太大了如果动态调试的话总是出现死机情况,没办法后续操作了所以使用了静态方式去破解。

通过本文の后大家应该都知道如何破解微信的聊天记录信息和通讯录信息了,只要获取到加密的数据库得到密码即可,但是这两步却不是那么嫆易获取的首先如何获取加密的数据库,这些信息都是保存在微信的沙盒数据中的所以得设备root之后获取,设备的imei信息就简单了那么問题就来了,如果一个用户的设备root了那么恶意程序就可以开始盗取信息了。而且在之前的一篇文章中: 介绍了微信在5.1之前的版本allowBackup属性默認值是true也就是说没有root的情况下,可以获取到微信的沙盒数据那么这个安全性就太暴露了。现在也有很多微信通讯录备份的工具其实僦是把这个数据库信息同步一下。以后只要有了微信的这个数据库那么破解也是很简单的,因为密码是规定的

1、如果你想看周边的人微信信息,那么这里就是给你提供了最好的方案特别是你最爱的人,比如媳妇总是不让你看她微信但是自己又很想看,那么机会来了

2、对于root之后的设备可以在后台窃取用户的微信信息把imei一起上传到服务端,然后在人工分析获取聊天记录中重要信息

3、当我们的设备中誤删除了聊天记录,这时候可以通过导出本地数据库然后使用sqlcipher工具进行查看既可以找到之前数据

本文的重点和意图是:如何使用静态方式破解apk的思路,而对于微信来说这个不算是漏洞也不算是问题,因为我们上面介绍中涉及到的数据都是微信的沙盒中的所以一般情况丅是无法获取到的,所以对于攻击者来说没有太多的意义所以本文的意图很简单就是讲解静态方式破解apk的一种思路。

上面分析了微信数據库的加密操作的原因以及数据库的密码构造算法,同时也分析了这个算法短期内是不可能更改的,从安全性来说对于新版本的微信,如果设备root了那么对恶意程序来说就有了盗取的入口,而微信中的聊天记录信息相当于用户的隐私同时会涉及到一些利益相关的,所以微信今后对这个数据库操作希望能够尽快的进行改善操作

关注微信公众号,最新Android技术实时推送


我要回帖

更多关于 梦见车掉水里找不到了 的文章

 

随机推荐