2024年LINE好友、聊天紀錄之資料庫救援筆記

LINE 資料庫SQLITE的毀損救援,以iOS為例,同理也適用於Whatsapp、Wechat等

Yeeefang
12 min readSep 9, 2021

0. 前言

2022/05/20 增補的內容及注意事項在第5點。

2024/04/10 意外發現這篇文章竟然在Google搜尋排名蠻前面的,回頭看了一下內容,暫時沒看到有甚麼想補充跟修改,想到再說。

LINE是目前使用率非常高的通訊軟體,在2021年的台灣,各行各業的人(除了某些資訊科技業的從業人員外),幾乎都使用LINE在做公務與私人的通訊使用。除了民間企業之外,甚至公部門幾乎都採納LINE群組作為維繫用途。

我是個會把對話紀錄仔細地留存與備份好的人,無奈,在累積了6年的對話紀錄(約莫是173萬筆訊息),資料庫還是發生了毀損。

發生毀損的症狀是(包含但不限於):

1. 收不到別人傳的訊息(可能會也可能不會跳通知),這可能發生在全部或特定的好友對話聊天室內;

2. 發出去的訊息在自己手機上不會更新(但可能訊息實際有發送給對方);

3. 特定或全部的聊天室、群組,在某一日期之前的對話沒辦法讀取;

4. 對話裡面的照片、影片及檔案附件,雖有暫存檔但在發送的14天後就無法讀取;

5. 一打開LINE就告訴你聊天紀錄毀損,需要一切重新來過;

6.在聊天室清單裡面的對話列表(或順序)不會更新,可能是訊息內容、或日期不會更新;

7. 一打開LINE就閃退、毫無提示。

8. 特定或全部聊天室,所有訊息的已讀都消失。

9. 其他資料庫異常的狀況,族繁不及備載.....

我一直覺得,既然是肇因於資料庫異常的錯誤,那應該技術上有能力修復好它才對,我花了一些的時間才解決這個問題,因此想要當作技術手札寫下來,幫助其他遇到一樣問題的人。

再說一次,有以下情況的人,請放棄這篇,直接重置對話紀錄就得了......

1. 沒有相關資訊技術及背景知識的人,以及排除障礙的debug能力;

2. 對話訊息不重要的人;

3. 沒時間的人;

4. 不細心的人(可能連原有的資料都被一起毀掉了)。

但是凡事都有一個例外,

就是如果你是有錢的人,那請透過下列管道尋求協助吧~會由專業工程師來協助救援,但資料救援過程耗時甚長。

如果你的資料有比萬把塊錢來的重要,那交給專業的處理也比較省心。

LINE SQLITE資料庫救援服務

PATEON NETWORKING

+886-2-2500-0672 #200

臺北市中山區建國北路三段92號3樓(防疫期間請先預約)

jerry@pateon.com.tw

1. 技術解析

LINE的資料庫採用SQLITE,是一種在移動設備上非常常見、主流的嵌入式資料庫格式,其他通訊軟體包含Whatsapp、Wechat也都採用相同的格式。

在Journal Mode上,採用的是Write-Ahead Logging(WAL)模式,所以一個資料庫檔案(Line.sqlite)同時可能伴隨著兩個輔助檔案(Line.sqlite-wal、Line.sqlite-shm),其運作原理與模式,在高田鑑識的網站都有很詳細的解說,有興趣可以參考:

https://www.kaotenforensic.com/cases/iphone-line-sqlite-analysis/

https://www.kaotenforensic.com/cellebrite/blog/ios-sqlite-wal/

我們的救援流程,就是透過iOS的備份與還原,將檔案拉進電腦,找出Line.sqlite這個受損的資料庫檔案,重建修復後,再將資料還原進手機端,使其正常執行。

這個流程,並不需要越獄,但是有越獄的話,整個流程會更快。倘若你都會越獄了,讀完整篇文章,應該就知道該從何處開始簡化流程了,就不贅述。

