微信聊天記錄查看器(程序+源碼) - iOS版

本文版權歸cxun所有,如有轉載請註明出處與本文鏈接,謝謝!
原文地址:http://www.cnblogs.com/cxun/p/4338643.html

 

摘要

iPhone中的微信是不是佔用了越來越多的空間呢?不想刪圖片?不捨得刪視頻?那就轉移到電腦硬盤上來吧,在Windows中使用本軟件進行查看、搜索,手機上的空間就可以騰出來了!本文詳細介紹了軟件的使用說明,以及介紹了微信聊天記錄數據存儲格式,並給出了本軟件與源代碼的下載地址,最後是iPhone聊天記錄中圖片與視頻數據的清理方法。

1. 前言

隨着使用微信的日子變長,手機中微信所佔用的空間也越來越大,iPhone的存儲空間也日益緊缺,其中圖片、視頻所佔的空間最大,像我這樣什麼都要追求完整性的人,是堅持不會刪除任何一張照片或視頻的,喜歡用手機拍照片視頻的我,每過一段時間就把照片視頻移到電腦存儲,騰空手機。可是到了每一兩天都要騰空間的時候,我發現這樣不是長久之道,看了看微信已經佔用了2個多G的空間,這樣下去不是辦法,現在騰訊官方沒有iOS版本微信的聊天記錄轉儲硬盤工具(Android的好像有);即便有,在Windows上要求能夠像在手機上查閱;微信內置的聊天記錄備份恢復功能是爲轉儲到其它設備設計的,聊天記錄在服務器只能存放7天,而且2G這麼大的數據要上傳到候年馬月?Smile with tongue out

因此,乾脆自己寫一個聊天記錄查看器吧,把數據挪到電腦大硬盤,這樣就可以放心地在手機上刪圖片、視頻啦Hot smile。以下先給出本人開發的微信聊天記錄查看器的使用說明,以及本人分析猜測的聊天記錄數據存儲格式,可是不全,只能顯示最主要的數據內容,感興趣的朋友可以一塊分析完善。

2. 使用說明

首先說明,該軟件目前僅支持iPhone上的微信聊天記錄。以下分別對軟件的使用方法進行詳細說明。

2.1 數據轉儲

使用 iTools 等第三方工具將微信(WeChat)應用中 Documents 目錄導出到電腦硬盤保存,該目錄中包含所有在此 iPhone 上登錄過的微信帳號的聊天記錄,也可以只導出某一個帳號的聊天記錄。每一個微信帳號的數據都存儲在以該微信ID的MD5值爲名稱的文件夾中,例如,圖2-1中 Documents 目錄下32位數字名稱的文件夾分別是不同的微信帳號。

圖 2-1 Document目錄示例 
圖 2-1 Documents目錄示例

2.2 選擇數據庫

聊天記錄數據庫文件存放在微信帳號文件夾內的 DB 文件中,文件名爲 MM.sqlite。本文最後將提供一個聊天記錄例子,程序運行時會提示選擇數據庫文件,選擇以下文件即可:06af9525a11ebb4f49ec72be6d165d10\DB\MM.sqlite。

2.3 主界面

啓動軟件,選擇數據庫加載完成後,程序的主界面如圖2-2所示,左側是該微信帳號的好友列表,按拼音首字母排序,右側是具體的聊天記錄內容。好友列表分爲3個標籤頁,分別是“好友”、“羣”、“其它”,顧名思義,單獨好友在“好友”標籤頁,羣聊天在“羣”標籤頁,剩下的訂閱號、服務號等等在“其它”標籤頁。好友列表上方可以搜索好友,聊天內容上方可以搜索文字。點擊好友列表中的好友,右側的聊天內容窗口將加載與該好友聊天的具體內容。

由於本程序採用的是EO.WebBrowser控件試用版(博主窮~ Crying face),每次程序啓動後,聊天內容窗口下側會出現購買許可的提示,關閉它即可,不會影響後續閱讀。

