平复备份之后微信里的聊天记录都还在,iphone上微信聊天记录的仓库储存分析

 

type

这么些第三随便是平时的数字,不过它确实的含义是把这么些数字转换来二进制去看。

数字 二进制 意义
0 0 微信运动
1 1 微信应用
2 10 app + 群
3 11 好友
4 100 群里面的人
6 110 群好友,对方加你,你未通过
7 111 群里面的人,而且互为好友
11 1011 拉黑别人
67 1000011 标星
256 100000000 删除好友
259 100000011 不让他看我的朋友圈
65539 10000000000000011 不看他的朋友圈

从地点的报表大约能够看出来
首先位:你是还是不是加对方为挚友
第二位:对方是或不是加你为挚友
其3人:是或不是群里面包车型客车
第5个人:你主动拉黑对方
第七位:标星
结余的只是大略,还未落实是或不是可信,还有越多的盼望大家发现后留言给自家,一同探究。


那里对部分的文件夹做简单的牵线(其实有局地自身也不知情个中放的是何等东西)

1. 怎么获得这个文件?

过去,我得以提示用户在越狱从此用 iTools 自行把微信 App
所在文书夹复制出来。可是自从有些版本的 iOS
开头,在不越狱的场所下,大家只能见到 /User/Media
那里的文书,而急需的地点数据在
/User/Containers/Data/Application/微信的UID。强迫用户为了那样一件事前去越狱鲜明不太融洽,而对“聊天记录迁移”抓包也不方便人民群众,所以小编想到另一种途径。

那就是 iTunes
备份。从经验判断,苏醒备份之后微信里的聊天记录都还在,表达肯定那一个文件在备份的时候保存到了电脑上。它们在什么地方?苹果官方给了答案。简单地说,Windows
下在
\用户\(用户名)\AppData\Roaming\Apple Computer\MobileSync\Backup\

唯独,iTunes
备份的文本夹结构不是很和睦,就像是各类手提式有线电话机上的公文名都变成了一串序号,当然打开相关的
plist 然后见到规律也易于。好音讯是,已经有过四人做了看似的事情,例如
iphonebackupbrowser,它也是用 C# 写的,用起来比较便宜。

故此,小编做的第叁步是让用户选拔做好的 iTunes
备份,从地点拾壹分源码,稍微修改一下就能够找到 com.tencent.xin
的连锁文书,从而在先后里平昔通过 iOS 上的途径找到呼应的文件。

下面以 iTools 为例

03a232a651...64467f3030 这个文件夹是 微信ID 的 MD5值。
如果曾经登陆过其他账号,就会有N个对应账号的文件夹。

假使想知道当前登陆的是哪些微信,就要保护LocalInfo.lst了,把那个文件导出来,然后修改其后缀名为.plist,然后打开药方可看来下图

Item2纪录的是当前登陆的微信ID,然后转换成MD5值就是上图的文件夹名称了
Item3是对应的电话号码账号

MD5!

dbcontactremark

本条字段是使用Blod去纪录的,而通过阅览,发现是一种很有趣的纪录格局。

起先若干字节未知音讯 –> (1 字节类型表达 –> 1(?) 字节长度 –>
字符串) 若干个

  1. 先取第i位(i=0),这么些应该表明效益的,不过本身还没弄懂它的意思。
  2. 取后一个人(i+1),那一个证明的是末端正文的长度,若是你收获的值是15
  3. 下一场从(i+2)初叶,截取15个字节,转换到字符串就是本文了
  4. 双重1-3,直至读取完全数字节截至

抑或不知情的话,直接上代码好了

//解析dbcontactremark
-(NSArray*)getRemarkDataBy:(NSData *)data{
    Byte *testByte = (Byte *)[data bytes];

    NSMutableArray* arr = [[NSMutableArray alloc]init];
    int len = 0;
    int index = 0;
    while (true) {
        index++;
        len = testByte[index];
        index++;

        if (index + len > [data length]) {
            break;
        }

        NSString* str = [[NSString alloc]initWithData:[data subdataWithRange:NSMakeRange(index, len)] encoding:NSUTF8StringEncoding];
        if (str != nil) {
            [arr addObject:str];
        }

        index += len;
    }

    return [arr copy];
}

依附七个运维中截取数据的图(最终一列有特殊含义,小说下边会再作分析)


开辟后大家会发觉众多的表,它们以Chat_当先,前面有接了一串数字和字母组成的事物,假如在精心数一下会发觉它们也是三15位

dbcontactchatroom

以此字段唯有 群 才有内容,其剧情表明了该 群 的有所成员

故事情节由两部分组成,第叁有个别是有着的成员的 微信ID,用
;(分号)隔离。另一有的则是相比详细的XML格式

<RoomData>
    <Member UserName="xxxx">
        <Flag>N</Flag>
        <DisplayName>xxxx</DisplayName>
    </Member>
    ...
</RoomData>

假诺您的配备上有两个用户登录过的话,便会有多个那种文件夹出现

