如何暴力破解 Android WeChat 資料庫

專案探討

2021-6-14 by 高田鑑識

前言

上一篇「如何破解 Android WeChat 資料庫」介紹了如何透過 IMEI 與 UIN 推斷出正確的 WeChat 資料庫 7 位數密碼。但隨著新的 Android 系統陸續導入 File Based Encryption 加密機制後,即使可透過 APK Downgrade 取得微信資料庫檔案,但若無法取得 UIN 值,則無法手動計算出正確的密碼。

本文章將介紹如何使用 GitHub 上由 ChG-Hou 所發表的 EnMicroMsg.db-Password-Cracker 程式,來進行微信資料庫的暴力破解。另外為了降低安裝門檻,本次將使用 Docker 來快速啟用一個虛擬化作業系統,內已包含相關的破解執行檔案,讓各位鑑識人員可更簡易的進行破解作業。

Docker 介紹

要在 Windows 上執行不同的作業系統,可藉由虛擬化軟體來達成。早期除了 Windows 內建的 Virtual PC 外,較為人知的則為 VMware Workstation Player,以上軟體皆可讓 Windows 系統上執行其他的作業系統,如 ubuntu 或 CentOS 等等。

Docker 為近年來另一種新的虛擬化方式,跟傳統的虛擬化方式相比具有輕量化,簡易佈署等功能。尤其 Docker 容器的啟動可以在秒級完成,這相比傳統的虛擬機方式要快得多。 其次,Docker 對系統資源的使用率很高,一台主機上可以同時執行數千個 Docker 容器。有關進一步的 Docker 介紹可參考 《Docker —— 從入門到實踐­》正體中文版。而本文章僅就如何從 Docker Hub 上下載為各位鑑識人員已封裝好的 Ubuntu Docker 映像檔,說明如何啟用並進行暴力破解。

crack-wechat.py 主程式介紹

crack-wechat.py 為暴力破解主程式,需藉由 Python2 來執行,內包含可客製化參數,可先使用以下指令開啟檔案觀看內容。(原檔案名稱: crack_enmicromsg_db_(C_version).py) 。

複製

指令一、開啟 crack-wechat.py

crack-wechat.py 參數說明

  • db_file_name = ‘EnMicfoMsg.db’:要進行破解的資料庫檔案名稱。

  • pass_file_name = ‘pass.txt’:運算出的 7 位數密碼儲存於 pass.txt 內。

  • process_no = 4:啟用的執行序數量,可依主機硬體規格配置。

  • pass_start = 0x0000000:7 位數密碼起始值。

  • pass_end = 0x7ffffff:7 位數密碼結束值。

暴力破解流程

1. 安裝 Docker Desktop

首先請先至 Docker 網站,下載並安裝好 Docker Desktop。另請確認是否有依上述說明安裝 WSL。

2. 從 Docker Hub 倉庫取得暴力破解映像檔 (Image)

安裝完成後請開啟 DOS 或 PowerShell,並執行以下指令。

複製

指令二、從 Docker Hub 下載映像檔

3. 將映像檔新建一個容器並啟動

取得映像檔後,在 DOS 或 PowerShell 下,輸入以下指令啟動容器。

複製

指令三、啟動映像檔

以下為 docker run 指令的參數說明。

參數 說明
-d 可在背景執行
-p 1212 對應主機的 port 1212 到 ubuntu 容器的 port 22 (ssh 服務的預設 port 為22)
-name wechat 指定容器名稱為 wechat
wechat-crack 使用映像檔 wechat-crack 建立容器
/usr/sbin/sshd -D 啟用容器使用的程式與參數

4. SSH 進入 ubuntu 虛擬系統

由於虛擬機是執行在本機上,本機的 port 1212 對應的是虛擬機的 port 22。請輸入以下指令即可採 SSH 連線到 ubuntu 虛擬機。登入密碼請與高田同仁聯繫。

複製

指令四、SSH 進 ubuntu 系統

5. 執行破解 Python 程式

進到虛擬機後,破解軟體存放於 ~/wechat 資料夾下,裡面已有一個測試用微信資料庫。以下示範暴力破解測試用的資料庫,若爾後要上傳資料庫檔案,可透過 WinSCP 上傳到該資料夾下,上傳前請記得更換原測試檔案名稱。

影片一、操作示範

再次執行暴力破解運算前

  • 更改 pass_start 值:若第一次暴力解運算出的密碼為 00001ef,請使用 vi 指令修改 crack-wechat.py 內的 pass_start 值,原 00001ef + 1 後為 「00001f0」,並再次執行暴力破解運算。

複製

指令五、修改 pass_start 值

  • 刪除 pass.txt 前的動作:再次執行破解運算前,須先移除 pass.txt 檔案。即使該密碼無法打開資料庫,建議還是使用以下指令將 pass.txt 檔案內的密碼備份進另一個檔案,如 passall。

複製

指令六、備份並刪除 pass.txt 檔案

  • 完成上述動作後:請再次執行破解運算。

複製

指令七、再次執行暴力破解