2. Prerequisite

  • 寫本篇文章時,操作的是iPhone 12 Pro搭載iOS 14.7.1,沒有越獄;
  • LINE的APP版本是11.15.0;
  • 請先透過iTunes 或 iMazing進行【完整的備份】。這裡說的不是iCloud雲端備份。
  • 為了避免手機在備份時有新訊息,請關閉LINE應用程式、或開啟飛航模式,直至救援資料庫還原回手機。
  • Windows電腦,並有足夠磁碟空間,SSD會快一點點。
  • 【原廠】Lightning傳輸線。
  • 視乎情況而定,運氣不好時你可能會需要一台搭載OSX的電腦(至少我就遇到了)。
  • iOS備份與文件提取軟體:iMazing。寫本篇文章時iMazing是2.14.2版本,可能需要軟體授權,不推薦使用破解版與盜版。
  • 文字編輯器,推薦Notepad++(免費),另外,如果你的檔案非常之大,會需要超大文件編輯器,這邊推薦使用EmEditor(30天試用)。
  • sqlite3 tools(3.36.0),資料庫指令修復工具,自己去下載
  • Sqlite瀏覽器,這邊推薦DB Browser for SQLITE(3.12.2)。
  • 壓縮與解壓縮工具,推薦使用64bit的7-zip(19.0.0)。

3. 操作流程

(1) 連接iPhone,從iMazing導出應用程序數據

iMazing裡面選擇Manage Apps(管理應用程式)
找到LINE之後,點選功能表並選擇Backup App Data

可以在iMazing裡面也執行一次完整備份,因為從應用程式提取資料時,也會先做一次備份;

如果有備份的話,可以直接從備份中提取。

選擇備份目的地,如果有備份就從備份提取,沒備份就從執行備份再提取
視乎檔案大小,備份+提取資料大概會執行1~3小時不等。

如果在這個步驟一直中斷與失敗,請確保原廠連接線直接與電腦的USB Port連接,如果發生軟體問題,請透過OSX的iMazing進行備份與提取。

(2)處理提取出來的.imazingapp檔

提取出來的檔案會以.imazingapp為檔名結尾:

這是透過imazing提取出來的應用程式資料

.imazingapp檔是iMazing提取出來的應用程式資料檔,實際上,它是一個未經壓縮(僅封存)的壓縮檔。可以直接將其更名為.zip檔並解壓縮。特別要注意的是,Windows 10內建的解壓縮可能不支援過大的壓縮檔,透過7-zip打開是個好主意(也不需要更名)。

透過7-zip打開的Line.imazingapp

這個檔案根目錄裡面會有4個檔案分別是:Container、Payload、.lock、iTunesMetadata.plist,將其解壓縮到一個資料夾中,壓縮回去的時候必須注意這四個檔案/資料夾都要在。

在解開壓縮的資料夾裡找到下列路徑:

\Container\AppGroups\group.com.linecorp.line\Library\Application Support\PrivateStore\P_(LINE使用者UID)\Messages

這個是PrivateStore資料夾

其中PrivateStore資料夾下會有Persistent Property資料夾與P_XXXXXXXXXXXXXXXXXXXXXXXXXX的資料夾,XXX是使用者的UID,每個人都不一樣。

假如在PrivateStore下找到兩個以上P_開頭的資料夾,代表此手機曾登入過兩個不同的帳號,至於要怎麼分辨哪個是哪個.....離題了有點懶得說。

這裡是Message資料夾
每個SQLITE的功能簡述

裡面的每個.sqlite用途,大致上整理在這邊,如果有疏漏還請先進指教了。

可以發現到Line.sqlite幾乎佔了全部裡面95%以上業務,因為存取頻率高、檔案大,自然成為最容易故障的頭號戰犯。

要確認是哪一個sqlite故障導致不正常運作,可以透過PRAGMA integrity_check;去初步判斷。

❓ 如果無法確定,你可以每個.sqlite都修一遍,或是交給專業的。

⚠️特別注意,如果發現該sqlite檔伴隨著-wal與-shm檔,如下圖這樣,有不一樣的操作方式,直接照下面的方式處理不會成功。

伴隨著-wal與-shm檔的Line.sqlite

(3) 修復損壞sqlite檔

損壞的Line.sqlite(如有-shm與-wal,一併)複製到新資料夾,並把sqlite tools裡面的sqlite3.exe一併放入。

透過命令提示字元執行以下指令:

sqlite3.exe Line.sqlite

