Dump wechat messages from android
|
8 gadi atpakaļ | |
---|---|---|
common | 9 gadi atpakaļ | |
legacy | 9 gadi atpakaļ | |
libchat | 9 gadi atpakaļ | |
screenshots | 10 gadi atpakaļ | |
third-party | 9 gadi atpakaļ | |
8 gadi atpakaļ | ||
.gitattributes | 9 gadi atpakaļ | |
.gitignore | 9 gadi atpakaļ | |
LICENSE.txt | 10 gadi atpakaļ | |
README.md | 9 gadi atpakaļ | |
android-interact.sh | 9 gadi atpakaļ | |
compatibility.sh | 9 gadi atpakaļ | |
count-message.sh | 9 gadi atpakaļ | |
decrypt-db.py | 9 gadi atpakaļ | |
dump-audio.py | 9 gadi atpakaļ | |
dump-html.py | 8 gadi atpakaļ | |
dump-msg.py | 9 gadi atpakaļ | |
list-chats.py | 9 gadi atpakaļ | |
plot-num-msg-by-time.py | 9 gadi atpakaļ |
WeChat(微信), as the most popular mobile IM app in China, doesn't give users any method to export well-formatted history message. This tool can parse and export WeChat messages on a rooted android phone.
Right now it can dump messages in text-only mode, or generate a single-file html containing voice messages, images, emoji, etc.
NEWS: WeChat 6.0+ uses silk to encode audio. The code is updated.
NEWS: WeChat 6.3 uses a new avatar storage. The code is updated.
If this tools works for you, please take a moment to add your phone/OS to the wiki. If it doesn't work, please leave an issue together with your phone/OS/wechat version.
./third-party/compile_silk.sh
)Note that commands involving ./android-interact.sh
are meant to be run on the computer.
(Requires Linux or Mac) Get the decrypted WeChat database and the avatar index:
./android-interact.sh db-decrypt
Manual:
${userid}
by inspecting the contents of /data/data/com.tencent.mm/MicroMsg
on the root filesystem of the device. It should be a 32-character-long name consisting of hexadecimal digits./data/data/com.tencent.mm/MicroMsg/${userid}/{EnMicroMsg.db,sfs/avatar.index}
from the device, possible ways are:
./android-interact.sh db
./android-interact.sh uin
, which pulls the value from /data/data/com.tencent.mm/shared_prefs/system_config_prefs.xml
document.cookie
./android-interact.sh imei
*#06#
on your phoneDecrypt database, will produce decrypted.db
:
./decrypt-db.py <path to EnMicroMsg.db> <imei> <uin>
NOTE: you may need to try different ways to getting imei & uin, because things behave differently on different phones.
Also, if the decryption doesn't work with pysqlcipher, maybe try the version of sqlcipher in legacy
.
Copy the WeChat user resource directory /mnt/sdcard/tencent/MicroMsg/${userid}/{emoji,image2,sfs,video,voice2}
from the phone's SD card to the resource
directory:
./android-interact.sh res
RES_DIR
in the script if the default doesn't workThis can take a long time. Some ways to do this faster:
busybox tar
without compression in the adb shell
, use adb pull
to copy the tar
archive to the computer, and then extract it. BusyBox is needed as the Android system's tar
may choke on long paths.Alternatively, you can use pipes. This is slower, but doesn't require any free space on the SD card:
# copy MicroMsg to the current directory
adb shell 'cd /mnt/sdcard/tencent &&
busybox tar czf - MicroMsg 2>/dev/null | busybox base64' |
base64 -di | tar xzf -
Parse and dump text messages of every chat (requires decrypted.db
):
./dump-msg.py decrypted.db output_dir
List all chats (requires decrypted.db
):
./list-chats.py decrypted.db
Generate statistical report on text messages (requires output_dir
from ./dump-msg.py
):
./count-message.sh output_dir
Dump messages of one contact to html, containing voice messages, emojis, and images (requires decrypted.db
, avatar.index
, and resource
):
./dump-html.py decrypted.db avatar.index resource "<contact_name>" output.html
See here for an example html.
Screenshots of generated html:
grep 'TODO' wechat -R