3. 人命关天的数据库

iOS版微信,基本上全体的 好友 和 聊天 数据都以存放在DB那几个文件夹。
好友:WCDB_Contact.sqlite
聊天:MM.sqlite

开辟DB之后,大家会发现二个

好友:WCDB_Contact.sqlite

那一个库,大家珍视关怀的是 Friend
那么些表,然后打开一看,疯了,里面很多字段直接利用Blob的格式纪录,查看内容全体都以二进制彰显,肉眼比较难直接获得实惠的新闻。

通过鄙人几天的极力,大约弄懂了个别字段的趣味,下边详细表明


5.总结

以上描述了找到微信聊天记录涉及的公文的办法,然而讲道理它们都不得不算是“有依照的推测”。因为聊天记录那件事不太有利收集测试数据,只好保障它们符合本身能找到的笔录。

 

(1) Img

Img 文件夹中有一对以 MD5 命名的公文夹,它们对应数据库中的各 Chat_
表,而现实文件是以数字编号的,那个号码等于对应音讯的
MesLocalID(上面提到过)。文件有三种后缀:.pic、.pic_hd、.pic_thum,顾名思义是常规尺寸的图片、原图、缩略图。基本上是
JPEG 格式吧,那些影响相当小。

开拓后,会发现多少个文本夹,它们由数字和字母组成,细心的人可能会发觉它们都以有叁12人,其实每三个文书夹代表了2个用户的笔录,

标签

微信里还有1个叫标签的分组织承办法,而标签是存放在数据Curry面,而是Documents/微信号的MD5/contactlabel.list,继续改成plist就足以查阅

率先红框告诉你一共某些许分组
黄框,分组ID 3 => 标签名 bbb
绿框,分组ID 2 => 标签名 aa a
篮框,分组ID 1 => 标签名 qqq

到这边,你肯定会问,那标签的积极分子在哪呀?
实际上,下面大家已经见过了,在解析 dbcontactremark的时候

此间最后的三个字符串 3,4,其实正是意味那些好友,是存在 标签ID=3
标签ID=4 的这七个标签里面。


好友的素材到此地就截至了,接下去大家来介绍聊天音讯


出于隐衷的因由,那里无法将协调的聊天记录贡献出来

聊天:MM.sqlite

有了前方的准备,大家早已得以分析 Chat_[0-9a-f]{32}
表,并且以文件情势导出各类对话的聊天记录。怎么知道聊天的靶子是哪个人?Chat_
后面是 UsrName 或 alias 的 MD5 值。

先是看一下聊天记录的布局。MesLocalID
是一个相比根本的数字,固然一时半刻还用不到。CreateTime 顾名思义,并且应该是
UTC+0 的。Message 便是音讯笔者。Type
代表新闻的档次,能够自个儿考试刹那间,最终 Des
应该代表本人是或不是为音信的接收方。

下边不难描述一下本人见状过的 Type 和呼应的 Message 处理:

一千0: 系统消息,正是那种居中的。

34: 语音,消息里会有 <voicemsg>
标签,能够读出来长度等新闻。具体文件的处理下一节再讲,下同。

47: 表情,<emoji> 标签里面能够找到一些音信。

62: 小视频,<videomsg>

50:
录像/语音通话,<voipinvitemsg>。本来在微信里二者就能够切换,对用户解释得太细也没啥用。

3: 图片。

48: 位置。

42: 名片。

49: 链接。这里面含有的种类相比多,在 Message 里面会有
<title><des><url><thumburl> 等音信。微信应该是经过
<type> 标签来分明部分奇特的行使,比如 二零零三 是红包,3000 转账,17
实时地点共享,6
文本。(笔者试过把它照旧后边的模板地址改成其余,好像不管用。)

对此导出文字来说,那几个新鲜的事物就给用户体现个“[图片]”、“[表情]”吧。

还有1个题材是群聊,特点是用户名为
\d+@chatroom。在群聊当中,每种人(除了自身)的解说后边都会有“微信号:\n”,好让大家明白对方身份。

 

(2) Video

Video 文件夹类似,有 .video_thum 扩张名的缩略图,以及 .mp5的录像本体。录制是 AVC+AAC 编码的,可是依旧不重庆大学吗。

点击打开后会发现有以下多少个字段,记录了聊天记录

userName

本条顾名思义就是 微信号ID 了
如果以 @chatroom 结尾的,就是群


status        
 :好像唯有4和2二种值,表示音讯的根源,4意味对方,2意味友好

4.别样多媒体能源

为了给用户初恋般的体验,小编还指望能尽量复苏聊天的全部内容,那就需求投入相应的图纸(头像)、语音、摄像、动画表情等成分。

咱俩本来会想在 Documents/微信号的MD5
文件夹上面找这一个剧情。那时很不难发现:

     
打开后会发现是诸多少人的头像,当中有好多是来路不明的,推测是摇一摇,附属类小部件的人,漂流瓶等爆发的

dbcontactheadimage