> .output dump.sql

> .dump

> .quit

此時會產生一個比Line.sqlite檔還大的dump.sql。

透過EmEditor打開dump.sql,在最後一行應該會看到

ROLLBACK; — due to error

此時將ROLLBACK改成COMMIT,存檔。

回到命令提示字元執行以下指令:

sqlite3.exe Line_new.sqlite

> PRAGMA page_size=4096;

> PRAGMA auto_vacuum=incremental;

> PRAGMA journal_mode=wal;

> .read dump.sql

> .quit

此時要確認Line_new.sqlite檔案大小,應該不可以為0,會比原先的Line.sqlite要大或小一點。

(4) 封裝新的.imazingapp

將新的Line_new.sqlite修改【檔案修改時間】成原本的Line.sqlite的修改時間,並更名為Line.sqlite,在原先的檔案位置取代舊的Line.sqlite。

透過7-zip封裝(不壓縮;壓縮率為100%)原先的檔案,並將其封裝後的.zip更改副檔名為.imazingapp。

(5) 還原.imazingapp

在iMazing裡面移除原先的LINE(應用程式及其文件),並重新安裝。

還原應用程式檔案為修改後的.imazingapp,過程應該耗時在30分鐘以內。

如果還原不了,請排除問題看看,包含重新安裝驅動程式、關閉iTunes或是改透過OSX版本的iMazing還原;如果提示.imazingapp格式有誤,就是封裝過程出了問題。

4. 後記

後面懶得截圖了,加上凌晨五點了想睡覺了。

但反正大概重點就這樣。

如果有任何技術上的問題,可以透過email與我聯絡,但我不一定會回就是了,畢竟工作忙QAQ

Jerry Wang

b05501062@ntu.edu.tw

5. 增補內容

(2022/05/10)

我本來只是寫給自己當自己的備忘錄,沒想到真的好像有人在看,也有鄉民refer到PTT,蠻好笑的,看看行文果然我還是一如既往地懶,懶得說的部份還真的......不少,但我也沒有要補上的意思就是了。

陸續以來都有不少人會寄email給我,我真的沒有一個一個回,原因大概是:

1. 寄來的Email有頭沒尾,沒主旨、沒寄件者署名;

2. 內容沒有詳述、或根本不知道在寫什麼;(我不曉得寫信的人自己知不知道自己在寫什麼?)

3. 好像我欠錢似的,但如果你是陽信銀行,這一條就不適用;

我真的沒有心力教誰怎麼寫信或一個很casual的信件禮儀需要具備哪些要式,或是單憑一句話猜測發生了甚麼狀況,我不會通靈,需要占卜問事請找廟公。

另外重點是,以下的內容可能不適用資料救援(也是我遇到一些網友來信的狀況):

  1. 聊天紀錄是被手動刪除,而且沒有妥當的備份,例如:分手之後又復合的情侶們、有違反《毒品危害防制條例》的訴訟繫屬於法院的朋友(我的青春我做主,遠離毒品。另外就是賣毒的罪很重,被抓到檢察官高機率會跟你說,如果供出上游可以減刑,所以刪掉對話之前要想清楚阿!說錯,應該是賣之前啦~)、不知道為什麼刪掉聊天紀錄的手殘朋友。這種狀況需要的是數位鑑識,就是要從unallocated space去撈資料啦~
  2. 對話紀錄因為儲存空間不足,而沒有被手機收到,又超過14天的期間。釋出手機空間後,14天內Line的伺服器可以回傳對話紀錄回來,如果沒有自動進行,可以用手機透過下面這個網址手動同步,同步回14天(精確到秒)內聊天紀錄。這個網址只有手機有效,用電腦打開只會看到Line的首頁而已。

LINE手動同步14天對話紀錄

https://line.me/R/manualrepair/?category=chats&closeModals=false

打開網址後會看到的畫面

點開之後可以勾選聊天室,要注意一次同步只能勾選3個聊天室,同步後會把伺服器遠端存在、但手機端不存在的訊息內容、圖片再載回來。

同步訊息勾選聊天室的畫面

多重複個幾次,應該都能同步完。

初次撰寫、修改於2021年9月10日,最後撰寫、修改於2022年5月20日

--

--