聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

微信聊天記錄導出成純文本文件 用安卓模擬器破解了

來源:CSDN 時間:2023-01-30 08:43:34

2020年10月29日,我終于將微信里面的聊天記錄導出成純文本文件了,至于后面的制作詞云圖,就相對簡單了。

現在對這個過程記錄一下,幫助有需要的人。

注意:我的手機是安卓手機,且沒有在其他操作系統上嘗試過下述方法。


(資料圖片僅供參考)

1、基本思路

和網上說的一樣,基本思路就是拿到手機里面存儲聊天記錄的數據庫并解鎖,然后導出成文本文件,接下來怎么分析就全憑所好了。

最耗費時間的,就是拿到并破解聊天數據庫的過程。

2、獲取數據庫文件

微信的聊天記錄在手機上是以SQLite數據庫存儲的。

一般情況下,我們是看不到這個數據庫文件的,除非獲取Root權限。但是,獲取Root權限后會降低手機的安全性,所以現在的安卓手機越來越難以被Root。

為此,就需要“曲線救國”:利用安卓模擬器。

下面是具體的步驟:

將手機上的聊天記錄備份至電腦,這個是微信自帶的功能,只需要按照微信的操作指引即可。

安裝安卓模擬器,我用的是網易mumu,支持mac和win。

打開安卓模擬器,注意,此時不要安裝微信,先完成以下操作: 3.1 獲取Root權限(右上角菜單欄-->系統設置-->開啟ROOT權限): 3.2 設置IMEI編碼(右上角菜單欄-->系統設置-->屬性設置-->自定義型號-->隨機): 點擊保存后,模擬器會提示是否重啟,點擊重啟以生效之前的設置。

在模擬器中下載微信(通過模擬器的搜索框直接下載)并登錄微信。在上一步操作過程中,電腦上的微信會因為手機端微信登錄狀態的變化而自動退出,這時需要重新登錄電腦微信。 將備份的電腦端的聊天記錄恢復至模擬器中的手機微信。下載RE文件管理器(通過模擬器的搜索框直接下載) 打開RE,從根目錄/下開始,路徑為:/data/data/com.tencent.mm/MicroMsg//EnMicroMsg.db,其中,為一數字字母組成的字符串,因微信號不同而不同;EnMicroMsg.db就是我們的數據庫文件了??梢詫⒃摂祿煳募椭频侥M器的共享文件夾中,這樣,數據庫文件就到了電腦上了。

3、解密

3.1 獲取密碼

微信對該數據庫文件進行了加密,加密規則是:先對IMEI和UIN進行拼接,然后利用MD5算法對拼接后的字符串進行轉換,轉換后的前7位字符為密碼。

IMEI上面已經在模擬器中獲取到了,接下來獲取UIN。

UIN是微信的用戶信息號,許多地方可以獲取到,這里舉一個例子。仍需要回到模擬其中,打開RE,進入到如下目錄:/data/data/com.tencent.mm/shared_prefs,然后直接用RE打開其中的system_config_prefs.xml,找到其中的name為default_uin的標簽所對應的value的值,就是UIN。

拿到兩個編號之后,將它們按照IMEI+UIN的順序拼接(注意,沒有+號),然后進行在線MD5轉換,轉換后,取前7個字符。

3.2 打開數據庫

盡管獲取了密碼,但并不能向其他數據庫一樣用密碼登錄即可(你可以嘗試一下用Navicat進行登錄看看是否成功),這是由于微信使用了SQLCipher對其進行了加密。如果熟悉SQLCipher的使用,可以下載源碼,依據3.1得到的密碼,用命令行進行解密。

我不熟悉,所以,可以用到別人的工具進行解密。

該工具是一個.exe文件,因此,必須在windows操作系統中運行。軟件打開之后使用起來應該沒什么難度,選擇File-->Open database-->選擇數據庫文件,然后彈窗就讓你輸入密碼了,輸入7個字符的密碼即可打開數據庫。

打開之后,里面的表有很多,主要用到的是一張名為message的表,從名字就知道了它存儲的是聊天記錄。

4、制作詞云

其實導出成csv文件之后,想基于這個文件做什么操作反而就比較簡單了,這里只是記錄一下。

4.1 文件轉碼

導出成的csv文件的編碼需要轉換成utf-8,這一點要記住。

4.2 python代碼

代碼不作解釋了,都是很基礎的,有問題歡迎評論。

import pandas as pdimport jiebaimport codecsfrom imageio import imreadimport matplotlib.pyplot as pltfrom wordcloud import ImageColorGeneratorfrom wordcloud import WordClouddef load_file_and_seg(file_path):    """導入文件并分詞"""    f = codecs.open(file_path)    content = f.read()    f.close()    segment = []    segs = jieba.cut(content)    for seg in segs:        if len(seg) > 1 and seg != "\r\n":            segment.append(seg)    return segmentdef get_words_count(file_path, stopwords_file=None):    """統計詞頻"""    segment = load_file_and_seg(file_path)    df = pd.DataFrame({"segment": segment})    if stopwords_file:        stopwords = pd.read_csv(stopwords_file, index_col=False, quoting=3, sep="\t",                                names=["stopword"], encoding="utf-8")        df = df[~df.segment.isin(stopwords.stopword)]    words_count = df["segment"].value_counts()    return words_count.to_dict()def has_chinese(string):    """字符串中是否含有中文"""    for char in string:        if u"\u4e00" <= char <= u"\u9fa5":            return True    return Falsedef preprocessing(file_path):    """數據的預處理"""    df = pd.read_csv(file_path, sep=",")    keep_indexes = []    for i in range(df.shape[0]):        txt = df.loc[i, "content"]        if txt.startswith(""):            continue        if txt.startswith("歡迎你再次回到微信"):            continue        if has_chinese(txt):            keep_indexes.append(i)    df2 = df.iloc[keep_indexes, :]    df2.sort_values(by="createTime", inplace=True)    df2 = df2.content    file = open("raw_msg.txt", "w+", encoding="utf-8")    for i in df2:        file.write(i + "\n")    file.close()if __name__ == "__main__":    file = "msg2.csv"    preprocessing(file)    words_count = get_words_count("./raw_msg.txt")    bimg = imread("./ai.jpeg")  # 使用一張圖片為模板    wordcloud = WordCloud(background_color="white", mask=bimg, font_path="AquaKana.ttc")  # 注意字體    wordcloud = wordcloud.fit_words(words_count)    bimgColors = ImageColorGenerator(bimg)    plt.axis("off")    plt.imshow(wordcloud.recolor(color_func=bimgColors))    plt.show()

5、參考

1 、Python 520情人節超強技能 導出微信聊天記錄生成詞云

責任編輯:

標簽: 聊天記錄 數據庫文件

相關推薦:

精彩放送:

新聞聚焦
Top 岛国精品在线