顾名思义,这些列代表的头像的新闻

大致可以见到,里面有间接2个http的网址,只要把这几个网址截取出来就好了,那里小编用了最笨的艺术

//解析dbcontactheadimage
-(NSString *)getPhotoBy:(NSData *)data{
    if (data.length <= 8) {
        return @"";
    }

    int begin = 0;
    int end = 0;

    Byte *byteData = (Byte *)[data bytes];
    for(int i=0;i<[data length];i++){
        if (byteData[i] == 104 && begin == 0) {//104 = "h"
            begin = i;
        }

        if (byteData[i] == 26 && end == 0) {//26 = "结束"
            end = i;
        }
    }

    if (begin > 0 && end > 0) {
        int len = end - begin;
        NSData* tempData = [data subdataWithRange:NSMakeRange(begin, len)];
        NSString* str = [[NSString alloc]initWithData:tempData encoding:NSASCIIStringEncoding];

        return str;
    }

    return @"";
}

想开了什么样,sqlite数据库!

2. 文书夹对应的账号别的新闻

上边大家说到,文件夹名字是 微信ID 的MD5值,不过怎么才能博取该 微信号
的名字,头像等各类别的消息呢?

找到文件夹里的mmsetting.archive,依据国际惯例,改成plist后打开

账号信息一览无为,想要什么可自行提取

澳门皇冠官网app 1

(3) Audio

奥迪o 是语音,从前是 3GP 格式,未来开拓以后方可看看 SILK_V3
的字样,搜索能够一贯发现编写翻译好的转移程序。可是尚未源码,也得以活动物检疫索其余搞定方案。

而是在那些本子中,笔者始终没有从备份当中找到动画表情和头像那两项能源。怎么回事?

刚刚那段日子盘古真人越狱出现了,笔者把全体的 Documents 和 Library
文件夹复制出来,看了三次。原来它们在 Library/WechatPrivate
里,而这一个文件夹设置成了不备份。那也有道理,因为前边的多少个是个人的能源,而头像和神采随时都得以再去下载,所以并不必要放在
iTunes 备份个中。

那就是说不越狱的境况下,咱们怎么得到它们啊?记得上边提到过,在各类好友的
dbContactHeadImage
个中有健康和加大头像的地方;借使看一下包括动画表情的音信,当中也有其一表情的
GIF 地址。好的,下载就能够了。

好了,让大家回过头来看一看从前的什么三十二位的假名数字代表如何,他们应有代表相应的人,用于确认聊天记录属于和哪一位

           windows 7

               将在上边实行介绍

汉字编码?不对,汉字编码有长有短,不应有都以叁十二人

img      
:内有四个文件夹,分别存款和储蓄了和人闲谈时的殡葬的和介绍的相片,格式为pic

Imgstatus  
 :表示新闻的品类,1意味文字,5,6表示表情,7,21表示声音,2象征图片

澳门皇冠官网app 2

在MM.sqlite中还有二个名叫Friend的表,里面储存了UserName,NickName等音信

我们选拔2个打开后会发现众多的文本和文件夹

iphone上微信聊天记录的积存分析

澳门皇冠官网app 3

多少是储存在Documents中

设备:越狱后的iphone5 ios7.0.4

第3打开微信(那里运用的是itools)

Message      :聊天记录,文字也许是图形,声音,录制的连带音讯

audio     :内有七个文本夹,分别存款和储蓄了和人聊天时的话音资料,格式为aud

usr       
:内有好多usr格式的文本,但实际我们用记事本打开会意识文件的头写着澳门皇冠官网app 4故此它应该正是JFIF图片,

DB        :那是那篇小说的重要,内有MM.sqlite文件,以sqlite数据库储存了聊天记录的文字还有一部分任何的新闻

video     :内有多少个公文夹,分别存款和储蓄了和人聊天时的摄像质地,格式为mp5

总结

让大家下载二个SQLiteSpy,那样就能以图形界面包车型地铁办法来查阅MM.sqlite内储存的数码了

Des           
:感觉和status一样,表示新闻的源于,只是1象征对方,0象征友好

那一个三十六个人的队列就是依照UserName生成的,大家能够友善作证一下

澳门皇冠官网app 5

 

 

appicon:储存了有个别选择的图标

微信用sqlite数据库储储存聊天记录,数据库文件叫做MM.sqlite,

澳门皇冠官网app 6

将每叁个用户的用户名用MD5的办法加密,并以此30位的行列加上Chat_澳门皇冠官网app,为前缀作为表名,储存对应的聊天记录

大大小小挺大,后缀是sqlite

createtime 
 :每贰个聊天记录的时光,为表示自GMT时间一九六七年十一月一日零点来说的秒数

是怎么能将轻易长度的连串转换为三贰九人的啊?

 

 

 

Type           :也是表示新闻的花色,1象征文字,47象征表情,34代表声音,3代表图片,49意味着发送给朋友的内容

           微信5.3.1

澳门皇冠官网app 7

澳门皇冠官网app 8

相关文章