出發點是想找回微信被撤回的信息。html
根據《PC版QQ微信防撤回補丁》文章,攔截PC端的撤回函數,新的撤回消息將不會被撤回。可是打補丁前撤回的消息,依然沒法查看。sql
以前發現,手機端的微信,圖片、視頻信息撤回後,能夠在本地找到相應的記錄。由此猜想,文本信息是否本地依然有記錄。查詢資料得知,文本的聊天記錄,存放在Sqlite數據庫中。原本想破解PC端的數據庫,可是收集到的資料都是手機端的。數據庫
根據《手把手教你破解微信本地數據庫(利用Sqlcipher查看)》和《Android動態破解微信本地數據庫(EnMicroMsg.db)》,得知微信聊天記錄的數據庫存放在/data/data/com.tencent.mm/MicroMsg/<user-md5>路徑下的EnMicroMsg.db數據庫中。安全
進一步研究發現,以上兩個教程的源頭都來着《Android逆向之旅---靜態方式破解微信獲取聊天記錄和通信錄信息》(目前有新更新《微信數據庫最新的解密方式,使用C++代碼解密微信加密數據庫信息!》)。微信
實踐過程當中以下:函數
一、獲取EnMicroMsg.db文件工具
訪問該文件須要root權限,一開始打算在已經Root的虛擬機中獲取,嘗試多款虛擬機後,發現新版本的微信沒法正常安裝。最後Genymotion + Android 4.2.2 + Genymotion-ARM-Translation_v1.1 + Wechat 5.3組合,在虛擬機中正常啓動微信。post
可是微信版本太低,沒法登錄。最後選擇在MI 5上獲取該文件。MI 5雖然是開發版系統,可是還沒Root,在http://www.miui.com/unlock/index.html下載解鎖工具後,能夠在 安全中心的權限管理中獲取Root權限。ui
解鎖過程當中發現,Fastboot模式下沒法鏈接電腦,猜想是驅動問題,在http://www.miui.com/shuaji-393.html下載小米線刷工具,安裝驅動後解決沒法鏈接問題。加密
Root後,安裝微信登錄,生成數據庫,經過adb命令(cp res des)拷貝目標文件到/sdcard/Download路徑下。經過USB文件傳輸模式拷貝到電腦。
二、獲取IMEI與uin(uin是個整型,微信分配個用戶的惟一ID)
IMEI獲取比較簡單,撥號界面輸入*#06#獲取,MI 5支持雙卡,有兩個IMEI號,都記錄下來。
862033030*****2 862033030*****6 |
uin存儲在/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml文件中,用一樣的方法拷貝到電腦,查看uin值:
三、計算密碼
密碼爲MD5(IMEI+uin)的前7位,計算過程當中,全部字母均爲小寫。
在https://md5jiami.51240.com/計算,或者直接將拼接後的字符串存放在txt中,經過Md5checker工具計算。
四、經過SQLite管理軟件查看數據
根據文章的截圖,選用SQLiteDatabaseBrowser,可是兩組密碼均無效。
根據《手工解密微信聊天數據庫的四個大坑》,發現是工具的問題,最新版的SQLiteDatabaseBrowser沒法兼容微信的數據庫(應該是微信爲了兼容性,一直沒升級)。應該選用V2.1版的工具,百度sqlcipher 2.1,能夠下載到合適的版本。
成功解密數據庫:
發現,撤回的文本消息直接被覆蓋了,並無保留在本地。
後續:
以上破解的手機端的數據庫。後續發現PC端的微信,也是使用Sqlite數據庫,但使用一樣的密碼,沒法打開。查詢後發現,PC端的密碼和手機端不同,爲32位密碼。目前網上沒有詳細的獲取資料。
進一步發現,《安卓微信數據庫解密》中,對微信數據庫有了進一步的研究。
收穫: