【微信帐号&语音文件】结构分析

640?

原创:信息时代的犯罪侦查

ID:besti_xxsddfzzc


1、关于微信账号

640?wx_fmt=png

这里提到的微信内部账号(UIN)有三种可能的结构:9位数、10位数、1个负号拼接10位数。

UIN记录在/data/data/com.tencent.mm/shared_prefs/文件夹下的若干文件内,包括com.tencent.mm_preferences.xml、app_brand_global_sp.xml等。

例如:在system_config_prefs.xml文件里的

<int name="default_uin" value="2333333333" />

auth_info_key_prefs.xml文件里的

<int name="_auth_uin" value="2333333333" />

网上盛传的chrome://net-internals/#events抓包法也能得到UIN,通常与上述UIN相同,但只有两种可能的结构:9位数、10位数。如果10位数溢出了32位整型空间,就相当于“1个负号拼接10位数”的情况。

例如:数据包的UIN是233333333,实际的UIN是-1961633963(即233333333减去4294967296)。

接下来,如前文所述,“mm”直接拼接UIN,算出MD5值后得到该账号的文件夹名称。例如:UIN是-1961633963时,MD5(mm-1961633963) = b883740d5f568c04e488befca16eed50。

2、微信语音文件夹的命名规则

前文已经介绍过了,微信的语音文件存储在“voice2”下的两层目录下,而这两层的目录名称非常奇怪,都是两位字符,如“voice\3d\27\……”,name,"voice2”文件夹之下的二级目录名是如何选择的呢?

640?wx_fmt=png

以这里的“msg_480948061918919ac9300d9102.amr”文件为例,只要把“msg_”去掉,对基本名称的剩余部分(480948061918919ac9300d9102)计算MD5值,得到3d278f649bece4ff979a26db4e50d147,取第1-2位为第一层目录名,第3-4位为第二层目录名,这个文件就在/voice2/3d/27/文件夹下。


640?wx_fmt=png

3、微信语音文件的命名规则

640?wx_fmt=png

前文留下了一个思考题,这里的发送者标识“919ac93”是什么含义呢?

首先要明确,微信号包括缺省微信号自定义微信号。缺省微信号通常以“wxid_”(个人号)或“gh_”(公众号)开头,就像身份证号一样。

当用户自行选择自定义微信号后,缺省微信号不被删除或覆盖。而发送者标识就是缺省微信号的MD5值的前7位即使修改自定义微信号后也不变化

另外再说一句,保存头像时,得到的图片文件名称也由缺省微信号的MD5值构成例如:大家可以关注一下“新闻哥”这个订阅号做个实验。(非推荐行为)

640?wx_fmt=png

该公众号的缺省微信号是gh_faa35168f414

640?wx_fmt=png

该公众号的自定义微信号是newsbro

那么,应该对gh_faa35168f414计算MD5值,其头像图片将被保存为hdImg_aaf7752298514c9eeae37e7610181061.jpg,并且其发送者标识是“aaf7752”,即:缺省微信号的md5值,取前面七位。

4、待解决的新问题

1、发送者标识为什么只取7位呢?

笔者猜测是为了压缩文件名、节省数据空间。容易想到,这样做可能导致哈希冲突。对于最常见的缺省微信号格式(wxid_14位小写字母和数字),理论上有36^14种可能(6.14094E+21),而7位哈希只有16^7种可能(2.68435E+8)。

当然在操作中,可以在生成wxid时就丢弃冲突的wxid,直到微信用户数接近2.7亿。然而,马化腾在今年全国人大“代表通道”上透露,微信全球月使用活跃用户数在春节突破十亿大关。那么,怎样判别用户的唯一性?

2、语音文件名称里的发送时间由手机时间决定,不依赖于服务器的标准时间。

那么,怎样确定时间的正确性?


推荐阅读:

微信的操作系统之路

640?wx_fmt=jpeg

640?wx_fmt=png

信息犯罪与计算机取证

作者:王永全,齐曼 主编

当当 广告
购买

猜你喜欢

转载自blog.csdn.net/xCnhYKoHj3eK/article/details/81295163