如何破解 Android WeChat 資料庫

專案探討

2020-11-29 by 高田鑑識

前言

微信 (WeChat)  App 在 Android 平台上採取不同於 iOS 資料保護方式,為提供更安全的資料防護,Android 平台上會採加密方式儲存 EnMicroMsg.db 資料庫 (該資料庫內有所有的對話內容);而在 iOS 平台上則套用 Apple 既有的 File Based Encryption 加密機制保護,並不會針對資料庫做額外的加密處理。因此,在數位鑑識過程,若從 Android 提取出的微信資料庫無法正常解析,則重要資訊可能無法判讀。藉由本文章希望可以協助鑑識人員透過簡易流程,將資料庫解密成功並找出重要關鍵資訊。

微信資料庫加密方式

加密演算法使用的兩個值

  1. IMEI
  2. UIN

取得解開資料庫的密碼大致上為透過 MD5 計算出 (IMEI + UIN) 的雜湊值,該雜湊值前 7 位數值則為解開微信資料庫的密碼。

1. IMEI

如何取得 IMEI 值?

    1. *#06#:可透過撥號介面輸入短碼取得
    2. 可從「設定」、「關於裝置」內顯示
    3. 透過記錄在 DENGTA_META.XML 內取得
    4. 微信採用預設的 IMEI 碼:1234567890ABCDEF

需注意的是,藉由上述項次一與二取得的 IMEI 碼,不一定為微信採用的 IMEI。若手機有多個門號功能,可能會採用第二個甚至第三個 IMEI 值。另外還有一個情況,因微信有可能無法讀取到裝置的 IMEI 值,這時會採用預設的 IMEI 碼來計算雜湊值。

2. UIN 值 (User Information 值)

UIN 值存放於 /data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml(或auth_hold_prefs.xml)中。

註:若 UIN 有負號,與 IMEI 合併時需保留負號。

圖一、system_config_prefs.xml

計算 MD5 + UIN 雜湊值

藉由以上方式,可得知 IMEI 與 UIN 值,現在需合併這兩個值來計算 MD5 雜湊值。

註:由於測試裝置 WeChat 無法取得 IMEI 碼,測試結果微信採用預設 IMEI 值來進行加密。

複製

值一、IMEI+UIN 值

注意事項

1. MD5(IMEI+uin)的輸入字符串有大小寫要求嗎?

如果 IMEI 值有英文的話,需要將其轉變為大寫,否則計算的 MD5 值會不同。

2. MD5(IMEI+uin)的輸出結果作為密碼有大小寫限制嗎?

是的,計算出的結果須為小寫,並僅取前 7 碼。

方法一、使用 DOS certutil 指令

先將 IMEI 與 UNI 值使用記事本存放於內。

圖二、imeiuin.txt

再藉由 DOS 的 certutil 指令計算出 txt 檔案內的內容

複製

指令一、certutil

方法二、使用線上 MD5 Hash Generator 網站

先複製 IMEI 與 UNI 值,並直接在 MD5 Hash Generator 上貼上即可產生雜奏值。

圖三、MD5 Hash Generator 網站

透過 SQLite Cipher 解密並開啟資料庫

由於解開資料庫的方式甚多,以下介紹透過 GitHub 客製化的 SQLite Cipher 程式開啟加密資料庫。只要點選 EnMicroMsg.db 檔案並輸入密碼,即可解開。

圖四、SQLite Cipher 開啟 EnMicroMsg.db

圖五、EnMicroMsg.db 資料

有關進階的 SQLite 語法使用指令,可參考 「iPhone LINE SQLite資料庫分析與語法操作」。