作者:newx
https://bbs。pediy。com/thread-251303。htm
在電子取證過程中,也會遇到提取PC版微信資料的情況,看雪、52破解和CSDN等網上的PC版微信資料庫破解文章實在是太簡略了,大多數只有結果沒有過程。經過反覆試驗終於成功解密了資料庫,現在把詳細過程記錄下來,希望大家不要繼續在已經解決的問題上過度浪費時間,以便更投入地研究尚未解決的問題。
透過查閱資料得知,與安卓手機版微信的7位密碼不同,PC版微信的密碼是32位元組(64位),加密演算法沒有說明,但是可以透過OllyDbg工具從記憶體中獲取到這個密碼,然後透過一段C++程式碼進行解密。
首先下載OllyDbg 2。01漢化版,我用的版本如下圖所示:
切換到Ollydbg介面:
點選檔案選單,選擇“附加”,在彈出的對話方塊中找到名稱為WeChat的程序,其視窗名稱為“登入”。然後點選“附加”。
附加成功後OllyDbg開始載入,成功載入後可以看到最上面OllyDbg後面有WeChat。exe的字樣:
在檢視選單中選擇“可執行模組”:
找到名稱為WeChatWin的模組,雙擊選中。為了方便觀察,在視窗選單中選擇水平平鋪。在CPU視窗標題欄可以看到“模組WeChatWin”字樣。
在外掛中選擇“StrFinder字元查詢”中的“查詢ASCII字串”(注意如果下載的OllyDbg版本不對,可能沒有相關外掛,因此一定要找對版本),要稍微等一會兒,會出現搜尋結果的視窗。
在此視窗點選滑鼠右鍵,選擇“Find”,在搜尋框中輸入“DBFactory::encryptDB”。
會自動定位在第一處,但我們需要的是第二處,即“encryptDB %s DBKey can’t be null”下面這一處。可以用滑鼠點選捲軸向下,找到第二處,用滑鼠雙擊此處。
在CPU視窗中可以看到已經定位到了相應的位置。用滑鼠點選捲軸向下翻。
下面第六行應該是TEST EDX,EDX,就是用來比對密碼的組合語言程式碼。在最前面地址位置(本文中是0F9712BA)雙擊設定斷點(設定斷點成功則地址會被標紅,而且可以在斷點視窗中看到設定成功的斷點)
在EDX的值上面點選滑鼠右鍵,在彈出的選單裡面選擇“資料視窗中跟隨”,則資料視窗中顯示的就是EDX的內容。
圖示中從0B946A80(這個數值是變化的,不但每臺電腦不同,每次除錯也可能完全不同)到0B946A9F共32個位元組就是微信的加密密碼,本圖中就是:
一共32個位元組,共64位。
接下來就是解密過程。在看雪、52破解等多個論壇中都有相關的C++原始碼,開始企圖使用Dev-C++或者C-Free等輕量級IDE進行編譯,也使用過Visual C++ 6。0綠色精簡版,結果多次嘗試出現各種錯誤,反覆失敗,最終不得已使用Visual Studio,並對程式碼進行了一定的修正,終於除錯成功。
正好Visual Studio 2019剛剛釋出直接到官方網站下載了社群版。
根據查到的資料,需要先安裝openssl,為了省事直接下載了最新的Win64OpenSSL-1_1_1b,安裝後發現各種報錯,繼續查詢資料發現原來sqlcipher使用的是低版本的openssl,之後找到了一個Win64OpenSSL-1_0_2r也報錯,最後發現還是官方這個直接解壓縮的版本靠譜:
https://www。openssl。org/source/openssl-1。0。2r。tar。gz
把壓縮包直接解壓到任意目錄,比如c:\openssl-1。0。2r
啟動Visual Studio 2019社群版(估計Visual Studio 2008以後的都應該可以,懶得找就直接官網下載最新的吧)
在啟動介面右下方選擇“建立新專案”
滾動下拉條,在視窗中選擇C++控制檯應用:
給專案隨便起個名字,選擇儲存位置:
然後點選“建立”,即可完成新專案建立。生成預設的Hello World程式碼:
先要做好專案的基礎配置,之前除錯失敗主要問題就出在這裡了。
在專案選單中最下面選擇專案屬性“dewechat屬性”(這個跟設定的專案名稱一致)
對話方塊最左上角的配置後面,可以選擇配置的是Debug模式還是Release模式(Release模式不包含除錯資訊,編譯完成的exe檔案更小一些,但如果是自己用,這兩個模式沒有區別,配置了哪個,後面就要用哪個模式編譯,否則會報錯)
先選擇C/C++下面的“常規”選項:
右邊第一條是“附加包含目錄”,點選右側空白處。在下拉框裡選擇“編輯…”,在對話方塊中點選四個圖示按鈕最左側的“新行”按鈕,會生成一個空白行,點選右側的“…”:
在彈出的對話方塊裡選擇剛剛安裝的openssl目錄(本文是c:\openssl-1。0。2r)中的include目錄。
設定完成後如下:
然後選擇左側“連結器”下面的“常規”:
在中間位置,有一個“附加庫目錄”,點選右側空白處,選擇openssl目錄下的lib目錄,設定完成後如下:
右側最上面有“附加依賴項”,預設已經有一些系統庫,點選右側內容,選擇“編輯…”
這個沒有增加新行的按鈕,只能手工錄入或者複製檔名進去,需要增加上圖所示的兩個庫名稱。
設定完成後如下:
現在所有的設定都OK了,可以把程式碼放進來編譯了。
由於太多網站轉載,而且很多有錯漏,已經搞不清原始程式碼是哪位大神寫的了,其中有一些已經被廢棄的程式碼,根據系統報錯提示進行了替換,另外做了一個主要的變化就是之前的程式碼是把資料庫名寫在變數中,但由於需要解密很多庫,為了靈活,改為輸入引數的方法,即在執行時帶引數執行或者根據提示輸入需要解密的資料庫檔名。
將之前預設的程式碼全部清除,將以上程式碼複製進去,儲存。然後在工具條欄中選擇是Debug還是Release模式,是x86還是x64(需要跟之前配置匹配,如果選了沒配置的模式會報錯。測試發現幾個選項沒有太大區別,建議預設),之後點選“本地windows偵錯程式”(或者按F5鍵),如果前面的步驟操作都正確,應該可以完成編譯並自動執行,彈出一個命令列視窗,提示需要輸入檔名:
最下方顯示了生成的exe檔案路徑,將這個檔案複製到微信資料庫所在的目錄,一般是:
C:\Users\Administrator\Documents\WeChat Files\********\Msg
其中********位置為需要解密的微信id,目錄內容如下:
如果要解密ChatMsg。db,則在命令列視窗輸入指令dewechat ChatMsg。db回車即可。
解密成功後,會在目錄中生成de_ChatMsg。db,用sqlite資料庫管理軟體開啟即可。
本文主要是個驗證過程,沒有做什麼突破工作,目前的解密只能算是半自動過程,密碼演算法部分的獲得是下一步需要研究的內容,希望大家共同努力!