Android微信聊天提取+導出csv
參考的資料中稱為“竊取”,有種做賊的感覺... 私以為稱提取就夠了,畢竟也是為了嗑鹽是吧
本文主要分為四部分:Android手機root,聊天內容提取,解密db文件,csv導出所需內容
Android手機root
(沒什麽技術含量,就靠工具)
本人所用手機為HUAWEI,手機需要解鎖再進行刷機。
解鎖頁面 https://www.emui.com/cn/plugin/unlock/index
申請解鎖還有一堆條件... 首先需要註冊華為雲賬號,否則連這個解鎖頁面都進不去
接受協議 -> 進入提交信息申請解鎖碼界面 -> 查看解鎖步驟
解鎖步驟中需要使用google的adb工具包 點擊下載(鏈接來自官網)
用命令行操作解鎖(沒有難度,不廢話
使用工具進行root,工具很多,我用的是叫Kingroot的軟件,連USB進行root。最好先打開軟件再連USB,不然軟件可能識別不出來。參考花粉帖。
聊天內容提取
使用剛才下載過的 google的adb工具包
USB連接手機,cmd打開adb。使用命令如下。
> adb device 如果沒有設備就重新插拔USB。檢測到的設備會顯示“編號 設備 ” > adb shell 進入shell命令 $ su 進入root # cd /data/com.tencent.mm/MicroMsg 進入根目錄下的wx目錄 # ls 顯示目錄下的所有文件,會發現有類似md5值的長文件名,裏面就存放著對應賬號的數據 # cd9******************** 進入這個賬戶的目錄 # cp EnMicroMsg.db /sdcard/EnMicroMsg.db 拷貝其中的加密聊天的db到sdcard的根目錄下,便於導出 # exit $ exit 搞到了文件,退出adb
順便說一句,如果想方便的獲取想要的app的數據,有時可以不root。這裏說的app僅限於第一次使用的app或自己寫的app反正你能破解的app。
(點我繼續看主線)
具體方法有以下幾種:(各位自行嘗試吧...如果我試了的話再單獨發一篇記錄一下)
1.借助run-as越權(run-as原理解釋來自尼古拉斯趙四大佬的博客【跪)
首先需要將
反編譯對應apk。工具也有幾種,我用過的是apkIDE(改之理),可以直接打開apk,使用截圖如下(不巧,怪物彈珠裏沒有反編譯出AndroidManifest.xml)
反編譯的目的是查看並修改apk的AndroidManifest.xml文件的android:debuggable屬性必須為true
修改之後重新簽名打包
下一步將修改好的apk裝回android手機,USB連接電腦連接adb(連接adb還可以通過網絡連接)
> adb shell $ su # run-as 修改過的apk包名(如jp.co.mixi.monsterstrikeCN) # cd /data/包名 再進入查找文件並copy出來就可以了
獲取包名參考 https://blog.csdn.net/zhubaitian/article/details/38926679
2.Stetho —— Facebook的Android調試工具+Chrome
這個玩意只能在自己開發的應用上用,apk破解應該沒辦法把感覺...
(據說需要梯子才可以隨意使用?
因為本人一點都沒有用過,先甩參考鏈接給大家,只能作很簡單的介紹了
參考1;參考2;參考3
第一步在Gradle中加入引用 compile ‘com.facebook.stetho:stetho:1.1.0‘
如果需要查看網絡可以添加以下二者之一並添加相應的客戶端代碼
compile ‘com.facebook.stetho:stetho-okhttp:1.1.0‘
compile ‘com.facebook.stetho:stetho-urlconnection:1.1.0‘
第二步在Application中加入初始化代碼
public class MyApplication extends Application { public void onCreate() { super.onCreate(); Stetho.initializeWithDefaults(this); } }
第三步打開Chrome輸入chrome://inspect可以使了
666...
3.各種開發工具
諸如AS的DeviceMonitor之類的... 似乎不root還是看不到呢~
解密db文件
現在db已經在本地PC中了。解密需要的工具請下載wxsqlcipher.exe。
用工具打開db時會出現輸入密碼的提示框。根據趙四大佬的反編譯分析密碼是md5(IMEI+UIN)。
IMEI獲取:手機撥號輸入【*#06#】
UIN獲取:https://wx.qq.com微信網頁版登錄,開啟瀏覽器抓包(如Chrome開發者工具F12的Network),隨便發點話,搜索所有數據包中的uin字段就可以找到長度為9位的號(不知道是不是固定9位)
把倆東西拼一起放到MD5在線加密網站,復制出來32位小寫的MD5串,取前7位。解密db。
csv導出
File -> Export裏有導出為sql和csv兩種方式,為了嗑鹽這裏導出為csv
列一下按我自己看到的,簡單記錄的表的功能(好閑哦我...
chatroom:加過的群(包括沒存在通訊錄的)
- chatroomname:群聊的chatroomID“xxxxxxxxx@chatroom”
- memberlist:成員的wxid
- displayname:成員昵稱
- roomowner:群主
- selfDisplayName:自己在群裏的昵稱
rcontact:聯系人和公眾號
- username:微信id,格式是"wxid_xxxxxxxx"或者一看就是自己設置的
- alias:自己設置的那個可以通過查找加好友的微信名(和上面那個有的有區別有的為空)
- conRemark:聯系人備註名
- nickname:微信名片上的名字,公眾號的名字
- contactLabelIds:聯系人標簽號
RemittanceRecord:標題是匯款的id,表內是對應編號對應message表裏的id
AppMessage:來自於應用的分享消息,包括微信支付憑證
EmojiInfoDesc:表情的所有描述
EmojiGroupInfo:所有下載的表情包集合
message:所有聊天記錄
- msgId:按所有消息時間順序的唯一編號
- type:標識聊天內容類型,49為圖片
- createTime:聊天時間
- talker:單聊的wxid或聊天室編號"xxxxx@chatroom"
- content:聊天內容,單聊直接顯示內容,群聊格式為“wxid:\n內容”
- talkerId:標識聊天對象的唯一id,一個群算作一個id
FileDownloadInfo:下載文件路徑?
voiceInfo:所有語音記錄
- FileName:語音名,可以在微信目錄下 audio/FileName.amr找到語音
- User:發送人
MediaDuplication:聊天圖片的各個大小的模糊清晰圖片
img_flag:聯系人頭像圖片flag
fmessage_conversation:添加好友的人和消息
VoiceTransText:語音轉文字功能的所有文字
Videohash:聊天中發送的視頻,有路徑
Videoinfo2:聊天中發送的視頻
appattach:聊天中的文件,對應msgInfoId
ContactLabel:標簽對應的聯系人
啊很多的表 神奇 但是感覺就沒找到有存關於朋友圈記錄的,是不是在別的db裏呢?
我的目的是獲得所有群聊的信息,表頭是這樣的:
群名 | 聊天對象 | 聊天內容 | 聊天時間 (就這樣簡單粗暴一點多余不要)
處理的代碼如下,親測有效。我是單個群聊處理的,所以需要提前在數據庫裏插好chatroom的id
# -*- coding:utf-8 -*- import csv class ChatItem(object): def __init__(self): self.groupid = "" self.friendid = "" self.msg = "" self.time = "" self.defaultid = "defaultid" def depart(self,contentstr): # 分開表中的人和信息 li = contentstr.split(‘:\n‘) if len(li) == 1: return (self.defaultid,contentstr) elif len(li) >= 2: # print ‘find‘ # print li[0],li[1] return (li[0],li[1]) csvFile = open("message.csv", "r") # 這裏只需要用一張message表,如果想獲得昵稱再用rcontact表查一下就好 writeFile = open("new.csv","wb") # 使用w模式csv會出現多余空行,所以使用wb模式 dict_reader = csv.DictReader(csvFile) fileheader = ["qun_id","send_id","qmessage","pub_time"] # 設置表頭 dict_writer = csv.DictWriter(writeFile, fileheader) dict_writer.writerow(dict(zip(fileheader,fileheader))) # dict: {"a":"a","b":"b"} i=0 # 群內聊天條數計數 groupidstr = "xxxxxxxxx@chatroom" # 想獲取的聊天編號 clist = [] for row in dict_reader: if row[‘talker‘] == groupidstr: i+=1 ci = ChatItem() ci.groupid = groupidstr [ci.friendid,ci.msg]=ci.depart(row[‘content‘]) print(ci.msg) ci.time = row[‘createTime‘] clist.append(ci) print i for c in clist: dict_writer.writerow({ "qun_id":groupidstr, "send_id":c.friendid, "qmessage":c.msg, "pub_time":c.time}) csvFile.close() writeFile.close()
如果用sql大概一下子就查出來了... csv還得倒騰一下
以上。 歡迎交流。
轉載請註明:http://www.cnblogs.com/kinzznsblog/p/8677449.html kinzzn的cnblog
第一篇博文寫了一下午哇...
四年本科之後仍然是小白 研究生要努力
本文重點參考:
https://blog.csdn.net/icodeyou/article/details/49556547 感謝大佬簡單明了的教程!
Android微信聊天提取+導出csv