怎么寻找微信撤回的图片

怎么寻找微信撤回的图片

点点

2021-05-22 10:47 阅读 867 喜欢 0

1 回顾

自从发布文章“寻找微信撤回的图片”之后,骗了不少粉啊。

总之,之前提出了一种可以找到微信撤回图片的方法。

2 真相

之前的说法是,工程师并没有真正把撤回的图片删除,而是加密后藏起来了。其实这样说并不严谨,经过后续测试,发现PC端的确如此,而手机端(Android)撤回的图片是有删除的,但是删除的不干净。

2.1 PC端

微信所有接收到的图片都储在[X]:\Users[USER]\Documents\WeChat Files[WECHAT_USER]\Data。里面有一堆以.dat为后缀的文件,他们大小不一,都经过了加密。而加密的方法便是对字节逐一“异或”。

之前的说法是,加密后的字节 = 原始字节 ^ 0x51。为了方便,我们把0x51称作“magic码”。

有网友反馈,magic码不一定是0x51,有的机器是0x50。经过一些测试,结论是,magic码与微信号有关,即不同的微信号在同一台机器可能得到不同的magic码,而同一个微信号在不同的机器上得到了相同的magic码。这里猜测,magic码是由微信号或者微信ID计算得来的。

其实,我们无需关心magic码的计算方式。因为,我们可以肯定的是,.dat文件是图片,而对于JPEG的图片,其对应二进制的第一个字节是0xFF。

所以,问题变成了,已知:.dat文件对应二进制的第一个字节 = 0xFF ^ magic码,求magic码。

我们已经知道,如果C=A^B,则A^C=(A^A)^B,而A^A=0,所以A^C=B,即B=A^C。

magic码 = 0xFF ^ 已知.dat文件对应二进制的第一个字节。

修改后的解密代码:

def _decode_pc_dat(self, datfile):
with open(datfile, 'rb') as f:
    buf = bytearray(f.read())

magic = 0xff ^ list(buf)[0] if buf else 0x00 #important
imgfile = re.sub(r'.dat$', '.jpg', datfile)
with open(imgfile, 'wb') as f:
    newbuf = bytearray(map(lambda b: b ^ magic, list(buf)))
    f.write(str(newbuf))

2.2 手机端(Android)

之前提到,/sdcard/tencent/MicroMsg/diskcache中存放类似cache.data.10的文件,大小在2MB左右。如果把文件后缀改为.jpg,是可以打开的,JPEG文件里实际上是“串联”了一堆图片,可以通过以下代码把所有的图片拆分出来:

 def _decode_android_dat(self, datfile):
with open(datfile, 'rb') as f:
    buf = f.read()

last_index = 0
for i, m in enumerate(re.finditer(b'\xff\xd8\xff\xe0\x00\x10\x4a\x46', buf)):
    if m.start() == 0:
        continue

    imgfile = '%s_%d.jpg' % (datfile, i)
    with open(imgfile, 'wb') as f:
        f.write(buf[last_index: m.start()])
    last_index = m.start()

通过实验,发现这些拆分出来的图片并不包含撤回的图片。坏消息是,在手机端没有找到撤回的图片。好消息是,在微信的缓存文件夹里找到了撤回图片的“缩略图”。肯定是没有大图好看啦,但是如果我们早些年看过一种3GP格式的视频的话,这些缩略图的品质还是可以接受的。至少能知道对方发的是什么。

路径为:/sdcard/tencent/MicroMsg/[USER_HASH]/image2/[HASH1]/[HASH2]/th_[HASH],比如这样:/sdcard/tencent/MicroMsg/202cb962ac59075b964b07152d234b70/image2/6b/3a/th_c4ca4238a0b923820dcc509a6f75849b。给文件名加上.jpg后缀就可以打开啦。

由于缓存文件夹里的文件非常多,建议根据修改时间来定位HASH1和HASH2。

3 并不神奇的0x51

之前说的最大的一个bug是,对于PC端图片的加密,工程师选择了一个神奇的数字0x51与各个字节进行异或。而且我还自圆其说了,说什么0x51是“Q”的ASCII码。为啥选择“Q”呢,因为“QQ”。

不忍直视啊,上面已经解释了,magic码并不固定。最后献上修改后的微信图片解密、找回撤回的图片工具:http://www.sdxlp.cn/tool/wechatdat

转载请注明出处: http://sdxlp.cn/article/weixin005.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
微信作为一款广受欢迎的社交软件,语音功能是其重要的组成部分。有时候,我们可能会遇到需要转发微信语音的情况。那么,如何转发微信语音呢?
智能手机在使用一段时间之后除了变得越来越卡之外,还有一个最大的变化就是内存占用越来越大,甚至经常出现“内存不足”的情况。
  科技发展的太快,很多新式手机的更新迭代的很快,我们免不了换新机,以后都会直接迁移所有APP的账号,其中迁移微信聊天记录是很多小伙伴的必选项,那么如何将微信聊天记录迁移到新机上呢?来跟小编看看聊天记录传到导入另一个手机上的方法教程。不要眨眼哟!嘿嘿。重要的实操步骤来了。
微信是一款在线通讯平台,深受小伙伴们的喜爱。现在,微信不仅有手机版,也推出了电脑版。可是,也有部分小伙伴们使用时有一些小小的困扰,有的小伙伴们不知道如何找到微信电脑版接收的图片。别着急哦,小编今天就教小伙伴们如何轻松搞定。
在日常生活中,我们在微信中,小伙伴们可以通过群发助手来帮助自己群发消息给好友,将指定的消息群发给所有的好友,超过200人的好友,具体该怎么操作呢,下面就和小编一起来看看吧!
微信作为一款广受欢迎的社交软件,不仅提供了文字、语音、视频等多种通信方式,还支持文件传输功能。但是,许多小伙伴们可能对微信接收的文件存放位置不太清楚,导致无法找到或管理这些文件。本文将详细介绍微信接收的文件在什么地方,帮助您轻松找到和管理这些文件。
使用新手机后涉及到很多重要数据的迁移,比如微信App就记录了很多手机用户的聊天记录、照片和视频等,就目前来说,微信还没有实现通过云端同步的方式来迁移聊天记录。怎么办呢?此文点点将介绍3种免费的微信数据转移的方法,教你微信怎么转移聊天记录到另一台新手机,希望能对小伙伴们有所帮助。
现如今微信是一个很火的社交软件,可以用来聊天,也可以用来支付,转账发朋友圈分享自己的生活等;给好友发消息发不出去是什么原因,现在就让小编带小伙伴们来看一下吧。