圖 2-2 微信聊天記錄查看器主界面 
圖 2-2 微信聊天記錄查看器主界面

2.4 數據類型

2.4.1 文字

就像手機中顯示的那樣,採用氣泡風格顯示,如圖2-3所示。

 

圖 2-2 數據類型示例:文字 
圖 2-3 數據類型示例:文字

2.4.2 表情

可以顯示微信自帶的小型emoji表情,如圖2-4所示。可以顯示的所有emoji表情請參見圖2-5。

圖 2-3 數據類型示例:emoji表情 
圖 2-4 數據類型示例:emoji表情

圖 2-4 所有能顯示的 emoji 
圖 2-5 所有能顯示的 emoji

除了 emoji 以外,還可以顯示微信官方的動畫表情,如圖2-6所示。

圖 2-5 數據類型示例:動畫表情  圖 2-5 數據類型示例:動畫表情  圖 2-5 數據類型示例:動畫表情4aa19a174e2bf01042cdedc94f89ce83  2ec3972a9d41c6ef5a0d3bdc1b72de3b 
圖 2-6 數據類型示例:動畫表情

除了這兩種表情以外,微信用戶還經常看到許多非官方表情,如果想在這軟件裏顯示的話,需要進行額外的數據導出工作,也不復雜:照樣使用 iTools 打開微信App的這個目錄:/Library/WechatPrivate/emoticon1,將此文件夾複製到本軟件的安裝目錄,覆蓋原有的 emoticon1 文件夾即可。

2.4.3 圖片

聊天記錄中的圖片如圖2-7所示,點擊圖片將會調用本機默認的 *.jpg 文件關聯程序來查看大圖,默認的程序是 Windows Photo Viewer。

圖 2-6 數據類型示例:圖片 
圖 2-7 數據類型示例:圖片

2.4.4 視頻 & 小視頻

聊天記錄中的視頻與小視頻如圖2-8所示,點擊視頻將會調用本機默認的 *.mp4 文件關聯程序來觀看視頻。

圖 2-7 數據類型示例:視頻 & 小視頻 
圖 2-8 數據類型示例:視頻 & 小視頻

2.4.5 語音

聊天記錄中的語音如圖2-9所示,點擊將會播放語音內容。

圖 2-8 數據類型示例:語音 
圖 2-9 數據類型示例:語音

2.4.6 分享鏈接

聊天記錄中的分享鏈接如圖2-10所示,點擊鏈接將會調用瀏覽器查看原網頁。

圖 2-9 數據類型示例:分享鏈接 
圖 2-10 數據類型示例:分享鏈接

2.4.7 位置信息

聊天記錄中的位置如圖2-11所示,點擊鏈接將會調用瀏覽器查看具體的地圖信息,如圖2-12所示。

圖 2-10 數據類型示例:位置信息 
圖 2-11 數據類型示例:位置信息

圖 2-11 瀏覽器查看具體的位置信息 
圖 2-12 瀏覽器查看具體的位置信息

2.4.8 名片

聊天記錄中的名片消息如圖2-13所示。

圖 2-12 數據類型示例:名片 
圖 2-13 數據類型示例:名片

2.4.9 語音、視頻電話 
聊天記錄中的語音、視頻電話只能給出當時的通話時長等信息(微信是不可能錄製你的通話內容DDevil),如圖2-14所示。

圖 2-13 數據類型示例:語音、視頻電話 
圖 2-14 數據類型示例:語音、視頻電話

2.5 搜索好友

 

當好友數據衆多時,從左側的好友列表上方搜索欄內輸入好友的關鍵字,可以是中文,也可以是拼音,但目前版本不能是拼音首字母,例如:搜“張三”,可以輸入“張”、“三”、“zhangsan”或“zhangs”等等,但不能輸入“zs”。當輸入內容時,搜索結果窗口將即時出現,並列入符合關鍵字的好友,如圖2-15所示。點擊搜索結果的好友,將自動加載與他聊天的內容。

image 
圖 2-15 搜索好友示例

