本文是獻給那些手頭存有量dat文件的人,經供參考。
【前言】
事情的緣由是很久很久之前在和好友微信聊天,好友發了一圖片,正看的流口水呢,就突然被撤回了,弄的我是心急火燎的啊。
順帶提一下,那時候用的呢,正好用的PC端的微信。我就不信了啊,難道被撤回了就一點辦法都沒有了嗎?
要知道,早在幾百年前,就連删除的文件都能恢複,就不信找不到一點的蛛絲馬迹。。。
如果用手機,估計我也沒那個閑心去找了,工程量太大,對不!
【發現】
回歸正題,我們找蛛絲馬迹……
凡事自己解決不了的問題,我一向是直接問度娘的,自從谷哥棄天朝而去。。。
度娘的粉絲是千千萬萬的,其中搜索到的信息太零碎,我就不一一放入參考中,
大概有用的信息就是:
微信所有發送接收的照片是實實在在存在于我們的電腦中的
所有的照片是經過加密處理的,後綴名為**.dat,加密方式:異或
存放加密文件夾的位置,位置是:C:UsersDocumentsWeChat FilesData
因為什麼都沒動過,那個文件依然躺在那裡,但是時間我不确定,因為太過久遠了。
最近幾日,為要新裝win10,所以重新裝了微信,然後複制備份dat過去,結果,第二次打開微信,什麼都沒有了。
我很慶幸的是,我一直沒有更新微信PC端,而且我複制了一堆的dat,哈哈哈哈。。
因為時間不确定,我把所有的dat文件都保存了下來,留下的,肯定是有用的。
【方法】
根據【參考1/2】,我們發現了微信圖片的加密方式:異或加密
文章中通過發送圖片,對比dat文件,發現了加密方式:【異或】【加密值:ox51】
但是,我隻有加密過後的dat文件啊,原圖被對方撤回了啊。
保存都沒法保存,别說是對比了。
文章中的對比方式是用二進制編輯器打開,本人在這推薦【010 編輯器】,有腳本功能,後續會用上
我沒有原圖怎麼辦呢,本人有辦法!
【所有jpg格式照片16進制開頭FF D8,結束FF D9】
這是重點,要考的哦!不懂的多打開幾張,複習下功課就知道了
【過程】
言歸正傳!!!
1.用編輯器打開
大家發現,這個dat文件的開頭是【53 74】,結尾是【53 75】,是不是和我上面說的【開頭FF D8,結束FF D9】幾乎是一模一樣啊~
2.對比比較
我們這裡用win10知道的計算器,win7也有,切換到【程序員】模式
輸入我們已知的數值【FF】,;再輸入我們dat文件的開頭【53】
做個簡單的草稿紙羅列:
3.計算解密Code
之前大家都說是【異或加密】,給科普下,什麼是異或加密
簡單的說就是1±1=0;0±0=0;0±1=1
相信很簡單,對吧,算出來了,【Code=10101100】
那這個數值是多少呢,我們回到【計算器】,切換到【Bin】,輸入數值,
SO,【Code=AC】
做個加密老是換,在【參考】中是51,也有14,我自己恢複的這個是89,做個是新的樣本:AC
4.解密
知道了加密值,知道了解密方法,其他的就好辦多了,
當然不可能自己一個個計算修改數值,【參考3】中給出了一段代碼
我自己對其中的code做了修改,就是0x14的地方,修改成0xAC,
代碼如下:
//--------------------------------------
RequiresVersion( 4.0 );
RequiresFile();
const int BLOCK_SIZE = 1024;
uchar buffer[ BLOCK_SIZE ];
quad size, pos;
int i, bufsize;
pos = 0;
size = FileSize();
while( size > 0 )
{
bufsize = size < block_size="" size="">
ReadBytes( buffer, pos, bufsize );
for( i = 0; i < bufsize;="" i++="">
{
buffer[i] = buffer[i] ^ 0xAC; }
WriteBytes( buffer, pos, bufsize );
pos += bufsize;
size -= bufsize;
}
return 1;
點擊運行!
運行結果如下,以橙色顯示修改,查看開頭【FFD8】
再看看結尾:【FF D9】
另存為jpg文件,哇嗚~~~
大功告成!
【寫在最後】
不知道微信是不是改版了,目前我試驗下來,有幾點要注意的:
對方發過來圖片,當時是可以看到dat文件的,但是重新推出登錄微信之後,dat文件被删除
聊天過程中,删除聊天,也是會清空dat文件的。
基于以上條件,弄個攔截dat文件的程序是必要的,這點【參考3】中已經提及,本人并未測試。
恢複照片是可以的,誰也攔不住,但是自己看看就可以了,千萬别傳到不該傳的地方,保護自己最重要。
有話要說...