1審查

文章《尋找微信哲洙的照片》發(fā)表后騙了很多粉。

總之,之前提出了一種可以找到微信撤回圖片的方法。

2 真相

之前的說法是,工程師并沒有真正把撤回的圖片刪除,而是加密后藏起來了。其實(shí)這樣說并不嚴(yán)謹(jǐn),經(jīng)過后續(xù)測試,發(fā)現(xiàn)PC端的確如此,而手機(jī)端(Android)撤回的圖片是有刪除的,但是刪除的不干凈。

2.1 PC端

微信所有接收到的圖片都儲(chǔ)在[X]:\Users[USER]\Documents\WeChat Files[WECHAT_USER]\Data。里面有一堆以.dat為后綴的文件,他們大小不一,都經(jīng)過了加密。而加密的方法便是對字節(jié)逐一“異或”。

之前的說法是,加密后的字節(jié) = 原始字節(jié) ^ 0x51。為了方便,我們把0x51稱作“magic碼”。

有網(wǎng)友反饋,magic碼不一定是0x51,有的機(jī)器是0x50。經(jīng)過一些測試,結(jié)論是,magic碼與微信號有關(guān),即不同的微信號在同一臺(tái)機(jī)器可能得到不同的magic碼,而同一個(gè)微信號在不同的機(jī)器上得到了相同的magic碼。這里猜測,magic碼是由微信號或者微信ID計(jì)算得來的。

其實(shí),我們無需關(guān)心magic碼的計(jì)算方式。因?yàn)?,我們可以肯定的是?dat文件是圖片,而對于JPEG的圖片,其對應(yīng)二進(jìn)制的第一個(gè)字節(jié)是0xFF。

所以,問題變成了,已知:.dat文件對應(yīng)二進(jìn)制的第一個(gè)字節(jié) = 0xFF ^ magic碼,求magic碼。

我們已經(jīng)知道,如果C=A^B,則A^C=(A^A)^B,而A^A=0,所以A^C=B,即B=A^C。

magic碼 = 0xFF ^ 已知.dat文件對應(yīng)二進(jìn)制的第一個(gè)字節(jié)。

修改后的解密代碼:

def _decode_pc_dat(self, datfile): with open(datfile, 'rb') as f: buf = bytearray()) magic = 0xff ^ list(buf)[0] if buf else 0x00 #important imgfile = re.sub(r'.dat$', '.jpg', datfile) with open(imgfile, 'wb') as f: newbuf = bytearray(map(lambda b: b ^ magic, list(buf))) f.write(str(newbuf))

2.2 手機(jī)端(Android)

之前提到,/sdcard/tencent/MicroMsg/diskcache中存放類似cac的文件,大小在2MB左右。如果把文件后綴改為.jpg,是可以打開的,JPEG文件里實(shí)際上是“串聯(lián)”了一堆圖片,可以通過以下代碼把所有的圖片拆分出來:

def _decode_android_dat(self, datfile): with open(datfile, 'rb') as f: buf = f.read() last_index = 0 for i, m in enumerate(b'\xff\xd8\xff\xe0\x00\x10\x4a\x46', buf)): if m.start() == 0: continue imgfile = '%s_%d.jpg' % (datfile, i) with open(imgfile, 'wb') as f: f.write(buf[last_index: m.start()]) last_index = m.start()

通過實(shí)驗(yàn),發(fā)現(xiàn)這些拆分出來的圖片并不包含撤回的圖片。壞消息是,在手機(jī)端沒有找到撤回的圖片。好消息是,在微信的緩存文件夾里找到了撤回圖片的“縮略圖”??隙ㄊ菦]有大圖好看啦,但是如果我們早些年看過一種3GP格式的視頻的話,這些縮略圖的品質(zhì)還是可以接受的。至少能知道對方發(fā)的是什么。

路徑為:/sdcard/tencent/MicroMsg/[USER_HASH]/image2/[HASH1]/[HASH2]/th_[HASH],比如這樣:/sdcard/tencent/MicroMsg/202cb962ac59075b964b07152d234b70/image2/6b/3a/th_c4ca4238a0b923820dcc509a6f75849b。給文件名加上.jpg后綴就可以打開啦。

由于緩存文件夾里的文件非常多,建議根據(jù)修改時(shí)間來定位HASH1和HASH2。

3 并不神奇的0x51

之前說的最大的一個(gè)bug是,對于PC端圖片的加密,工程師選擇了一個(gè)神奇的數(shù)字0x51與各個(gè)字節(jié)進(jìn)行異或。而且我還自圓其說了,說什么0x51是“Q”的ASCII碼。為啥選擇“Q”呢,因?yàn)椤癚Q”。

不忍直視啊,上面已經(jīng)解釋了,magic碼并不固定。最后獻(xiàn)上修改后的微信圖片解密、找回撤回的圖片工具: 。

1.《怎么查微信已撤回?我來告訴你答案怎么尋找微信撤回的圖片》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《怎么查微信已撤回?我來告訴你答案怎么尋找微信撤回的圖片》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2996049.html