2.6 搜索聊天內容

聊天內容的搜索分爲“搜索當前好友”與“搜索所有好友”,在聊天內容窗口上方的下拉框選擇即可。在搜索欄內輸入關鍵字,回車後將進行搜索,搜索結束後將顯示搜索結果列表,點擊某條記錄後,聊天內容窗口將顯示並高亮關鍵字,如圖2-16所示。這裏提示:搜索所有好友耗時將比較長。

圖 2-16 搜索聊天內容示例 
圖 2-16 搜索聊天內容示例

2.7 頁面跳轉

聊天內容窗口右上角是導航按鈕,可進行翻頁。若頁數過多時,可以直接單擊頁數,將彈出跳轉頁面的輸入窗口,輸入想要查看的頁碼後將跳轉至該頁面,如圖2-17所示。

image 
image 
圖 2-17 頁面跳轉示例

3. 微信聊天記錄格式

聊天記錄的根目錄是以用戶微信ID用戶名(不一定是微信ID,見下文)的MD5哈希值爲名的文件夾。下文假設root爲根目錄。聊天記錄最主要的內容是一個SQLite類型的數據庫文件MM.sqlite,路徑是root\DB\MM.sqlite。以下是本人對此數據庫內容格式的分析結果。

3.1 數據表

這裏先講兩個本軟件用到的數據表,分別是Friend表與Chat_XXX表,XXX表示好友微信ID的MD5值。

3.1.1 Friend表

這個表存儲了所有的聯繫人,除了好友以外,還包括非好友、訂閱號、服務號等等。

(1) 字段:type

該字段可以將好友的類型進行分類,由於本軟件只分成了好友、羣、其它等3類,所以下面這個表大家就參考着看吧,在本軟件的代碼中沒有用上。

表 1-1 Friend 數據表 type 字段說明(猜測)

值(二進制) 說明
1 0000 0000 0001 好友&其它
2 0000 0000 0010 聊天羣&已刪除的服務號&其它
3 0000 0000 0011 好友&其它
4 0000 0000 0100 該好友在羣聊天中,但未添加好友
5 0000 0000 0101 好友&其它
6 0000 0000 0110 非好友
7 0000 0000 0111 好友&其它
67 0000 0100 0011 語音提醒
257 0001 0000 0001 被屏蔽朋友圈的好友
71 0000 0100 0111 收藏、加星標的好友
2119 1000 0100 0111 置頂的好友
259 0001 0000 0011 被屏蔽朋友圈的好友
263 0001 0000 0111 被屏蔽朋友圈的好友

可見,第0位表示該聯繫人是否已添加好友;第6位表示該好友是否加星標;第8位表示該好友是否被屏蔽朋友圈;第11位表示該好友是否在手機的好友列表中置頂。等等等等,本人愚昧,只悟出這麼多,剩下的大家感興趣的可以去分析。

(2) 字段:UsrName

UsrName字段中,以“gh_”開頭的都是訂閱號、服務號,以“@chatroom”結尾的都是羣。

 

3.1.2 Chat_XXX表

XXX表示好友微信ID的MD5值,每一個好友的記錄都存放在單獨一個表當中。

(1) 字段:Message

代表該消息記錄的具體內容。

(2) 字段:Type

代表該消息的類型,在第3.2節有具體說明。

(3) 字段:Des

0表示本人發的信息,1表示對方發的信息。

(4) 字段:CreateTime

日期轉換:CreateTime字段存儲的是Unix時間戳,在sql語句中通過以下方式可以轉換:

select datetime(createtime, 'unixepoch', 'localtime') from chat_XXX

3.2 信息類型

3.2.1 文本

聊天記錄的數據庫文件爲:root\DB\MM.sqlite。

