剖析微信聊天记录(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加密数据库,需要暗码才干翻开。有以下几种方法生成暗码:
数据库暗码有很多种生成方法:
- 手机IMEI+uin(微信用户id userinformation) 将拼接的字符串MD5加密取前7位。
如IMEI为123456,uin为abc,则拼接后的字符串为123456abc 将此字符串用MD5加密(32位)后为df10ef8509dc176d733d59549e7dbfaf 那么前7位df10ef8 便是数据库的暗码,由于有的手机是双卡,有多个IMEI,或许当手机获取不到IMEI时会用默许字符串
1234567890ABCDEF
来替代(小米10便是!!!),由于种种原因,并不是所有人都能得出正确的暗码,此刻咱们能够换一种方法。
- 反序列化
CompatibleInfo.cfg
和systemInfo.cfg
。
不管是否有多个IMEI ,或许是微信客户端没有获取到IMEI,而运用默许字符串替代,微信客户端都会将运用的信息保存在MicroMsg文件夹下面的CompatibleInfo.cfg和systemInfo.cfg文件中,能够经过这两个文件来得到正确的暗码,可是这两个文件需要处理才干看到信息。留意!一般这一步会显示IMEI值为null,此刻若暗码不正确,可将IMEI换为
1234567890ABCDEF
然后运用榜首种方法。
将IMEI.java
、CompatibleInfo.cfg
和systemInfo.cfg
三个文件放在相同目录下终端运行(IMEI.java
内容见下文):
javac IMEI.java
java IMEI systemInfo.cfg CompatibleInfo.cfg
- 运用hook方法得到数据库的暗码,这个方法最有效参阅
- 暴力破解
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))); // 取手机的IMEI
System.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); // hash
System.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表中,便利后续的处理。