微信image下.dat文件解密為.png——使用python


此文轉載自:https://blog.csdn.net/Zhanglw882/article/details/110221075#commentBox

用清理軟件清理電腦垃圾的時候,發現微信存了很多圖片,進入路徑一看,全是以.dat為格式的文件:
微信圖片儲存的格式

嘗試了直接把后綴名的.dat 改 .jpg和.png,都打不開,感覺事情沒那么簡單,隨后立刻度娘了一下,並找到了代碼。下面一步一步的來看一下。

微信客戶端保存的路徑一般是這樣的,相信你能找到。
F:\Users\Tencent Files\WeChat Files\wxid_\FileStorage\Image\2020-11
在這里插入圖片描述
就可以發現里面保存了一堆.dat格式的東西,微信保存的這個格式是16進制存儲的,所以需要一個可以查看16進制的軟件,如果你有就更好了,沒有的話推薦一個:微軟出的文本編輯器,官方鏈接:https://www.ultraedit.com/
在這里插入圖片描述
用它就可以打開我們的.dat文件。打開后就可以看到是這個樣子的,注意圖中標紅的位置,就是這個文件的開頭部分,你會發現你不管打開哪個.dat文件,開頭的四個數都是一樣的(你的4個數可能和我的不一樣,很正常,就像微信號一樣,但是你的.dat文件都是以特定的4位數字開頭)。這四個數相當於一把解鎖的鑰匙。
在這里插入圖片描述
我們用能打開16進制的軟件打開.jpg時,會發現.jpg的格式都是以FFD8為開頭的,同樣.png的也是FFD8。
在這里插入圖片描述
用你的4位數鑰匙與FFD8做異或運算,就能得到你的解鎖密碼:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
異或運算的結果是一個16進制的4位數,但是我們只需要最后兩位。所以最終你得到的是一個16進制的兩位數。記住它,后面要用的。

准備工作到這里就結束了,接下來就是代碼,用的python語言。
需要你改的地方有三個(代碼中有相應的注釋):
兩個路徑:將.dat的路徑、你要保存解密后文件的路徑都改為你自己的;
一個值:用你自己的密碼(兩位數)代替我的密碼。

import os

def imageDecode(dat_dir,dat_file_name):
    dat_read = open(dat_dir, "rb")
    if not os.path.exists(target_path):
        os.makedirs(target_path)
    out=target_path+"\\"+dat_file_name+".png"
    png_write = open(out, "wb")
    for now in dat_read:
        for nowByte in now:
            newByte = nowByte ^ xor_value
            png_write.write(bytes([newByte]))
    dat_read.close()
    png_write.close()

def findFile(dat_path):
    fsinfo = os.listdir(dat_path)
    for dat_file_name in fsinfo:
        temp_path = os.path.join(dat_path, dat_file_name)
        if not os.path.isdir(temp_path):
            #print('文件路徑: {}' .format(temp_path))
            imageDecode(temp_path,dat_file_name)
        else:
            pass
                        
if __name__=='__main__':

    # 修改.dat文件的存放路徑
    dat_path = r'F:\Users\Tencent Files\WeChat Files\wxid\FileStorage\Image\2020-04'
    
    # 修改轉換成png圖片后的存放路徑
    target_path = r'F:\Users\Tencent Files\WeChat Files\image'
    
    # 修改加密的異或值,比如說我的異或值最后兩位是B2,則xor_value = 0xB2,0x表示16進制
    xor_value = 0xB2
    
    findFile(dat_path)
    print("end")

運行后,可以看到輸出都是一個有一個圖片,直觀明了,就可以保存自己想要的圖片,清理不需要的:
在這里插入圖片描述
最后,我對比了一下解密前后的空間占用情況,占用空間的完全相同,不知道為啥騰訊要以.dat文件存儲。
左圖為.dat,右圖為.png
參考:https://blog.csdn.net/weixin_45611266/article/details/105411005


免責聲明!

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



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