Friend表存儲所有好友的信息,字段UsrName是唯一標識好友的ID,但不一定是微信ID,若用戶是用QQ號申請的微信,則UsrName是qq12345678形式,若使用微信ID申請的話,則UsrName就是微信ID,若使用手機號申請的話,則UsrName就是wxid_XXXXX形式。不管怎樣,將此UsrName進行MD5運算,得到的哈希值,前面加上“Chat_”得到的字符串,就是存放與此好友所有聊天記錄的表名,如:Chat_a500325c723649ddb75eda10635edf82。羣組也是一樣。

Friend表的ShortPY字段存儲了有好友的備註信息,但是編碼不一樣。

聊天記錄表中,Message字段就是與該好友的聊天記錄的所有信息,若是文本,則直接存儲,其它格式,請見下面章節。其中CreateTime字段是信息產生的時間;Des字段若爲0則是用戶向好友發送的信息,若爲1則是好友發送過來的信息;其中Type字段若爲1,則該信息是文本信息。

3.2.2 圖片

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲3,則該信息是圖片。MesLocalID字段是數字,假設爲“407”,圖片存儲在root\Img\a500325c723649ddb75eda10635edf82\下的“407.pic”,其中“407.pic_thum”是該圖片的縮略圖。

3.2.3 視頻

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲43,則該信息是視頻。MesLocalID字段是數字,假設爲“8011”,視頻存儲在 root\Video\a500325c723649ddb75eda10635edf82 下的“8011.mp4”,其中“8011.video_thum”是該視頻的縮略圖。

3.2.4 小視頻

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲62,則該信息是小視頻。MesLocalID字段是數字,假設爲“8011”,視頻存儲在 root\Video\a500325c723649ddb75eda10635edf82 下的“8011.mp4”,其中“8011.video_thum”是該小視頻的縮略圖。

3.2.5 語音

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲34,則該信息是語音片段。MesLocalID字段是數字,假設爲“8938”,視頻存儲在 root\Audio\a500325c723649ddb75eda10635edf82 下的“8938.aud”。

AUD文件其實就是缺少頭信息的AMR文件,需要在文件頭加入“#!AMR”才能成爲AMR文件,然後就可以用一些播放軟件打開了(其實能播放AMR的軟件比較少,目前只知道QQ影音可以播放)。

將AUD轉換爲AMR的控制檯命令:copy head.txt/b + 476.aud/b 476.amr,其中head.txt中的內容就是“#!AMR”。

本程序調用 FFmpeg 提供的工具轉換成 WAV 文件再播放,這是一個很強大的軟件,可以對許多音視頻進行播放、轉換格式。

3.2.6 分享鏈接

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲49,則該信息是分享鏈接,在Message字段中<url></url>之間的就是鏈接地址。

3.2.7 位置

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲48,則該信息是非實時位置信息,在Message字段中有具體的位置座標,在該信息的XML結構裏:msg –> location –> x 與 y 字段中存儲着位置座標。

3.2.8 動畫表情

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲47,則該信息是一個動畫表情。在該信息的XML結構裏:msg –> emoji –> md5字段中存儲着表情的md5值,假設該表情的MD5值是:d0546d1d8940bf82def5cc8b19185e1a,則在iPhone微信的文件目錄中:/Library/WechatPrivate/emoticon1,存儲着以該MD5值爲文件名的文件,如:d0546d1d8940bf82def5cc8b19185e1a.pic,其實它是一個GIF文件,這樣就可以連接到該表情了。

3.2.9 名片

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲42,則該信息是一個名片,在該信息的XML結構裏:msg –> username 字段中存儲着微信ID,msg –> nickname 字段中存儲着微信名。

3.2.10 語音電話、視頻電話

在好友的聊天記錄表中,假設爲 Chat_ a500325c723649ddb75eda10635edf82 表,若字段Type爲50,則該信息是一個電話記錄。裏面有時長信息:<duration></duration>

4. 軟件下載與代碼

本軟件目前初步比較穩定,但仍有不少BUG以及許多需要改進的地方,大夥兒拍磚手下留情Embarrassed smile。以下鏈接是程序文件及微信聊天記錄的一個例子,目前版本是1.0.1.2。

軟件下載:

