成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關(guān)于微信數(shù)據(jù)庫(kù)的解密以及取證

數(shù)據(jù)庫(kù)
之前研究過一段時(shí)間的wx聊天記錄解密,以及小程序解密,但是在晚上陸續(xù)搜了幾篇文章后發(fā)現(xiàn)解密教程要么下載Visual Studio,不然就是對(duì)web安全人員不友好的od調(diào)試,而且根據(jù)系統(tǒng)的不同,解密方法也不同,于是作者用為數(shù)不多的編程知識(shí)寫出了這篇教程- -在這里記錄一下解密的原理以及一些方法分享給大家。

前言

之前研究過一段時(shí)間的wx聊天記錄解密,以及小程序解密,但是在晚上陸續(xù)搜了幾篇文章后發(fā)現(xiàn)解密教程要么下載Visual Studio,不然就是對(duì)web安全人員不友好的od調(diào)試,而且根據(jù)系統(tǒng)的不同,解密方法也不同,于是作者用為數(shù)不多的編程知識(shí)寫出了這篇教程- -在這里記錄一下解密的原理以及一些方法分享給大家。

1.原理

SQLite 是一個(gè)輕量級(jí)的、開源的關(guān)系型數(shù)據(jù)庫(kù),是目前移動(dòng)平臺(tái)(如 iOS、Android)數(shù)據(jù)庫(kù)的最佳選擇。然而免費(fèi)版的 SQLite 是不支持加密的(官網(wǎng)下的默認(rèn)就是免費(fèi)版的) ,這就導(dǎo)致了存儲(chǔ)在 SQLite 中的數(shù)據(jù)很容易被人查看到,不法分子可能會(huì)利用數(shù)據(jù)庫(kù)表結(jié)構(gòu)及內(nèi)容字段分析我們的應(yīng)用,進(jìn)而發(fā)起攻擊。出于安全的考慮,我們當(dāng)然要對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行加密。

微信數(shù)據(jù)庫(kù)的類型是sqlite,不管是ios還是mac還是win或者安卓,區(qū)別在于每個(gè)數(shù)據(jù)庫(kù)都加密了但是加密的密鑰不同,這里win和mac主要采用從遠(yuǎn)程服務(wù)器獲取一些信息加上本地的某些信息通過一系列算法生成的密鑰通過AES加密的,AES的密鑰是32位,而且所有數(shù)據(jù)庫(kù)文件共用一個(gè)密鑰,我們需要找到那個(gè)AES密鑰才能進(jìn)行解密,然后才能對(duì)數(shù)據(jù)庫(kù)文件進(jìn)行操作。但是安卓和ios不同,通過翻閱一些文章發(fā)現(xiàn),手機(jī)端的數(shù)據(jù)庫(kù)生成的密鑰是通過本地已有數(shù)據(jù)進(jìn)行生成的密鑰,僅有7位,我們可以通過暴力破解的方式獲取密鑰。

解密PC數(shù)據(jù)庫(kù) 一般都是通過od附加微信進(jìn)行動(dòng)態(tài)調(diào)試 https://bbs.pediy.com/thread-251303.htm還有一種辦法就是通過尋找微信模塊的地址然后加上偏移量就能獲取密鑰以及一些用戶信息,但是這也有個(gè)問題就是當(dāng)每次微信版本更新時(shí)偏移量也會(huì)隨之改變,我看到解決方法是作者需要每個(gè)版本獲取偏移量,然后更新工具這樣也很麻煩。

于是根據(jù)別人的文章分析了一下,如果說(shuō)每次偏移量都會(huì)變但是相關(guān)信息的數(shù)據(jù)結(jié)構(gòu)的相對(duì)便宜量不會(huì)變,這種方式可以全版本通用,通俗一點(diǎn)來(lái)講就是,每次私鑰和wxid的字符串地址雖然會(huì)變但是相對(duì)位置不變,我可以通過wxid的字符串加減多少一定能找到私鑰的地址。

2.分析

這里我首先通過往常一樣的動(dòng)調(diào)發(fā)現(xiàn),在密鑰出現(xiàn)的上下地址中存在另一種公鑰和私鑰的字符串-----BEGIN PUBLIC KEY-----\n...這不就是一個(gè)很好的特征嗎于是我們首先通過python中的pymem模塊來(lái)操作內(nèi)存,至于為什么要用這個(gè)模塊的,因?yàn)樗麑?duì)初學(xué)者比較友好里面封裝了很多函數(shù),很方便調(diào)用適合我這種對(duì)win系統(tǒng)不了解的人,按照這個(gè)思路我們先找到-----BEGIN PUBLIC KEY-----字符串的地址,再去反向搜索這個(gè)地址的地址,根據(jù)測(cè)試這個(gè)地址一般是大于WeChatWin.dll 但也不是絕對(duì)有些情況會(huì)導(dǎo)致搜不到這個(gè)字符串地址。

