1. 程式人生 > >Android微信聊天提取+導出csv

Android微信聊天提取+導出csv

sgi 下載 okhttp and LIDS 刷機 計數 spa 文件

參考的資料中稱為“竊取”,有種做賊的感覺... 私以為稱提取就夠了,畢竟也是為了嗑鹽是吧
本文主要分為四部分: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值的長文件名,裏面就存放著對應賬號的數據
# cd 
9******************** 進入這個賬戶的目錄 # 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