初識.dat文件


0x00 定義

.dat文件不是標准的文件格式,很多應用都會使用這個后綴存儲數據。一般只能通過產生該文件的程序正確訪問,如QQ、微信都會產生.dat文件。

以微信為例。微信使用該后綴的文件存儲圖片(顯然是不如聊天記錄那么機密,沒有存儲為.db文件),文件保存於FileStorage文件夾。以十六進制方式查看這些文件,可以發現許多文件的頭部字節為8A AD,也有17 CE等。

實際上微信程序是將圖片的每個字節與某個值異或后進行存儲的(異或是對文件加解密的基本操作之一)。

0x01 提取

常見的后綴都有獨特的文件頭:

格式 頭部
.jpg FF D8 FF
.png 89 50 4E 47
.bmp 42 4D
.gif 47 49 46 38
.zip 50 4B 03 04
.rar 52 61 72 21
.avi 41 56 49 20

使用異或性質還原出常量(由於是逐字節操作,常量應當是由兩個相同的字節構成的):

很巧合,使用.jpg的頭部得到的常量就是正確的。

利用這個常量對原文件的每個字節按位異或即可還原出圖片了(還原成功就說明思路可行)。

0x02 試驗

基於一道實戰題目:

其頭部為17 CE,使用.jpg頭部的計算結果顯然是有問題的:

但是使用.png的頭部似乎得到了正確的常量:

0x03 腳本

編寫一個腳本執行按位異或:

# -*- coding: utf-8 -*-

# 常量為9E9E
def decodeHack(fi, fo):
    data_in = open(fi, 'rb')
    out = './' + fo + '.png'
    data_out = open(out, 'wb')
    for i in data_in:
        for byte in i:
            new_byte = byte ^ 0x9E
            data_out.write(bytes([new_byte]))
    data_in.close()
    data_out.close()


if __name__ == "__main__":
    decodeHack('./keli.dat', 'hack_output')

0x04 結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM