怎么把微信通讯录加好友限制里的一个好友设置成我与他聊天,但聊天记录实时备份或传送到某邮箱?

Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息 - CSDN博客
Android逆向之旅---静态方式破解微信获取聊天记录和通讯录信息
一、猜想数据存放路径
现在是老少皆宜,大街小巷都在使用,已经替代了传统的短信聊天方式了,只要涉及到聊天就肯定有隐私消息,那么本文就来讲解如何获取微信的聊天记录以及通讯录信息。
首先我们在没有网络的时候,打开微信同样可以查看聊天记录,说明微信会把聊天记录保存到本地,那么这么多信息肯定会保存在中,所以我们可以去查看微信的databases目录看看内容:
可惜的是,我们在这个里面并没有发现一些有用的数据,所以这时候就了解到了微信因为把重要信息的数据库存在其他目录下面,我们可以直接把微信的整个沙盒数据全部导出来,然后查找db文件:
在这个目录中找到了一些db文件:
看到这个目录下有很多db文件,我们可以一个一个进行查看,这里可以直接使用SQLite Expert可视化工具进行查看:
可惜的是,这里打开失败了,看到提示消息应该了解了,这个数据库文件被加密了。这也更让我们相信这个数据库存放的是非常重要的信息,而且从安全角度来说,加密操作也是很正常的。
二、静态方式破解微信分析
好了到这里,看来得去看代码了,因为数据库加密了,既然是加密肯定有解密的过程,我们去分析代码获取其密码即可。
首先我们可以使用apktool工具进行反编译,这里不演示了,微信本身没有加固操作,所以反编译没有报错的:
这里的命令中加上了-d的参数了,是为了反编译之后生成的是文件,而不是smali文件。便于后面能够导入Eclipse中
反编译之后,接下来咋们就开始把文件导入Eclipse中,关于如何导入的话,这里不介绍了,不了解的同学可以转战这里:&我们成功导入之后:
这里看到有些报错,但是这个不用太关心,我们分析源码就可以了,其实到这里有的同学可能想到的是速度调试:
借助之前说到的mprop工具来修改系统的调试属性ro.debuggable属性值,不了解这个工具的同学可以看这篇文章:&,如果不想用这个工具就有点费事了,修改反编译之后的AndroidManifest.xml中打开调试属性,然后在回编译,不过可惜的是,在这个过程中我尝试过失败了几次,所以我最后采用了mprop工具来进行操作的。修改系统调试属性之后可以看到:
微信出于debug模式了,我们这时候只要按照之前说到的Eclipse中动态调试samli源码的步骤来即可。但是这里有一个问题,就是在调试的过程中会被卡死的,我尝试了很多次结果都失败了,所以这里就放弃了动态方式破解微信了,而是采用静态方式去破解微信获取密码。
三、破解步骤
之前在说到使用静态方式破解的时候第一点,一定要找到关键点,我们现在的问题是知道了数据库,但是这个是加密的,我们需要密码,那么在中如果使用数据库的话,肯定会涉及到一个类:SQLiteDatabase,我们可以在Eclipse中先去全局搜一下这个类:
因为微信工程代码非常大,所以在搜索的过程中需要等一段时间:
在samli中找到了com.tencent.kingkong.database.SQLiteDatabase类的定义了,因为smali语法看起来还是比较费劲的,所以我们使用Jadx工具进行可视化操作,之前一篇文章中介绍了:&这里讲解了apktool和jadx工具的原理,为什么说jadx好用呢?主要是他是开源的,而且用Java编写的,同时还支持方法的跟踪,这个对于混淆代码的跟踪非常有用。
这里需要注意个问题,因为微信的apk太大了,所以得分开查看,因为微信有多个dex文件,而刚刚看到SQLiteDatabase类是在第一个dex中的,我们使用jadx查看第一个dex文件即可:
这样看起来就方便很多了,我们找到这个类,首先肯定看看他的openDatabase方法,不过这里会发现有很多重载方法,不过最终都要调用的是这个openDatabase方法:
内部接着调用了open方法,继续跟进:
内部又调用了openInner方法,接着跟进:
调用了SQLiteConnectionPool的open方法,再跟进去:
哈哈,终于找到核心的地方了,这里看到果然有一个密码的字段,那么这个值就是SQLiteDatabase中的openDatabase方法的第二个参数,那么现在我们就去分析哪里调用了SQLiteDatabase的openDatabase方法,因为SQLiteDatabase的openDatabase的重载方法太多了,所以一个一个找很费劲,所以可以直接搜SQLiteDatabase被调用的地方,可以直接使用Jadx的查找跟踪功能:
查找结果:
这里会发现,很多地方都调用了,看起来非常麻烦,所以这里得想个办法缩减查找范围,我们刚刚看到SQLiteDatabase类中的open方法都是static的,所以在调用的时候肯定是这么使用的:Lcom/tencent/kingkong/database/SQLiteD 这个是标准的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位字符构成的密码。
5、获取密码流程
这里知道了密码的构成,获取就比较简单了,使用*#06#拨号直接获取IMEI值,然后在去查看SharedPreferences中的auth_info_key_prefs.xml文件中的_auth_uin值就是用户的uin值,然后进行拼接,使用HashTab计算出MD5值,获取前7位字符串。
6、使用sqlcipher工具查看数据库
得到密码之后,使用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搞了几年也没搞出个啥牛逼app出来,眼看时下最火的app微信如此火热,实在想搞搞它,索性就想着给它加点东西进去。以下内容纯属本人个人爱好,仅限个人学习android用途以及...
这次研究的对象是微信Android客户端5.3版本。
目标是分析反汇编的smali代码找到微信登陆相关的代码块,插入一段上传账号密码到指定服务器的代码,以达到盗取账号的目的。...
最近入了一个 apk 逆向的坑,坑深似海,不过初步算是有了一些成果,记录一下先。
###确定方案
刚开始想到...
转载于:https://my.oschina.net/chengliqun/blog/148451
N久未做android了,以前做的时候,2.2才刚出来,现在android都更新到了4.3...
MFC 程序最小化到托盘 删除托盘图标
几天事情比较多,可还是想尽快写下这篇文章。
本以为微信的聊天记录以我本人现存能力获取不到,但经过一番尝试,还是成功了。前提:手机需要已经
在我的直觉里,微信的聊天记录一定会是加密的,...
关于如何在 Android 手机上窃取微信聊天记录。
这几天事情比较多,可还是想尽快写下这篇文章。
本以为微信的聊天记录以我本人现存能力获取不到,但经过一番尝试,还是成功了。前提:手机需要已经 ...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)告诉你你如何设置微信才不会暴露隐私
作者:佚名
字体:[ ] 来源:互联网 时间:07-03 06:39:16
微信是个好东西,现在基本上智能手机上是改装的软件了,人人离不开了,但是也存在泄露隐私的风险,如果保密工作没做好,隐私暴露就麻烦了,那么,该如何保护个人隐私?微信锁告诉你微信要这样才不会暴露隐私。
只要注意保密,微信确实是个好东西。有了微信,大家能够用语音功能和大家随走随分享、随处随交流;在拓展社会关系上确实起到了一定的积极作用,可谓是男女老少都爱,被称为&交友神器&。
但是如果你的微信保密工作没做好,微信隐私暴露就麻烦了,如果被一些别有用心的人看到或利用,难免不出问题。那么,该如何保护个人隐私?微信锁告诉你微信要这样才不会暴露隐私。
一、玩转微信,从自身保护开始
要想安全地玩转微信,我觉得要从自身保护设置开始,玩微信时除了及时关闭&允许陌生人查看照片&、&通过QQ号搜索到我&、&通过手机号搜索到我&等这些隐私设置外,微信里还有最最重要的一项设置,就是&加我为好友时需要验证&,开启后,能避免不必要的骚扰。
特别提醒:微信里&允许陌生人查看10张照片&是系统默认开启的。所以一定要记得进行关闭。
操作:微信-我-设置-隐私-允许陌生人查看十张照片(按钮显示为灰色即关闭)
二、慎点附近的人,及时清除位置信息
玩微信的人都知道,只要点击微信上的&附近的人&后,就可以查看到附近开启了该功能的微信用户,头像、个性签名和距离、个人相册等信息一览无余。并且照片他人还可以保存和发送。因此,为了保护个人和相册隐私,请切记要点击右上角,点击&清除位置信息并推出&,并关闭&允许陌生人查看十张照片&这个功能。
三、添加好友后,一定要及时修改备注
玩微信的人都知道,微信支持查找微信号、QQ好友添加好友、查看QQ好友添加好友、查看手机通讯录和分享微信号添加好友、摇一摇添加好友、二维码查找添加好友6种方式,若是手机通讯录好友和QQ好友,微信都会自动识别,在添加好友时会在个人详细资料处显示备注信息,而单纯是通过微信号添加的好友,备注名称才没有识别。所以在添加好友后一定要及时修改备注,便于日后识别身份。
四、给微信上把锁,让有心人无处作怪
微信本身各处设置保护完毕后,我们还需要再给微信上把锁,除了保护微信对外隐私,微信对内保护工作也要做好。很多时候,我们机不离手的手机经常在别人手里。有时手机借朋友使用怕微信中的内容被看到,甚至是担心另一半拿自己的手机&不小心&看到微信中的内容的话,可以使用[微信锁]给微信上把安全锁。微信锁(微信伴侣),即使在亲朋好友、同事把玩你手机,也可以很好的伪装,不用担心会泄露你的微信聊天记录、朋友圈、微信支付及红包隐私信息!
1、下载【微信锁】()
2、安装后就可以选择设置图型解锁或数字解锁。
微信的出现,迅速地取代了传统的短信、电话和邮件,微信的聊天消息承载了从生活、情感、金融、商务等各方面的个人重要信息,而这些信息在网络大爆炸的当下,是极为不安定的定时炸弹。当各家安全软件还在着眼于诸如私密通讯录等功能时,相信【微信锁】能更贴近人们的社交圈,更好地保护个人隐私。
此外,玩微信时,要保持警惕,提高防范意识,不要轻信别人,也不要轻易与微信好友见面,防止上当受骗。
大家感兴趣的内容
12345678910
最近更新的内容不小心删除了好友的微信聊天记录怎么办,教你用这个方法来快速找回
不小心删除了好友的微信聊天记录怎么办,教你用这个方法来快速找回
微信是我们最常使用的聊天工具,不管是和熟悉的人聊天还是与陌生人聊天,我们总是习惯于微信的交流方式。也许你有很多的微信朋友,每天与不同的人聊天,难免会不小心按到了聊天列表里某个好友的删除聊天选项,就这样他与你的谈了很久的聊天记录就这样轻轻的消失了,是不是很不爽,里面或许还有重要的信息没记下来呢。不过没关系,其实这个是可以恢复的,只需要调用一条命令即可。但是遗憾的是,经过小编的测试,这个功能只在苹果系统的微信上支持,安卓却做不到,其实我也是很喜欢安卓手机的。怎么去恢复聊天记录呢?说的修复聊天记录的命令是什么?它就是 :revover。我们打开微信首页点击右上角的加号,在出现的菜单里,选择添加朋友,然后就在输入框里输入:revover命令,点击查找。这里需要注意到的是,很多人会在微信的查找按钮里输入这个字符,这是不对的,在这里输入,得到是关于这个关键字符的文章而已。还有一点需要主要的是,在输入的时候,前面的冒号一定是要在英文状态下输入才有效果的。当输入完字符点击搜索的时候,这个时候微信就会跳出来很多的菜单,可以看到这些菜单都是修复微信里的可能出现的问题的。我们点击最上面的微信消息与通讯录选项,微信系统就会执行聊天记录的修复工作了。在微信开始自动修复数据的时候,请不要关闭微信,微信会根据数据量的多少,来决定其恢复时间的长短。当微信数据恢复成功之后,会弹出“修复成功,请重启微信”的文字提示。这个时候,将微信退出再次重新启动后,之前被你删除的与朋友的聊天情况又出现了,其实微信的聊天记录是保存在手机的某个地方的,不是那种彻底的删除的话,借助这命令或者某些软件是可以被让其回复的。不过,这个也有其局限性,对于过久的聊天记录,这个办法也是无法起到作用的。所以如果你需要长久的保存对你很重要的人的聊天记录,最好去备份数据吧。不知道这个你学会了吗?在强调一遍,这个方法仅限于苹果手机使用。
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 互联网热点动向观察,思路影响出路!
作者最新文章

我要回帖

更多关于 微信一键加通讯录好友 的文章

 

随机推荐