分析微信聊天記錄(1)——獲取微信聊天記錄
文章目錄
- 分析微信聊天記錄(1)——獲取微信聊天記錄
- 獲取 `EnMicroMsg.db `檔案
- 已root手機
- 小米手機
- 獲取資料庫密碼
- 匯出資料庫
- windows
- linux
- mac
- 總結
獲取微信聊天記錄的主要流程是取 EnMicroMsg.db檔案,找密碼,匯出,
獲取 EnMicroMsg.db檔案
已root手機
對于root后的手機來說,直接獲取/data/data/com.tencent.mm/MicroMsg/{hash}/EnMicroMsg.db檔案即可,對于非root手機,可以使用電腦端的安卓模擬器,將聊天記錄備份到模擬器中,在模擬器中獲取EnMicroMsg.db檔案,當然,特殊機型有特殊的辦法,
小米手機
利用小米手機的備份功能,即使沒有root的手機,也可以獲取到微信的聊天記錄,步驟如下:
1.打開小米手機上的“設定”,點擊“更多設定”,“備份和重置”,
說明:如果小米手機安裝的是最新MIUI11系統,則進入手機“設定”后,再點擊“我的設備”,“備份和重置”即可,

2.點擊“本地備份”,按提示輸入鎖屏密碼后,點擊“下一步”,最后點擊“新建備份”按鈕,

3.將“系統資料“及“軟體程式”前面的勾去掉,再點擊軟體程式右邊的小箭頭,僅勾選上“微信”后,開始進行備份,

4.備份結束后,將小米手機用資料線連接到電腦上,手機上詢問USB的用途,請選擇“傳輸檔案”,如果設定為默認的“僅限充電”的話,將無法在電腦上讀取手機中的檔案,
5.進入手機所在盤符下的“MIUI/backup/AllBackup/備份日期時間”目錄,將該目錄下的微信(com.tencent.mm).bak檔案復制到電腦上,

6.使用7zip軟體解壓微信(com.tencent.mm).bak,進入apps/com.tencent.mm/r目錄,將該目錄下的MicroMsg檔案夾提取出來,
或者參考小米6提取微信聊天記錄筆記,使用作者提供的軟體進行解壓,
首先需要安裝Java環境,將abe.jar復制到和微信(com.tencent.mm).bak同一個檔案夾下,終端執行:
java -jar abe.jar unpack 微信(com.tencent.mm).bak mm.tar
會生成一個mm.tar檔案,用解壓軟體將這個包解壓,會得到一個apps檔案夾,聊天記錄資料庫就存在apps/com.tencent.mm/r/MicroMsg/ 下,打開檔案夾會發現里面有32位字符(MD5值)的檔案夾(登錄過多個用戶的有多個),打開此檔案夾其中EnMicroMsg.db就是要找的資料庫檔案,
獲取資料庫密碼
注意!!這是最關鍵的一步,這一步會卡很久的時間,因為微信各個版本的資料庫有細微的區別,有時間因為資料庫版本問題或者密碼問題,這一步就是過不去,
至此,我們已經獲取到了EnMicroMsg.db檔案,這是個sqlcipher加密資料庫,需要密碼才能打開,有以下幾種方式生成密碼:
資料庫密碼有很多種生成方式:
- 手機IMEI+uin(微信用戶id userinformation) 將拼接的字串MD5加密取前7位,
如IMEI為123456,uin為abc,則拼接后的字串為123456abc 將此字串用MD5加密(32位)后為df10ef8509dc176d733d59549e7dbfaf 那么前7位df10ef8 就是資料庫的密碼,由于有的手機是雙卡,有多個IMEI,或者當手機獲取不到IMEI時會用默認字串
1234567890ABCDEF來代替(小米10就是!!!),由于種種原因,并不是所有人都能得出正確的密碼,此時我們可以換一種方法,
- 反序列化
CompatibleInfo.cfg和systemInfo.cfg,
不管是否有多個IMEI ,或者是微信客戶端沒有獲取到IMEI,而使用默認字串代替,微信客戶端都會將使用的資訊保存在MicroMsg檔案夾下面的CompatibleInfo.cfg和systemInfo.cfg檔案中,可以通過這兩個檔案來得到正確的密碼,但是這兩個檔案需要處理才能看到資訊,注意!通常這一步會顯示IMEI值為null,此時若密碼不正確,可將IMEI換為
1234567890ABCDEF然后使用第一種方法,
將IMEI.java、CompatibleInfo.cfg和systemInfo.cfg三個檔案放在相同目錄下終端運行(IMEI.java內容見下文):
javac IMEI.java
java IMEI systemInfo.cfg CompatibleInfo.cfg
- 使用hook方式得到資料庫的密碼,這個方法最有效參考
- 暴力破解
MD5加密在線:md5加密
IMEI.java檔案的內容為:
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.security.MessageDigest;
import java.util.HashMap;
public class IMEI {
public static void main(String[] args) {
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
args[0]));
Object DL = in.readObject();
HashMap hashWithOutFormat = (HashMap) DL;
ObjectInputStream in1 = new ObjectInputStream(new FileInputStream(
args[1]));
Object DJ = in1.readObject();
HashMap hashWithOutFormat1 = (HashMap) DJ;
String s = String.valueOf(hashWithOutFormat1.get(Integer
.valueOf(258))); // 取手機的IMEI
System.out.println("The IMEI is : " + s);
String uin = String.valueOf(hashWithOutFormat.get(Integer.valueOf(1)));
System.out.println("The uin is : " + uin);
s = s + uin; //合并到一個字串
s = encode(s); // hash
System.out.println("The Key is : " + s.substring(0, 7));
in.close();
in1.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String encode(String content)
{
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(content.getBytes());
return getEncode32(digest);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
private static String getEncode32(MessageDigest digest)
{
StringBuilder builder = new StringBuilder();
for (byte b : digest.digest())
{
builder.append(Integer.toHexString((b >> 4) & 0xf));
builder.append(Integer.toHexString(b & 0xf));
}
return builder.toString();
}
}
運行結束后就會獲得密碼:

匯出資料庫
windows
Windows用戶可以使用sqlcipher.exe軟體來查看資料庫,打開資料庫,輸入密碼,就可以查看資料庫中的表,文字聊天記錄儲存在message表中,可以選中表,點擊軟體的右上角file-export匯出表到csv檔案,可以通過Excel查看表中的資訊 執行這段命令可以查看制定物件的聊天記錄
select datetime(subStr(cast(m.createTime as text),1,10),'unixepoch', 'localtime') as theTime,case m.isSend when 0 then r.nickname when 1 then '我'end as person,m.content from message m inner join rcontact r on m.talker = r.username where m.type=1 and r.nickname = '對方微信昵稱'
linux
Linux用戶可以使用sqlcipher來解密
sudo apt-get update
sudo apt-get install sqlcipher
sqlcipher EnMicroMsg.db 'PRAGMA key = "yourkey"; PRAGMA cipher_use_hmac = off; PRAGMA kdf_iter = 4000; ATTACH DATABASE "decrypted_database.db" AS decrypted_database KEY "";SELECT sqlcipher_export("decrypted_database");DETACH DATABASE decrypted_database;'
執行上面的命令之后會得到一個解密后的資料庫decrypted_database.db,可以使用資料庫軟體查看,
當然了,一定一定要主要sqlcipher的版本問題!最好使用參考鏈接中的軟體,否則,就算是密碼正確了也無法匯出,
mac
對于mac系統,推薦使用sqLiteStudio,版本號是3.2.0,


按照影像中的配置,輸入密碼,測驗連接成功之后,就可以打開資料庫,

資料庫中的message表,就是我們所需要的表,我們右鍵選擇匯出該表,可以將資料表匯出到csv檔案中,注意,匯出到csv的程序中,會失去聊天記錄中語音通話時長的資訊,這部分bug以后再修復,
總結
我們完成了微信聊天記錄的提取與匯出,最侄訓出到一個csv表中,方便后續的處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259858.html
標籤:其他
上一篇:2.單例模式
