[2016.10.14]
感謝你們對本軟件的喜好!最近發現iOS微信數據庫的存儲方式發生了改變,本來存儲在Friend表中的好友數據,如今已經改在了friend_meta表中,並且字段徹底不同,因此本軟件的當前版本不能查看最新的微信聊天記錄,博主如今手上有一個很緊迫的任務,等完成後會研究並開發新版本,到時會在本文更新並通知,再次感謝你們的支持!html
iPhone中的微信是否是佔用了愈來愈多的空間呢?不想刪圖片?不捨得刪視頻?那就轉移到電腦硬盤上來吧,在Windows中使用本軟件進行查看、搜索,手機上的空間就能夠騰出來了!本文詳細介紹了軟件的使用說明,以及介紹了微信聊天記錄數據存儲格式,並給出了本軟件與源代碼的下載地址,最後是iPhone聊天記錄中圖片與視頻數據的清理方法。git
隨着使用微信的日子變長,手機中微信所佔用的空間也愈來愈大,iPhone的存儲空間也日益緊缺,其中圖片、視頻所佔的空間最大,像我這樣什麼都要追求完整性的人,是堅持不會刪除任何一張照片或視頻的,喜歡用手機拍照片視頻的我,每過一段時間就把照片視頻移到電腦存儲,騰空手機。但是到了每一兩天都要騰空間的時候,我發現這樣不是長久之道,看了看微信已經佔用了2個多G的空間,這樣下去不是辦法,如今騰訊官方沒有iOS版本微信的聊天記錄轉儲硬盤工具(Android的好像有);即使有,在Windows上要求可以像在手機上查閱;微信內置的聊天記錄備份恢復功能是爲轉儲到其它設備設計的,聊天記錄在服務器只能存放7天,並且2G這麼大的數據要上傳到候年馬月?github
所以,乾脆本身寫一個聊天記錄查看器吧,把數據挪到電腦大硬盤,這樣就能夠放心地在手機上刪圖片、視頻啦。如下先給出本人開發的微信聊天記錄查看器的使用說明,以及本人分析猜想的聊天記錄數據存儲格式,但是不全,只能顯示最主要的數據內容,感興趣的朋友能夠一塊分析完善。web
首先說明,該軟件目前僅支持iPhone上的微信聊天記錄。如下分別對軟件的使用方法進行詳細說明。sql
2.1 數據轉儲數據庫
使用 iTools 等第三方工具將微信(WeChat)應用中 Documents 目錄導出到電腦硬盤保存,該目錄中包含全部在此 iPhone 上登陸過的微信賬號的聊天記錄,也能夠只導出某一個賬號的聊天記錄。每個微信賬號的數據都存儲在以該微信ID的MD5值爲名稱的文件夾中,例如,圖2-1中 Documents 目錄下32位數字名稱的文件夾分別是不一樣的微信賬號。編程
圖 2-1 Documents目錄示例瀏覽器
2.2 選擇數據庫服務器
聊天記錄數據庫文件存放在微信賬號文件夾內的 DB 文件中,文件名爲 MM.sqlite。本文最後將提供一個聊天記錄例子,程序運行時會提示選擇數據庫文件,選擇如下文件便可:06af9525a11ebb4f49ec72be6d165d10\DB\MM.sqlite。微信
2.3 主界面
啓動軟件,選擇數據庫加載完成後,程序的主界面如圖2-2所示,左側是該微信賬號的好友列表,按拼音首字母排序,右側是具體的聊天記錄內容。好友列表分爲3個標籤頁,分別是「好友」、「羣」、「其它」,顧名思義,單獨好友在「好友」標籤頁,羣聊天在「羣」標籤頁,剩下的訂閱號、服務號等等在「其它」標籤頁。好友列表上方能夠搜索好友,聊天內容上方能夠搜索文字。點擊好友列表中的好友,右側的聊天內容窗口將加載與該好友聊天的具體內容。
因爲本程序採用的是EO.WebBrowser控件試用版(博主窮~ ),每次程序啓動後,聊天內容窗口下側會出現購買許可的提示,關閉它便可,不會影響後續閱讀。
圖 2-2 微信聊天記錄查看器主界面
2.4 數據類型
2.4.1 文字
就像手機中顯示的那樣,採用氣泡風格顯示,如圖2-3所示。
圖 2-3 數據類型示例:文字
2.4.2 表情
能夠顯示微信自帶的小型emoji表情,如圖2-4所示。能夠顯示的全部emoji表情請參見圖2-5。
圖 2-4 數據類型示例:emoji表情
圖 2-5 全部能顯示的 emoji
除了 emoji 之外,還能夠顯示微信官方的動畫表情,如圖2-6所示。
圖 2-6 數據類型示例:動畫表情
除了這兩種表情之外,微信用戶還常常看到許多非官方表情,若是想在這軟件裏顯示的話,須要進行額外的數據導出工做,也不復雜:照樣使用 iTools 打開微信App的這個目錄:/Library/WechatPrivate/emoticon1,將此文件夾複製到本軟件的安裝目錄,覆蓋原有的 emoticon1 文件夾便可。
2.4.3 圖片
聊天記錄中的圖片如圖2-7所示,點擊圖片將會調用本機默認的 *.jpg 文件關聯程序來查看大圖,默認的程序是 Windows Photo Viewer。
圖 2-7 數據類型示例:圖片
2.4.4 視頻 & 小視頻
聊天記錄中的視頻與小視頻如圖2-8所示,點擊視頻將會調用本機默認的 *.mp4 文件關聯程序來觀看視頻。
圖 2-8 數據類型示例:視頻 & 小視頻
2.4.5 語音
聊天記錄中的語音如圖2-9所示,點擊將會播放語音內容。
圖 2-9 數據類型示例:語音
2.4.6 分享連接
聊天記錄中的分享連接如圖2-10所示,點擊連接將會調用瀏覽器查看原網頁。
圖 2-10 數據類型示例:分享連接
2.4.7 位置信息
聊天記錄中的位置如圖2-11所示,點擊連接將會調用瀏覽器查看具體的地圖信息,如圖2-12所示。
圖 2-11 數據類型示例:位置信息
圖 2-12 瀏覽器查看具體的位置信息
2.4.8 名片
聊天記錄中的名片消息如圖2-13所示。
圖 2-13 數據類型示例:名片
2.4.9 語音、視頻電話
聊天記錄中的語音、視頻電話只能給出當時的通話時長等信息(微信是不可能錄製你的通話內容D),如圖2-14所示。
圖 2-14 數據類型示例:語音、視頻電話
2.5 搜索好友
當好友數據衆多時,從左側的好友列表上方搜索欄內輸入好友的關鍵字,能夠是中文,也能夠是拼音,但目前版本不能是拼音首字母,例如:搜「張三」,能夠輸入「張」、「三」、「zhangsan」或「zhangs」等等,但不能輸入「zs」。當輸入內容時,搜索結果窗口將即時出現,並列入符合關鍵字的好友,如圖2-15所示。點擊搜索結果的好友,將自動加載與他聊天的內容。
圖 2-15 搜索好友示例
2.6 搜索聊天內容
聊天內容的搜索分爲「搜索當前好友」與「搜索全部好友」,在聊天內容窗口上方的下拉框選擇便可。在搜索欄內輸入關鍵字,回車後將進行搜索,搜索結束後將顯示搜索結果列表,點擊某條記錄後,聊天內容窗口將顯示並高亮關鍵字,如圖2-16所示。這裏提示:搜索全部好友耗時將比較長。
圖 2-16 搜索聊天內容示例
2.7 頁面跳轉
聊天內容窗口右上角是導航按鈕,可進行翻頁。若頁數過多時,能夠直接單擊頁數,將彈出跳轉頁面的輸入窗口,輸入想要查看的頁碼後將跳轉至該頁面,如圖2-17所示。
圖 2-17 頁面跳轉示例
聊天記錄的根目錄是以用戶微信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>
本軟件目前初步比較穩定,但仍有很多BUG以及許多須要改進的地方,大夥兒拍磚手下留情。如下連接是程序文件及微信聊天記錄的一個例子,本文定稿時版本是1.0.1.6,最新版本請參照源碼庫首頁。
軟件下載:
WechatHistory.zip (45.1 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 或直接下載:
若是有人擔憂軟件有後門,企圖收集你們的隱私信息的,能夠直接下載源代碼,本身檢查及編譯後使用:
源代碼下載:https://github.com/cxun/WeChatHistory
開發工具: Microsoft Visual Studio 2012
編程語言:C#
.Net 版本:.Net Framework 4.0
聊天記錄從iPhone上所有複製到計算機硬盤以後,使用本軟件嘗試能夠正常查看以後,就能夠從iPhone上刪除數據,騰出空間啦。聊天記錄最佔用空間的有兩:視頻與照片,刪除方式有如下兩種:
5.1 使用微信自帶的清理功能
在微信的「設置」-->「通用」-->「清理微信存儲空間」,能夠選擇性地刪除
優勢:方便、直觀、高效、能夠選擇性刪除(選擇好友、縮略圖)
缺點:刪除後,在iPhone的聊天窗口內點擊已刪除的圖片或視頻時,會提示「沒法加載圖片」、「視頻已過時或已被清除」,沒法恢復
5.2 手動清理
在Windows中使用iTools等工具,打開微信的目錄,找到微信存放圖片(Img)與視頻(Video)的目錄,如:
/Documents/06af9525a11ebb4f49ec72be6d165d10/Img
/Documents/06af9525a11ebb4f49ec72be6d165d10/Video
將這兩個文件夾內的全部內容所有刪除便可。這裏能夠看到不少個以MD5值爲名稱的文件夾,每一個表明一個好友、羣,裏面存放與其聊天的圖片或視頻。
優勢:刪除後,在iPhone的聊天窗口內點擊已刪除的圖片或視頻時,微信會自動從服務器從新下載,這樣在手機上還能夠從新查看
缺點:操做繁瑣、不直觀、不能夠選擇性刪除(肉眼沒法將好友與MD5值相匹配)
以上兩種方法各有利弊,不管選擇哪一種方式,在下次導出聊天記錄時,均可以直接複製並覆蓋上一次導出的聊天記錄(如有不放心的、或者硬盤空間實在空餘得接灰的、或者是完整性強迫症患者的,能夠選擇不覆蓋,另起文件夾存放)。
最後,祝願這款軟件能給你們帶來方便,同時,但願騰訊公司微信團隊在從此的微信版本中不要加密數據庫,不然此款軟件就徹底做廢了,若是真要加密的話,但願騰訊公司能開發一款更好用的微信聊天記錄管理器,支持數據的導出、查看,方便廣大微信用戶的使用。