但是這里出現(xiàn)了一個(gè)問題,我在學(xué)習(xí)pymem的過程中通過翻閱文檔發(fā)現(xiàn)有一個(gè)全局搜索函數(shù)pattern_scan_all,但是通過實(shí)際下載pymem模塊時(shí)候卻沒有了這個(gè)函數(shù),于是我這里只好自己把這個(gè)函數(shù)再重新寫一遍。```def pattern_scan_all(handle, pattern, *, return_multiple=False):

from pymem.pattern import scan_pattern_page
next_region = 0

found = []
user_space_limit = 0x7FFFFFFF0000 if sys.maxsize > 2 ** 32 else 0x7fff0000
while next_region < user_space_limit:
next_region, page_found = scan_pattern_page(
handle,
next_region,
pattern,
return_multiple=return_multiple
)

if not return_multiple and page_found:
return page_found

if page_found:
found += page_found

if not return_multiple:
return None

return found
再根據(jù)分析整體數(shù)據(jù)結(jié)構(gòu)的偏移量就可獲得很多信息了
![img_v2_65fcc1df-bf24-40a9-8eeb-081da6b8608g.jpg](https://storage.tttang.com/media/attachment/2022/07/15/c9c26324-e393-4893-aa6e-663be81a9139.jpg)

# 0x03 解密
上面已經(jīng)獲取了很多信息,接下來(lái)我準(zhǔn)備開始解密,但是有一個(gè)問題,如果我們通過下載Visual Studio的c++庫(kù)編寫解密腳本而且還要自行編譯,本身我也不會(huì)c++,而且Visual Studio太過臃腫,我這里在網(wǎng)上搜了好半天,看看有沒有什么python解密sqlite的庫(kù)結(jié)果發(fā)現(xiàn)[pysqlcipher3](https://pypi.org/project/pysqlcipher3/)可以用來(lái)解密,但是在安裝的過程中,發(fā)現(xiàn)安裝失敗,結(jié)果去網(wǎng)上論壇搜索還是需要靜態(tài)編譯鏈接,我嘗試了幾次發(fā)現(xiàn)還是要下載Visual Studio,于是這個(gè)庫(kù)我只好放棄,但是在解密mac的過程中可以使用上述的這個(gè)模塊我們只需要在mac系統(tǒng)中安裝相應(yīng)工具就可以使用該模塊了

brew install sqlcipher

回到windows,我實(shí)在找不到結(jié)局方案,只好使用比較low的方法,通過subprocess去調(diào)用工具,工具還是蠻小的方法可行。
if not db_file:
raise ValueError("db_File is not defined!")

if not secret_key:
raise ValueError("secret_key is not defined!")
salt = open(db_file, 'rb').read(16)
dk = hashlib.pbkdf2_hmac('sha1', secret_key, salt, 64000, dklen=32)
exe_cmd = "%s %s" % (get_exe_file(), db_file)
p2 = Popen(exe_cmd, stdout=PIPE, stdin=PIPE, stderr=PIPE, shell=True)
cmd_sql = '''PRAGMA key = "x'%s'";PRAGMA cipher_page_size=4096; ATTACH DATABASE 'decrypt_%s' AS plaintext KEY ''; SELECT sqlcipher_export('plaintext'); DETACH DATABASE plaintext;''' % (binascii.hexlify(dk).decode(),os.path.basename(db_file))

code, message = p2.communicate(bytes(cmd_sql, encoding='utf-8'))

這里我們寫好了相關(guān)解密腳本結(jié)果mac數(shù)據(jù)庫(kù)和win數(shù)據(jù)庫(kù)采用的加密方式不同,于是我又去了解了一下。

傳入密鑰

通過Rand_bytes算法生成16個(gè)字節(jié)的salt,并存儲(chǔ)在數(shù)據(jù)庫(kù)第一頁(yè)的頭部(SQLite3的db文件,頭部前16個(gè)字節(jié)固定為SQLite 3 format,所以可以利用文件頭來(lái)存儲(chǔ)一些數(shù)據(jù))。

通過PKCS5_PBKDF2_HMAC_SHA1算法將密鑰和salt一起加密并多次迭代,生成AES加密所用的key;此處是對(duì)key的加密,即使原始的密碼泄露,也無(wú)法解密數(shù)據(jù)。

通過AES對(duì)稱加密算法對(duì)每一頁(yè)的文件內(nèi)容(有效的內(nèi)容,不包含文件頭和reserved字段)進(jìn)行加密。

加密時(shí),文件執(zhí)行過AES加密后,對(duì)文件內(nèi)容,通過Hmac算法,獲取文件校驗(yàn)碼,填充在page尾部(SQLite3提供了reserved字段,自動(dòng)在page尾部預(yù)留一段空間)。

解密時(shí),先調(diào)用Hmac算法獲取文件標(biāo)識(shí)碼,與page尾部的數(shù)據(jù)進(jìn)行對(duì)比,如果數(shù)據(jù)一致,則證明文件沒有被篡改過,不然證明文件已經(jīng)被篡改,則拋出異常。

PS:以上為默認(rèn)的算法,sqlCipher沒有固定算法,用戶可以自己設(shè)置。

經(jīng)測(cè)試windows系統(tǒng)的wx數(shù)據(jù)庫(kù)就是用上述加密方式,首先會(huì)通過讀取文件頭生成16個(gè)字節(jié)的salt,再使用PBKDF2_HMAC_SHA1算法設(shè)置迭代次數(shù)為64000次生成的密鑰這樣的話解密就很簡(jiǎn)單了

salt = open(db_file, 'rb').read(16)
dk = hashlib.pbkdf2_hmac('sha1', secret_key, salt, 64000, dklen=32)
exe_cmd = "%s %s" % (get_exe_file(), db_file)
p2 = Popen(exe_cmd, stdout=PIPE, stdin=PIPE, stderr=PIPE, shell=True)
cmd_sql = '''PRAGMA key = "x'%s'";PRAGMA cipher_page_size=4096; ATTACH DATABASE 'decrypt_%s' AS plaintext KEY ''; SELECT sqlcipher_export('plaintext'); DETACH DATABASE plaintext;''' % (binascii.hexlify(dk).decode(),os.path.basename(db_file))

這里也遇到了坑 key可以有兩種表現(xiàn)方式,一種是單純字符串口令,另一種就是原始密鑰,我們從內(nèi)存中獲取的是原始密鑰所以要輸入的是PRAGMA key = "x'密鑰'"我們回到mac密鑰的獲取,因?yàn)閙ac的權(quán)限管理做的很死,我們首先需要關(guān)閉SIP(系統(tǒng)完整性保護(hù))

系統(tǒng)完整性保護(hù)(SIP)是 OS X El Capitan 及更高版本所采用的一項(xiàng)安全技術(shù),旨在幫助防止?jié)撛趷阂廛浖薷?Mac 上受保護(hù)的文件和文件夾,但這也造成了安裝某些特殊版本軟件的或者做特殊修改的時(shí)候權(quán)限不足。在這里就體現(xiàn)在使用 LLDB 調(diào)試時(shí)候,所有的調(diào)試語(yǔ)句都會(huì)被系統(tǒng)拒絕,因此在正式進(jìn)行調(diào)試之前,一個(gè)重要的準(zhǔn)備工作就是檢查系統(tǒng)完整性保護(hù)(SIP)的開啟狀態(tài),如果開啟的話,要把它關(guān)閉。

檢查 SIP 的開啟狀態(tài)

在終端里輸入 csrutil status 回車,如果看到:

System Integrity Protection status: enabled.

這說(shuō)明的 SIP 已經(jīng)開啟,如果要繼續(xù)調(diào)試的話,需要關(guān)閉。如果是 System Integrity Protection status: disabled. 則說(shuō)明 SIP 已經(jīng)處于關(guān)閉狀態(tài),可以直接進(jìn)行調(diào)試。

  1. 重啟,并在開機(jī)的時(shí)候長(zhǎng)按 Command 和 R
  2. 進(jìn)入系統(tǒng)恢復(fù)狀態(tài)
  3. 點(diǎn)擊屏幕頂部工具欄上的 實(shí)用工具,選擇終端
  4. 在終端中輸入 csrutil disable 回車,會(huì)出現(xiàn)下述字符串,再次重啟生效
1. Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.

然后我們就可以開始調(diào)試微信了
1. 打開電腦端微信(不要登陸)
2. 在Terminal輸入命令
lldb -p $(pgrep WeChat)
3. 輸入br set -n sqlite3_key,回車
4. 輸入c,回車
5. 手機(jī)掃碼登陸電腦端微信
6. 這時(shí)候電腦端微信是會(huì)卡在登陸界面的,不需要擔(dān)心,回到Terminal
7. 輸入memory read --size 1 --format x --count 32 $rsi,回車就可以獲取到了密鑰

0x6000003624e0: 0x54 0x60 0x97 0x05 0xb5 0x09 0x43 0x9f
0x6000003624e8: 0x94 0xe8 0x38 0x09 0xdc 0x5e 0x79 0x53
0x6000003624f0: 0x4f 0xdc 0xa1 0x66 0x8e 0x96 0x4a 0x98
0x6000003624f8: 0x9a 0x72 0xa6 0x17 0xe0 0x17 0x7c 0x56

這里我們可以直接PRAGMA cipher_compatibility = 3就可以設(shè)置好解密參數(shù)了 ,這是一個(gè)標(biāo)準(zhǔn)

解密效果如下

3.一些其它功能

微信在2022.06月之后更改了傳輸文件存儲(chǔ)位置,和每個(gè)人聊天所傳輸?shù)奈募?huì)被放在不同的文件夾下,大大提升了我們尋找歷史文件的難度,于是我寫了個(gè)整合文件名輸出的功能

還有就是壓縮功能可以分別壓縮數(shù)據(jù)庫(kù),圖片,歷史傳輸文件

4.碎碎念

原先想繼續(xù)完善安卓和ios的解密腳本來(lái)著,但是作者馬上要開始準(zhǔn)備秋招了沒時(shí)間寫,等過段時(shí)間再更新下,寫這篇文章的目的是想讓大家接觸下電子取證這個(gè)方向的知識(shí),不僅僅是微信還有一些社交軟件都可以嘗試去分析下,例如soul,陌陌,qq等。不限于app甚至是阿里云鏡像取證,這個(gè)方向也有很多知識(shí)值得學(xué)習(xí)。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2017-05-03 13:50:38

2011-08-11 14:47:41

2019-12-26 17:25:22

數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù)

2018-05-10 17:18:59

數(shù)據(jù)庫(kù)MySQL密碼

2011-04-06 09:25:20

MySQL數(shù)據(jù)庫(kù)

2011-08-23 15:16:54

OracleMySQL

2010-05-10 18:05:09

2018-08-24 13:58:13

數(shù)據(jù)庫(kù)MySQL備份

2013-05-21 10:06:11

數(shù)據(jù)庫(kù)查詢優(yōu)化

2017-10-18 19:12:24

數(shù)據(jù)庫(kù)Oracle安全管理

2011-03-03 13:13:51

DelphiSQLite加密

2020-06-22 14:19:28

小程序云開發(fā)數(shù)據(jù)庫(kù)

2021-01-28 09:34:08

解密密鑰取證分析

2020-11-20 14:49:56

數(shù)據(jù)庫(kù)

2013-06-24 10:31:38

2023-12-20 16:12:37

數(shù)據(jù)庫(kù)復(fù)制延遲

2011-06-30 15:26:28

Update數(shù)據(jù)庫(kù)

2011-04-01 13:46:45

2020-07-29 18:43:46

數(shù)據(jù)庫(kù)

2011-04-28 11:17:17

微博數(shù)據(jù)庫(kù)設(shè)計(jì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美精品一区二区三区在线 | 国产精品久久久久久 | 精品国产一区二区三区性色av | 亚洲综合视频 | 97视频成人| 国产色网 | 久久91av| 午夜丰满寂寞少妇精品 | 国产美女精品视频 | 国产精品免费福利 | 亚洲视频一区二区三区 | 国产成人午夜精品影院游乐网 | 欧美亚洲视频 | 午夜激情在线视频 | 国产xxxx岁13xxxxhd | 99精品欧美一区二区三区综合在线 | 日本中文在线视频 | 国产在线观看网站 | www.久久.com| 一区二区三区欧美大片 | 国产永久免费 | 精品一区av | 欧美精 | h视频在线观看免费 | 国产乱码精品一区二区三区五月婷 | 999国产精品视频 | 在线婷婷 | 三级免费av | 欧美电影免费观看高清 | 自拍第1页 | 中文在线日韩 | 色婷婷综合久久久久中文一区二区 | 日韩在线视频观看 | 久久99精品久久久久 | 国产在视频一区二区三区吞精 | 精品国产乱码久久久久久中文 | 精品无码久久久久久国产 | 国产精品久久久久久久久久久久久久 | 欧美日韩高清在线一区 | 美女视频三区 | 国产精品久久久久国产a级 欧美日韩国产免费 |