某聊天工具消息记录数据库文件解密逆向分析
0x00 簡介
?
每一個聊天工具賬號登入后會在"\Document\Tencent Files\賬號"的目錄下Msg3.0.db文件里寫入加密后的聊天記錄信息。
查看該工具的Bin目錄下的DLL文件可以知道它用的是sqlite的數據庫,sqlite默認是沒有實現加密的函數只是提供了接口,網絡上有一些開源的加密庫,比如wxsqlite3,sqlcipher等。
0x01 前期準備
?
?
?
先再IDA中分析sqlite.dll,查找含有version字符串的函數然后交叉引用,找到上一個函數就可以發現當前程序使用的sqlite的版本號,可以從網上Down下來源碼方便進一步分析,下載鏈接在文末。
sqlite的加解密簡易流程:
0x02 獲取加密所需的函數
?
?
?
在sqlite.dll里對這些函數下斷點動態調試發現沒有斷下來,結合網絡上前輩的分析,IDA中打開KernelUtil.Dll函數名字都很類似,猜測這個Dll就是tx自己對sqlite的具體實現。
我們可以先在CMultiSQLite3DB::innerOpen等open函數下斷點,并打開火絨劍對文件操作進行監控。具體下斷點的方法就是附加進程然后在模塊里找到KernelUtil.DLL,在IDA找到要下斷點的函數的偏移,[KernelUtil.DLL + 偏移]就是要下斷點的位置。
然后觀察堆棧傳遞的參數結合火絨劍和x96dbg單步步過,就可以找到是哪個函數真正打開db文件。
結合sqlite源碼和IDA分析可以還原參數和函數名。
在innerOpen這個函數中我們可以看到CppSQLite3DB::execDML這個函數,我們可以大膽猜測它是封裝了sqlite3_exec,結合源碼進行重命名。sqlite3_exec的第三參數和第四個參數是回調函數,主要的作用是接收sql語句執行的結果,這個在后續編寫Demo有用到,具體用法在文末的鏈接可以參考。
sqlite3_key的具體實現函數我們可以在IDA中觀察CppSQLite3DB::key這個函數并結合sqlite3的源碼可以推測真實設置key的函數,不妨在此處下斷點,后續抓取key時有大作用。
至此我們獲得了后續抓取解密Key所需要的幾個函數地址,在x96dbg的對應偏移位置下上斷點。
0x03 抓取解密Key
?
?
?
key是云端生成的理論上沒有賬號的密碼是打不開這個聊天記錄文件的,并且在每次打開程序后的密鑰都是不一樣的,所以這里得注意抓到密碼后關閉程序得備份Msg3.0.db這個文件,文件于key是一一對應的。
我們先讓它正常登入然后在火絨劍觀察它是什么時候對Msg3.0.db進行操作的。可以發現是在比較前面就打開了Msg3.0.db所以大膽猜測是在進程在剛啟動的時候執行解密操作。接下來附加進程開始調試。
?
?
在附加進程的時候得注意,選擇上面那個進程,下面那個是登入進程在登入成功后會自動銷毀了。
在CreateFileW下斷點觀察火絨劍和x96dbg堆棧知道發現它打開了Msg3.0.db這個文件。
一直F9直到調用sqlite3_open函數的參數有Msg3.0.db(期間可能有多個地方調用了open,真實的是先調用open后調用key,多次嘗試可以試到真實獲取解密Key的地方),根據上文可知sqlite會先打開對應db文件并在后面在設Key,根據IDA分析結果可以知道原始key是16位的,擴展之后變成16*17位了。
有了擴展key可以直接調用sqlite3_key_impl這個實現函數,也可以使用原始16位key直接調用sqlite3_key.備份好Msg3.0.db和Key開始編寫demo。
0x04 總結
?
總的來說主要是要找到sqlite解密的各個函數的偏移地址和解密key,有個小坑就是key是動態的而且和Msg3.0.db一一對應的,每次抓到key的記得備份Msg3.0.db。
所以我們可以直接調用tx的KernelUtil.Dll,在Load KernelUtil.Dll的時候要注意放在\Bin 目錄下不然會導入失敗,因為KernelUtil.Dll還有導入其他的Dll。
0x05 參考鏈接
?
?
?
sqlite v3.8.8.1下載鏈接:
https://www.sqlite.org/2015/sqlite-amalgamation-3080801.zip
?
sqlcipher v3.3.1下載鏈接:https://codeload.github.com/sqlcipher/sqlcipher/zip/v3.3.1
?
撬開PC QQ的本地SQLite數據庫(適用于Msg3.0.db等):https://www.52pojie.cn/thread-1370802-1-1.html
?
sqlite_exec回調函數的使用:https://blog.csdn.net/zscfa/article/details/77119522
總結
以上是生活随笔為你收集整理的某聊天工具消息记录数据库文件解密逆向分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录某一天安服仔的漏洞挖掘过程
- 下一篇: 渗透测试中dns log的使用