Bugku FileStoragedat详解 MISC

一、题目

在这里插入图片描述
点击下载后,一个名伪keli.dat的文件。
在这里插入图片描述

二、思路

下载完成后,我们利用winhex打开该文件,并没有发现有价值的信息。然后通过该后缀名为jpg、avi等格式也行不通。
重新读题,题目是 FileStoragedat,有经验的小伙伴可能会知道, FileStorage是微信存储数据的一个文件夹,该文件加下存放的是经过加密后微信中发送、接受的图片而形成的文件后缀为dat的文件。就是微信dat文件。想要做出这到题来,就得先弄懂微信dat文件形成的原因。

1、知识点

微信dat文件

微信的dat文件,将微信图片的每个字节通过异或运算后,保存为dat后缀名存储方式。以这到题为例,我们进行讲解。

  1. 首先我们用winhex等二进制查看工具打开该图片。图片左边的字节为17CE。
    在这里插入图片描述
  2. 这个17CE是重点,我们现在知道图片经过异或运算后,得到的结果是17CE,那么我们这里使用常见的几种图片格式进行逆推。
    大概公式:文件头 XOR 17CE = 两个相同的字节。

下图为常见的几种图片文件头格式

后缀名文件头
JPGFF D8 FF
PNG89 50 4E 47
BMP42 4D
GIF47 49 46 38
ZIP504B0304
RAR52617221
AVI41564920

先以jpg图片格式为例。打开计算器,并调制程序员模式,进行异或运算,输入FFD8 XOR 17CE运算后的结果是E816,先然,每个字节和17CE进行异或运算,应该相等才对。所以这张图片并不是jpg格式。

在这里插入图片描述
我们以PNG文件头格式为例。png文件头为8950,dat文件头为17CE。经过异或运算后,得到的结果是9E9E。说明原图的每一个字节同9E进行异或运算后得到的字节保存后,就是dat文件。
在这里插入图片描述
3. 已知dat文件所有字节,已知异或运算字节为9E,所以将这个dat文件的每个字节和9E进行异或运算后,就会得到一张PNG的图片了。思路有了我们进行复现。

三、复现

1、利用工具

一个大佬写的工具:
https://github.com/PiaoZhenJia/WeChatDatFileDecoder

  1. 文件下载完毕后,进入bin/debug/路径。运行WpfApp1.exe
    在这里插入图片描述
  2. 手动输入要进行解码的dat文件路径。手动输入文件解码后的保存路径。点击开始转换。
    在这里插入图片描述
  3. 会得到一个png结尾的图片,打开后为flag。
    在这里插入图片描述
    在这里插入图片描述
    flag:bugku{WeChatwithSteg0}

2、利用脚本

想要成为一名合格的黑客,必须要学会编程,拒绝做脚本小子。我很菜,但是也在不断学习,这里借鉴一个大佬的脚本。

# -*- coding: utf-8 -*-
# @Time    : 3/27/2019 21:54
# @Author  : MARX·CBR
# @File    : 微信Dat文件转图片.py
 
import os
 
def imageDecode(f,fn):
    dat_read = open(f, "rb")
    out='P:\\'+fn+".png"
    png_write = open(out, "wb")
    for now in dat_read:
        for nowByte in now:
            newByte = nowByte ^ 0x36
            png_write.write(bytes([newByte]))
        dat_read.close()
        png_write.close()
 
def findFile(f):
    fsinfo = os.listdir(f)
    for fn in fsinfo:
        temp_path = os.path.join(f, fn)
        if not os.path.isdir(temp_path):
            print('文件路径: {}' .format(temp_path))
            print(fn)
            imageDecode(temp_path,fn)
        else:
            ...
 
path = r'C:\Users\输入自己微信存储路径\Data'
findFile(path)
复制代码

四、总结

1、微信dat文件的生成原理。
2、利用工具解码。
3、利用脚本解码。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值