bugku:FileStoragedat;微信dat文件的解密

刷题的时候碰见一个dat文件解密的题
平时在微信的文件夹中也会碰到,但是没有关注过是什么东西
后来才知道是微信传输文件时进行加密以后的文件数据

查阅以后得知dat文件只是进行了简单的异或运算的加密存储,所以只需要很简单进行一次异或得到加密的密钥就可以解密这个文件

常见的文件头有:
在这里插入图片描述
由于异或运算的特殊性,a xor b=c。则:a xor c=b.
所以只需要取dat文件的前两个字节与常见文件头进行异或,如果得到的两个字节相同,则这个字节就是密码了(一般微信dat文件都只是用一个字节的密钥进行加密

上代码:

#微信dat文件解密
import base64
import struct,binascii
def getDat():
    dic={0xFFD8:"JPG",0x8950:"PNG",0x424D:"BMP",0x4749:"GIF",0x504B:"ZIP",0x5261:"RAR",0x4156:"AVI"}
    li=list(dic.keys())
    with open("keli.dat","rb")as f:
        data=f.read(2)
        data=str(binascii.b2a_hex(data))[2:-1]
        data=int(data,16)
        for i in li:
            j=hex(i ^data)
            if(j[2:4]==j[4:6]):
                key=j[0:4]
                print("key:",key)
                tail=dic[i]
                print("文件格式为:",tail)
                break
        f.seek(0,0)
        with open("result."+tail,'wb')as out:
            for now in f:
                for nowByte in now:
                    by=nowByte^int(key,16)
                    out.write(bytes([by]))


#主函数
if __name__ == '__main__':
    print("/*Begin*\\")
    getDat()

原本的文件:
在这里插入图片描述
解密以后的文件:
在这里插入图片描述
得到flag:
在这里插入图片描述
直接QQ识图
bugku{WeChatwithSteg0}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值