再來一發,現在開始!
下載安裝YY,觀察YY目錄,很明顯的發現了sqlite3.dll,這個數據庫很多很多很多軟件都在用,簡單小巧且開源。
刪除sqlite3.dll 進入YY,歷史記錄不能正常顯示,基本確定YY在使用sqlite3.dll
下一步:在磁盤上找YY的數據庫文件
於是,在 C:\Users\用戶名\AppData\Roaming\duowan\yy\imgroup\‘xxx’\yydb 目錄下發現了 xxx.yydb文件,這就是YY的數據庫文件
用UE打開發現這個是個加密的文件,很明顯經過加密的,現在的目標就是從這個加密的數據庫中拿到聊天記錄。
思路:由於YY直接使用了sqlite3.dll,為了簡單方便起見,考慮用YY自己的sqlite3.dll讀取YY的數據庫,以達到獲取YY聊天記錄的目的。
實驗:我自己在網上下載了一個sqlite3源碼編譯,生成sqlite3.dll,替換YY的sqlite3.dll (注:sqlite3源碼里默認是不包含加密模塊的,只有加密接口的宏開關,需要加密,自己打開宏開關去實現接口進行加密)我生成的sqlite3.dll當然不包含加密模塊,經過觀察,YY的聊天記錄是存儲在服務器上的,每次新安裝YY,隨便打開個聯系人,點擊查看聊天記錄,YY會從服務器下載聊天記錄,並存儲在本地數據庫中。懂了么?這意味着什么??
好吧,不賣關子,想想YY的sqlite3.dll,肯定自己實現了加密接口,YY肯定會自己調用這個接口的,那么我自己生成的sqlite3.dll沒有這個接口,替換過后,YY調用加密接口會失敗,兩種可能:1.加密不成功,存儲明文數據庫 2.YY檢測到錯誤,返回並退出! 我的實驗結果是第一個,我得到了未經加密的數據庫文件,哈哈,用可視化工具打開直接可以看到聊天記錄!
下一步:調用YY自己的sqlite3.dll獲取聊天記錄。
我經常用sqlite3,對sqlite3很熟悉,用eXeScope打開YY的sqlite3.dll,一眼就發現了一個接口:sqlite3_key,這個接口默認是沒有的,很明顯,這是YY自己實現的加密接口,我也懶得去分析具體算法了!!於是我在下載的源碼里打開宏開關,在接口實現里面將YY傳過來的每個參數寫到文件里面,就這樣,輕松得到了YY的數據庫密碼,接下來就不用說啦,調用YY的sqlite3.dll,開源的,可以去看每個接口的官方注釋,網上也有相當多sqlite3的用法。so easy 啦!!
好了,方法都說了,如果自己感興趣可以按照這個來自己寫代碼實現!
這個太簡單了,我也懶得插圖和帖代碼了。
就這樣啦!!
https://www.0xaa55.com/forum.php?mod=viewthread&tid=1790&extra=page%3D1