柚子快報邀請碼778899分享:SQLite加密解密
柚子快報邀請碼778899分享:SQLite加密解密
Android 微信備份
微信聊天記錄導(dǎo)出(2020新版) Android數(shù)據(jù)庫加解密逆向分析(三)——微信數(shù)據(jù)庫密碼破解 微備份 論壇討論
解密sqlite db數(shù)據(jù)庫文件
轉(zhuǎn)自windwos 安裝 pysqlcipher3
下載 pysqlcipher
去https://pypi.org/search/?q=pysqlcipher&o=下載pysqlcipher3 1.2.0文件
安裝python
推薦安裝 python3.7 日常使用夠了,不要追求新出來的版本,不太完善。
安裝visual studio
Visual Studio下載地址(本文安裝的是2022版本) 安裝只選擇 使用C++的桌面開發(fā) 的組件就好了(安裝大約 下載3G,安裝占用10G)
安裝openssl
注意需要將OpenSSL的dll安裝到系統(tǒng)目錄,如果只是安裝在OpenSSL的bin目錄的話,使用的時候需要將bin目錄加入系統(tǒng)PATH,或者自行拷貝相關(guān)dll到調(diào)用程序目錄。
這個版本是 1.1.1t,與之前的版本不太一樣,部分文件名稱改了(之后有填坑)
安裝Tcl Windows(64-bit, x64)
編譯時要用到這個東西。 下載地址:Download & Install Tcl | ActiveState
開始編譯
解壓pysqlcipher3-1.2.0.tar.gz文件,進入C:\pysqlcipher3-1.2.0目錄
cd C:\pysqlcipher3-1.2.0
python setup.py build_amalgamation
編譯會有很多坑,填坑內(nèi)容在后邊。
完成編譯
正在創(chuàng)建庫 build\temp.win-amd64-3.7\Release\src\python3\_sqlite3.cp37-win_amd64.lib 和對象 build\temp.win-amd64-3.7\Release\src\python3\_sqlite3.cp37-win_amd64.exp
正在生成代碼
已完成代碼的生成
安裝模塊
python setup.py install
pip list
##############################
# Package Version
# ------------ -------
# pip 23.1.2
# pysqlcipher3 1.2.0
# pysqleet 0.0.0
# setuptools 47.1.0
##############################
解密EnMicroMsg.db聊天數(shù)據(jù)
下載腳本,https://github.com/chg-hou/EnMicroMsg.db-Password-Cracker/,
編譯填坑
報錯 - Fatal error: OpenSSL could not be detected!
C:\Users\Administrator\Desktop\新建文件夾\pysqlcipher3-1.2.0>python setup.py build_amalgamation
running build_amalgamation
Builds a C extension using a sqlcipher amalgamation
Fatal error: OpenSSL could not be detected!
添加環(huán)境遍歷OPENSSL_CONF,值是 “安裝位置\OpenSSL-Win64\bin\openssl.cfg” 分析 setup.py 源碼代碼發(fā)現(xiàn) : 需要有一個OPENSSL_CONF的環(huán)境變量,存放openssl的配置
# Try to locate openssl
openssl_conf = os.environ.get('OPENSSL_CONF')
if not openssl_conf:
error_message = 'Fatal error: OpenSSL could not be detected!'
raise RuntimeError(error_message)
os.environ.get() 是 python 中 os 模塊獲取環(huán)境變量的一個方法,如果有這個鍵,返回對應(yīng)的值,如果沒有,則返回 none
報錯 - amalgamation中沒有sqlite3.h, sqlite3.c
running build_amalgamation
Builds a C extension using a sqlcipher amalgamation
SQL Cipher amalgamation not found. Please download or build the
amalgamation and make sure the following files are present in the
amalgamation folder: sqlite3.h, sqlite3.c
方法一:(新手慎用,有大坑,安裝成功后文件可能加密不生效) 下載pysqlcipher-amalgamation, 選Source Code,里面有sqlite3.h, sqlite3.c文件 SQLite Download Page 方法二: 下載 sqlcipher,編譯文件
git clone https://github.com/sqlcipher/sqlcipher.git``
nmake /f Makefile.msc`
nmake需要在 x64 Native Tools Command Prompt for VS 2022的終端下使用(開始菜單搜索)
編譯會報錯,只要生成sqlite3.h, sqlite3.c文件即可 想完整編譯需要修改Makefile.msc再構(gòu)建,https://youtu.be/SFHGeetZ0po 完整編譯視頻
報錯 - 沒有sqlcipher/sqlite3.h
C:\Users\Administrator\Desktop\新建文件夾\pysqlcipher3-1.2.0\src\python3\connection.h(33): fatal error C1083: 無法打開包括文件: “sqlcipher/sqlite3.h”: No such file or directory
在amalgamation文件夾中創(chuàng)建sqlcipher文件夾,將sqlite3.h復(fù)制一份到sqlcipher文件夾
報錯 - LNK1181: 無法打開輸入文件“l(fā)ibeay32.lib”
LINK : fatal error LNK1181: 無法打開輸入文件“l(fā)ibeay32.lib”
error: command 'D:\\software\\Microsoft Visual Studio\\Community2022\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX86\\x64\\link.exe' failed with exit status 1181
從 1.1.0 版本開始,OpenSSL 將它們的庫名稱從: libeay32.dll -> libcrypto.dll ssleay32.dll -> libssl.dll版本問題,改名了
方法1:
# 完整處理方法
- 復(fù)制 libcrypto.def 為 libeay32.def
- 復(fù)制 libcrypto.lib 為 libeay32.lib
- 復(fù)制 libssl.def 為 ssleay32.def
- 復(fù)制 libssl.lib 為 ssleay32.lib
# 偷懶復(fù)制一個就夠了,這里就用了libeay32.lib
- 復(fù)制 libcrypto.lib 為 libeay32.lib
方法2: 文件名稱在 setup.py 代碼寫的,改成 libcrypto.lib 也可以實現(xiàn)(注意是lib文件)
# Configure the linker
ext.extra_link_args.append("libeay32.lib")
ext.extra_link_args.append('/LIBPATH:' + openssl_lib_path)
報錯 - failed with exit code 2
系統(tǒng)環(huán)境可以正常使用,虛擬環(huán)境使用常報的錯誤
src\python3\cache.c(261): error C2017: 非法的轉(zhuǎn)義序列
src\python3\cache.c(261): error C2061: 語法錯誤: 標識符“Node”
src\python3\cache.c(261): error C2001: 常量中有換行符
src\python3\cache.c(303): error C2017: 非法的轉(zhuǎn)義序列
src\python3\cache.c(303): error C2224: “.Cache”的左側(cè)必須具有結(jié)構(gòu)/聯(lián)合類型
src\python3\cache.c(303): error C2001: 常量中有換行符
src\python3\cache.c(303): error C2059: 語法錯誤:“字符串”
error: command 'D:\\software\\Microsoft Visual Studio\\Community2022\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2
報錯文件指向src\python3\cache.c打開看看
# 分析報錯文件,MODULE_NAME有問題
261 MODULE_NAME "Node", /* tp_name */
303 MODULE_NAME ".Cache", /* tp_name */
宏MODULE_NAME在編譯前沒有進行正確的分析,就是這個不能用 分析py文件看看 MODULE_NAME 是個啥
define_macros = [('MODULE_NAME', quote_argument(PACKAGE_NAME + '.dbapi2'))]
print(define_macros) # 搞一個輸出看看是啥 我的是 pysqlcipher3.dbapi2
分析py文件發(fā)現(xiàn),MODULE_NAME 的值應(yīng)該是 pysqlcipher3.dbapi2 將src\python3\cache.c文件中的MODULE_NAME替換成pysqlcipher3.dbapi2試試 新的報錯
src\python3\connection.c(1546): warning C4090: “=”: 不同的“const”限定符
src\python3\connection.c(1697): error C2017: 非法的轉(zhuǎn)義序列
查看報錯文件(1546 是個告警),發(fā)現(xiàn)還是MODULE_NAME
1697 MODULE_NAME ".Connection", /* tp_name */
改了MODULE_NAME在嘗試,最后發(fā)現(xiàn)src\python3*.c 幾乎都用了MODULE_NAME,都改成pysqlcipher3.dbapi2就可以了
柚子快報邀請碼778899分享:SQLite加密解密
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。