WechatHistory_1.0.1.3.zip (32.5 MB)

微信聊天記錄例子(iOS版微信生成的):

History_Example.zip (14.5 MB)

由於軟件內包含了所有的(2015年3月18日前發佈的)官方動畫表情,大概有90MB大小,動畫表情也許不是聊天記錄中最重要的內容,所以這部分數據沒有包含入上面文件的下載鏈接中,有需要的用戶可以單獨下載這些動畫表情:

WeChatHistory.Sticker_Gallery.ALL.Updated_By_20150318.zip.001 (48.0 MB)
WeChatHistory.Sticker_Gallery.ALL.Updated_By_20150318.zip.002 (42.3 MB)

下載後解壓,並將“emoticon1”文件夾複製到 WechatHistory 的文件夾中,覆蓋原來的即可。

更多的官方表情將在隨着官方發佈陸續推出,詳情請到下文“源代碼下載”的網頁中下載,這裏給出部分官方更新的動畫表情:

WeChatHistory.Sticker_Gallery_Patch.SpongeBob2.zip (1.41 MB)
WeChatHistory.Sticker_Gallery_Patch.LuoXiaoHei.zip (1.02 MB)

本軟件使用 .Net Framework 4.0,所以需要先安裝運行庫後才能使用本軟件:

http://www.microsoft.com/zh-cn/download/details.aspx?id=17718 或直接下載:

http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe (48.1 MB)

如果有人擔心軟件有後門,企圖收集大家的隱私信息的,可以直接下載源代碼,自己檢查及編譯後使用:

源代碼下載:https://github.com/cxun/WeChatHistory

開發工具: Microsoft Visual Studio 2012

編程語言:C#

.Net 版本:.Net Framework 4.0

5. 刪除消息記錄

聊天記錄從iPhone上全部複製到計算機硬盤之後,使用本軟件嘗試可以正常查看之後,就可以從iPhone上刪除數據,騰出空間啦。聊天記錄最佔用空間的有兩:視頻與照片,刪除方式有以下兩種:

5.1 使用微信自帶的清理功能

在微信的“設置”-->“通用”-->“清理微信存儲空間”,可以選擇性地刪除

優點:方便、直觀、高效、可以選擇性刪除(選擇好友、縮略圖)

缺點:刪除後,在iPhone的聊天窗口內點擊已刪除的圖片或視頻時,會提示“無法加載圖片”、“視頻已過期或已被清除”,無法恢復

5.2 手動清理

在Windows中使用iTools等工具,打開微信的目錄,找到微信存放圖片(Img)與視頻(Video)的目錄,如:

/Documents/06af9525a11ebb4f49ec72be6d165d10/Img
/Documents/06af9525a11ebb4f49ec72be6d165d10/Video

將這兩個文件夾內的所有內容全部刪除即可。這裏可以看到很多個以MD5值爲名稱的文件夾,每個代表一個好友、羣,裏面存放與其聊天的圖片或視頻。

優點:刪除後,在iPhone的聊天窗口內點擊已刪除的圖片或視頻時,微信會自動從服務器重新下載,這樣在手機上還可以重新查看

缺點:操作繁瑣、不直觀、不可以選擇性刪除(肉眼無法將好友與MD5值相匹配)

 

以上兩種方法各有利弊,無論選擇哪種方式,在下次導出聊天記錄時,都可以直接複製並覆蓋上一次導出的聊天記錄(若有不放心的、或者硬盤空間實在空餘得接灰的、或者是完整性強迫症患者的,可以選擇不覆蓋,另起文件夾存放)。

6. 結語

最後,祝願這款軟件能給大家帶來方便,同時,希望騰訊公司微信團隊在今後的微信版本中不要加密數據庫,否則此款軟件就完全作廢了,如果真要加密的話,希望騰訊公司能開發一款更好用的微信聊天記錄管理器,支持數據的導出、查看,方便廣大微信用戶的使用。

發佈了7 篇原創文章 · 獲贊 30 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章