日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BugkuCTF-MISC题FileStoragedat

發(fā)布時(shí)間:2024/9/27 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BugkuCTF-MISC题FileStoragedat 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

知識(shí)點(diǎn)

FileStorage是微信存儲(chǔ)數(shù)據(jù)的一個(gè)文件夾,該文件夾下存放的是經(jīng)過加密后微信里發(fā)送、接受的圖片而形成的文件后綴為dat的文件。就是微信dat文件。想要做出此題,就得先弄懂微信dat文件形成的原因。

微信的dat文件,將微信圖片的各字節(jié)通過異或運(yùn)算后,保存為dat后綴名存儲(chǔ)方式。

解題流程

點(diǎn)擊下載后,
打開,一個(gè)名偽keli.dat的文件

首先我們用winhex等二進(jìn)制查看工具打開該圖片。圖片左邊的字節(jié)為17CE。

這個(gè)17CE是重點(diǎn),我們現(xiàn)在知道圖片經(jīng)過異或運(yùn)算后,得到的結(jié)果是17CE,那么我們這里使用常見的幾類圖片格式進(jìn)行逆推。

大概公式:文件頭 XOR 17CE = 兩個(gè)相同的字節(jié)。

下圖為常見的幾類圖片文件頭格式
后綴名 文件頭
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圖片格式為例。打開計(jì)算器,并調(diào)制程序員模式,進(jìn)行異或運(yùn)算,輸入FFD8 XOR 17CE運(yùn)算后的結(jié)果是E816,先然,各字節(jié)和17CE進(jìn)行異或運(yùn)算,應(yīng)該相等才對(duì)。所以這張圖片并不是jpg格式。

我們以PNG文件頭格式為例。png文件頭為8950,dat文件頭為17CE。經(jīng)過異或運(yùn)算后,得到的結(jié)果是9E9E。說明原圖的各個(gè)字節(jié)同9E進(jìn)行異或運(yùn)算后得到的字節(jié)保存后,就是dat文件。


3. 已知dat文件所有字節(jié),已知異或運(yùn)算字節(jié)為9E,所以將這個(gè)dat文件的每個(gè)字節(jié)和9E進(jìn)行異或運(yùn)算后,就會(huì)得到一張PNG的圖片了。思路有了我們進(jìn)行復(fù)現(xiàn)。

三、復(fù)現(xiàn)

1、利用工具
一個(gè)大佬寫的工具:
https://github.com/PiaoZhenJia/WeChatDatFileDecoder
文件下載完畢后,進(jìn)入bin/debug/路徑。運(yùn)行WpfApp1.exe

手動(dòng)輸入要進(jìn)行解碼的dat文件路徑。手動(dòng)輸入文件解碼后的保存路徑。點(diǎn)擊開始轉(zhuǎn)換。

會(huì)得到一個(gè)png結(jié)尾的圖片,打開后為flag。

得到flag

方法二:
最好能通過腳本解碼dat

import osdef 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 ^ 0x36png_write.write(bytes([newByte]))dat_read.close()png_write.close()def findFile(f):fsinfo = os.listdir(f) #os.listdir() 方法用于返回指定的文件夾包含的文件或文件夾的名字的列表。for fn in fsinfo:temp_path = os.path.join(f, fn) #python路徑拼接os.path.join()函數(shù)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)""" os.listdir() 方法用于返回指定的文件夾包含的文件或文件夾的名字的列表。 它不包括 . 和 .. 即使它在文件夾里。 """ 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的BugkuCTF-MISC题FileStoragedat的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。