最近在整理磁碟檔案,因為經過一段時間的蹂躪後,磁碟實在是太多東西了,不整理一下,簡直對不住我的SSD好嘛。偶然發現磁碟中某公司的資料夾佔用空間簡直不能再大,那可是我的C盤啊,合計才119GB的SSD空間,你給我佔了差不多10個G,說的就是你Tencent。
但是也不能怪人家,畢竟人家只是負責將資料儲存下來方便給我們展示而已。所以,就冒著好奇的心,看看資料夾裡面有什麼。因為這次的主題說的是Dat檔案的解密,我就不扯那麼遠。 大家假裝知道我點完資料夾,看到很多歷史圖片快取圖片眾多*.db就好了哈。(PS:不得不提的是騰訊將近給我快取了6個G的表情包,未來可以收集這個內容做一個隨機表情包網頁出來樂呵樂呵呀。咳咳這些都是後話啦) 然後我們便來到了微信PC版的資料夾,找到自己的賬號所在資料夾。比如我的是CBR-1997。找到後,如下所示
這個時候,我便猜測,這些dat檔案都是什麼內容呢?聊天內容?不可能呀,聊天內容這麼機密,肯定是放到db裡面加密處理的。聊天檔案?也不至於有1700+個檔案吧。所以,綜上,猜測這些個dat檔案都是一些聊天時接收到的“表情包”或者“圖片”。嗯,平時那些群聊鬥圖這麼凶,估計沒錯了的。 接下來,嘗試直接改字尾試試。不出意外的得到了“圖片錯誤”,我就知道不會這麼簡單。。。那接下來怎麼辦嘛。思來想去,便想著拿16進位制編輯器看一下下,裡面資料長啥樣。開啟了多個檔案看到裡面檔案頭是8A AD ,但是一般jpg檔案的檔案頭為FF D8 開頭的。又記得之前看過說文通過異或對檔案進行簡單的加解密的很常規的做法。所以,開啟計算器。一頓操作猛如虎,哈哈哈,結果一看沒錯遼,
將計算器調整到程式設計師模式,然後使用FFD8與8AAD進行異或處理。結果為7575,顯然可以知道,這個dat就是微信將收取到的檔案,對每個位元組進行異或0x75進行加密,儲存為dat檔案。 這個時候,只要用Python寫個指令碼,不就可以輕鬆解碼了嘛。
來來來,程式碼寫起來。
# -*- 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)
複製程式碼
跑出來的結果如下圖,沒錯吧,以往的表情包,發過收過的圖片都出現在了裡面。 至此微信dat檔案的復原解碼到此就完成了。補充一下,每個賬號或者客戶端對那個異或值都是不一樣的,所以,小夥伴們如果需要還原dat檔案的話,還是要自己用計算器異或處理一波哦。看看這個值是多少哈。
————————————————————————————————————————————————— 大家可以關注我的微信公眾號,不定價更新一些技術內容或者思考內容。