分析微信聊天记录(1)——获取微信聊天记录

文章目录

  • 分析微信聊天记录(1)——获取微信聊天记录
    • 获取 `EnMicroMsg.db `文件
      • 已root手机
      • 小米手机
    • 获取数据库密码
    • 导出数据库
      • windows
      • linux
      • mac
    • 总结

获取微信聊天记录的主要流程是取 EnMicroMsg.db文件,找密码,导出。

获取 EnMicroMsg.db文件

已root手机

对于root后的手机来说,直接获取/data/data/com.tencent.mm/MicroMsg/{hash}/EnMicroMsg.db文件即可。对于非root手机,可以使用电脑端的安卓模拟器,将聊天记录备份到模拟器中,在模拟器中获取EnMicroMsg.db文件。当然,特殊机型有特殊的办法。

小米手机

利用小米手机的备份功能,即使没有root的手机,也可以获取到微信的聊天记录。步骤如下:
1.打开小米手机上的“设置”,点击“更多设置”,“备份和重置”。
说明:如果小米手机安装的是最新MIUI11系统,则进入手机“设置”后,再点击“我的设备”,“备份和重置”即可。

2.点击“本地备份”,按提示输入锁屏密码后,点击“下一步”,最后点击“新建备份”按钮。

3.将“系统数据“及“软件程序”前面的勾去掉,再点击软件程序右边的小箭头,仅勾选上“微信”后,开始进行备份。

4.备份结束后,将小米手机用数据线连接到电脑上,手机上询问USB的用途,请选择“传输文件”,如果设置为默认的“仅限充电”的话,将无法在电脑上读取手机中的文件。
5.进入手机所在盘符下的“MIUI/backup/AllBackup/备份日期时间”目录,将该目录下的微信(com.tencent.mm).bak文件复制到电脑上。

6.使用7zip软件解压微信(com.tencent.mm).bak,进入apps/com.tencent.mm/r目录,将该目录下的MicroMsg文件夹提取出来。
或者参考小米6提取微信聊天记录笔记,使用作者提供的软件进行解压。
首先需要安装Java环境,将abe.jar复制到和微信(com.tencent.mm).bak同一个文件夹下,终端执行:

java -jar abe.jar unpack 微信(com.tencent.mm).bak mm.tar

会生成一个mm.tar文件,用解压软件将这个包解压,会得到一个apps文件夹,聊天记录数据库就存在apps/com.tencent.mm/r/MicroMsg/ 下,打开文件夹会发现里面有32位字符(MD5值)的文件夹(登录过多个用户的有多个),打开此文件夹其中EnMicroMsg.db就是要找的数据库文件。

获取数据库密码

注意!!这是最关键的一步,这一步会卡很久的时间,因为微信各个版本的数据库有细微的区别,有时间因为数据库版本问题或者密码问题,这一步就是过不去。

至此,我们已经获取到了EnMicroMsg.db文件,这是个sqlcipher加密数据库,需要密码才能打开。有以下几种方式生成密码:

数据库密码有很多种生成方式:

  1. 手机IMEI+uin(微信用户id userinformation) 将拼接的字符串MD5加密取前7位。

如IMEI为123456,uin为abc,则拼接后的字符串为123456abc 将此字符串用MD5加密(32位)后为df10ef8509dc176d733d59549e7dbfaf 那么前7位df10ef8 就是数据库的密码,由于有的手机是双卡,有多个IMEI,或者当手机获取不到IMEI时会用默认字符串1234567890ABCDEF来代替(小米10就是!!!),由于种种原因,并不是所有人都能得出正确的密码,此时我们可以换一种方法。

  1. 反序列化CompatibleInfo.cfgsystemInfo.cfg

不管是否有多个IMEI ,或者是微信客户端没有获取到IMEI,而使用默认字符串代替,微信客户端都会将使用的信息保存在MicroMsg文件夹下面的CompatibleInfo.cfg和systemInfo.cfg文件中,可以通过这两个文件来得到正确的密码,但是这两个文件需要处理才能看到信息。注意!通常这一步会显示IMEI值为null,此时若密码不正确,可将IMEI换为1234567890ABCDEF然后使用第一种方法。
IMEI.javaCompatibleInfo.cfgsystemInfo.cfg三个文件放在相同目录下终端运行(IMEI.java内容见下文):
javac IMEI.java
java IMEI systemInfo.cfg CompatibleInfo.cfg

  1. 使用hook方式得到数据库的密码,这个方法最有效参考
  2. 暴力破解

MD5加密在线:md5加密

IMEI.java文件的内容为:

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.security.MessageDigest;
import java.util.HashMap;
public class IMEI {public static void main(String[] args) {try {ObjectInputStream in = new ObjectInputStream(new FileInputStream(args[0]));Object DL = in.readObject();HashMap hashWithOutFormat = (HashMap) DL;ObjectInputStream in1 = new ObjectInputStream(new FileInputStream(args[1]));Object DJ = in1.readObject();HashMap hashWithOutFormat1 = (HashMap) DJ;String s = String.valueOf(hashWithOutFormat1.get(Integer.valueOf(258))); // 取手机的IMEISystem.out.println("The IMEI is : " + s);String uin = String.valueOf(hashWithOutFormat.get(Integer.valueOf(1)));System.out.println("The uin is : " + uin);s = s + uin; //合并到一个字符串s = encode(s); // hashSystem.out.println("The Key is : " + s.substring(0, 7));in.close();in1.close();} catch (Exception e) {e.printStackTrace();}}public static String encode(String content){try {MessageDigest digest = MessageDigest.getInstance("MD5");digest.update(content.getBytes());return getEncode32(digest);}catch (Exception e){e.printStackTrace();}return null;}private static String getEncode32(MessageDigest digest){StringBuilder builder = new StringBuilder();for (byte b : digest.digest()){builder.append(Integer.toHexString((b >> 4) & 0xf));builder.append(Integer.toHexString(b & 0xf));}return builder.toString();}
}

运行结束后就会获得密码:

导出数据库

windows

Windows用户可以使用sqlcipher.exe软件来查看数据库。打开数据库,输入密码,就可以查看数据库中的表。文字聊天记录储存在message表中,可以选中表,点击软件的右上角file-export导出表到csv文件,可以通过Excel查看表中的信息 执行这段命令可以查看制定对象的聊天记录

select datetime(subStr(cast(m.createTime as text),1,10),'unixepoch', 'localtime') as theTime,case m.isSend when 0 then r.nickname when 1 then '我'end as person,m.content from message m inner join rcontact r on m.talker = r.username where m.type=1 and r.nickname = '对方微信昵称'

linux

Linux用户可以使用sqlcipher来解密

sudo apt-get update
sudo apt-get install sqlcipher
sqlcipher EnMicroMsg.db 'PRAGMA key = "yourkey"; PRAGMA cipher_use_hmac = off; PRAGMA kdf_iter = 4000; ATTACH DATABASE "decrypted_database.db" AS decrypted_database KEY "";SELECT sqlcipher_export("decrypted_database");DETACH DATABASE decrypted_database;'

执行上面的命令之后会得到一个解密后的数据库decrypted_database.db,可以使用数据库软件查看。
当然了,一定一定要主要sqlcipher的版本问题!最好使用参考链接中的软件,否则,就算是密码正确了也无法导出。

mac

对于mac系统,推荐使用sqLiteStudio,版本号是3.2.0。


按照图像中的配置,输入密码,测试连接成功之后,就可以打开数据库。

数据库中的message表,就是我们所需要的表。我们右键选择导出该表,可以将数据表导出到csv文件中,注意,导出到csv的过程中,会失去聊天记录中语音通话时长的信息。这部分bug以后再修复。

总结

我们完成了微信聊天记录的提取与导出,最终导出到一个csv表中,方便后续的处理。

分析微信聊天记录(1)——获取微信聊天记录相关推荐

  1. springboot+h5页面+微信公众号获取微信用户信息

    springboot项目,h5页面通过微信公众号获取微信用户信息 最近本人有一个项目需求,微信公众号里点击一个菜单进入一个商城购物系统. 对于在微信公众号还是小白的我来说难度有点大,但是做完后发现也就 ...

  2. 微信公众平台—— 获取微信服务器IP地址

    微信公众平台-- 获取微信服务器IP地址 const ServerIpUrl = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?&acces ...

  3. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...

  4. 微信小程序-获取微信收货地址

    微信小程序获取微信收货地址 文章目录 微信小程序获取微信收货地址 一.在小程序管理后台( 小程序管理后台),「开发」-「开发管理」-「接口设置」中自助开通该接口权限. 二.开通之后直接调用接口. // ...

  5. 微信小程序获取微信公众号文章2

    微信小程序获取微信公众号文章2 前面介绍了一篇微信小程序打开微信公众号中的文章实战教程,主要介绍了实现的具体原理,但是实际去做的时候,发现了更多的坑,所以这里再补充一下. 原先的思路是不完整的 原先我 ...

  6. 微信小程序获取微信用户步数

    小程序开发代码 -js // index.js // 获取应用实例 const app = getApp()Page({data: {motto: 'Hello World',userInfo: {} ...

  7. python微信好友_python 获取微信好友列表的方法(微信web)

    如下所示: import urllib import urllib2 import os import time import re import cookielib import xml.dom.m ...

  8. 微信小程序与微信登陆的交互、微信登录、获取微信信息

    已有的互联网产品在接入小程序会面临一些和登录态相关的问题:怎么获取微信登录态:怎么把微信帐号和自己的帐号进行打通.我们来介绍一下如何把微信登录应用到你的小程序中. 我们先来看看微信登录的整个过程,如图 ...

  9. 【微信开发】获取微信头像的问题

    前几天做的一个项目,微信助力活动,需要获取微信用户的头像,然后存表,在获取微信头像的时候,遇到了两个问题,可能很普通的问题,解决起来也很好解决! 问题一Accesstoken 问题(获取信息接口的问题 ...

  10. php 微信网页授权获取微信access_token以及用户基础信息的方法

    首先在微信公众平台配置好 官方文档地址 目录 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) ...

最新文章

  1. 奇瑞a3中控按键图解_纷纷亮相,奇瑞众多黑科技悄然现身,焦点全在星途VX智能座舱上...
  2. codevs1251 括号
  3. 来说一说你对锁都怎么分类?
  4. Go内置库模块 flag
  5. phpstudy本地搭建域名访问
  6. MXNet下载Fashion-MNIST错误处理
  7. 开课吧9.9元学python靠谱吗-quot;我,90 后,月薪 5k,副业 2w ”年轻人搞副业到底有多野?...
  8. 完成端口————留着看
  9. 融媒体需要什么计算机软件,融媒体时代对编辑的能力要求
  10. java读取类字段名-BeanUtils.describe与PropertyUtils.describe(javaBean转map)
  11. Java类加载器的使用
  12. 四元数与欧拉角(数学推导)
  13. 在 pandas 中画树状图,使用 squarify 画树状图
  14. 关于解决Windows系统许可证即将过期的问题
  15. java具名参数_Spring框架笔记(二十五)——NamedParameterJdbcTemplate与具名参数
  16. LoadRunner 自动登录163邮箱
  17. 万网空间 php伪静态,百度云虚拟主机zblogphp在Nginx环境下设置伪静态规则,极为重要...
  18. LiteMes系统中对于文件系统的文件删除使用
  19. python在地图上画路线_使用Python和Perl绘制北京跑步地图
  20. Mysql中空字符''和空值null的区别

热门文章

  1. ROS中使用罗技G29遥控器
  2. 697小说源码PC端+手机端+采集工具(源码带3000本小说的数据)
  3. 智慧城市——数字化城市管理平台系统建设方案
  4. Mac 百度云加速下载,突破限速,大文件无压力(小白使用无压力)
  5. c语言必背代码入门电子书下载,c语言初学必背代码.pdf
  6. 基于数据驱动的人脸识别课题研究
  7. WebRAY权小文:产品就是工程师的尊严
  8. Windows Server 2012 R2 DirectAccess功能测试(3)—App2服务器安装及配置
  9. VB编程操作AutoCAD线型
  10. 【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习