android 微信 导出,Android微信数据导出
在Nexus 5(Android 4.4)+WeChat 5.4,和Nexus 5(Android 5.0)+Wechat 6.0上测试可用。
获取加密的sqlite3数据库EnMicroMsg.db
如果已经root过,可以下载/data/data/com.tencent.mm/MicroMsg/*/EnMicroMsg.db。
若没有root,则/data/data/com.tencent.mm下多数目录都不可读,可以使用下面的方法:
开启“开发人员选项”,选上“USB侦错”
电脑上执行adb backup -noapk com.tencent.mm
在手机上弹出对话框提示是否允许备份
不要设置密码,点备份,电脑会收到backup.ab
解压backup.ab:dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar
解压backup.tar得到数据库apps/com.tencent.mm/r/MicroMsg/*/EnMicroMsg.db
获取用于生成密钥的信息
uin:访问/data/data/com.tencent.mm/MicroMsg/*/system_config_prefs.xml,获取其中name="default_uin" value="([0-9]+)"的value字段值uin。也可以打开wx.qq.com网页版,查找.wx.qq.com域的cookie,其中wxuin字段的值就是uin。也可以用backup.tar里的apps/com.tencent.mm/sp/system_config_prefs.xml。
IMEI:在拨号盘输入*#06#获取IMEI,或者开启“USB侦错”后使用adb shell dumpsys iphonesubinfo得到15个十进制数字组成的imei。网上查到有些机型可能使用不同于IMEI的其他字段用于生成密钥。
使用sqlcipher解密
把上面两步得到的imei和uin拼接起来计算MD5。执行echo -n "$imei$uin" | md5sum | cut -c -7获取sqlcipher使用的加密密钥,下面用abcdefg指代。
执行sqlcipher EnMicroMsg.db,输入:
1
2
3
4
5PRAGMA key='abcdefg';
PRAGMA cipher_use_hmac = off;
ATTACH DATABASE "decrypted_database.db" AS decrypted_database KEY "";
SELECT sqlcipher_export("decrypted_database");
DETACH DATABASE decrypted_database;
解密得到可用sqlite3打开的decrypted_database.db。
注意,sqlcipher不同版本使用的加密方式不同,我尝试使用3.8.4.3版本打开数据库文件,得到如下错误信息:
1
2
3sqlite> PRAGMA key='abcdefg';
sqlite> .schema
Error: file is encrypted or is not a database
目前发现2.1.1版本的sqlcipher可以解密。可以下载https://github.com/CovenantEyes/sqlcipher-windows/releases提供的2.1.1的Windows用exe,用wine运行,或者在https://launchpad.net/ubuntu/+source/sqlcipher/2.1.1-2/+build/4642377上下载libsqlcipher0_2.1.1-2_amd64.deb和sqlcipher_2.1.1-2_amd64.deb,执行:
1
2
3
4
5
6
7# /tmp/sqlcipher_2.1.1-2_amd64.deb
# /tmp/libsqlcipher0_2.1.1-2_amd64.deb
cd /tmp
# get /tmp/usr/bin/sqlcipher
ar x sqlcipher_2.1.1-2_amd64.deb && tar xf data.tar.gz --no-overwrite-dir
# get /tmp/usr/lib/x86_64-linux-gnu/libsqlcipher.so.0.8.6
ar x libsqlcipher0_2.1.1-2_amd64.deb && tar xf data.tar.gz --no-overwrite-dir
解压后执行:
1cd /tmp/usr && LD_LIBRARY_PATH=lib/x86_64-linux-gnu bin/sqlcipher /tmp/EnMicroMsg.db
解析message表并导出消息
message表储存消息。目前了解到从fmessage_conversation、rcontact和chatroom表中可以得到一些联系人和聊天室的信息。
暂时使用一个比较粗糙的Ruby脚本导出信息,需要先gem install sqlite3:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39require 'sqlite3'
begin
talker2name = {}
username2name = {}
db = SQLite3::Database.open '/tmp/decrypted_database.db'
db.results_as_hash = true
db.execute('SELECT talker,displayName FROM fmessage_conversation').each {|row|
talker2name[row['talker']] = row['displayName']
}
db.execute('SELECT username,nickname FROM rcontact').each {|row|
username = row['username']
nickname = row['nickname']
if nickname != ''
if username =~ /@chatroom$/
talker2name[username] = nickname == '' ? username : nickname
else
username2name[username] = nickname == '' ? username : nickname
end
end
}
db.execute('SELECT createTime,talker,content FROM message').each {|row|
time,talker,content = row.values_at 'createTime','talker','content'
next unless content
if talker =~ /@chatroom$/
content.sub!(/^(\w+):\n/) {|x| "#{username2name.fetch($1,'xx')}: " }
end
#next if content =~ /^~SEMI_XML~|
next if content =~ /^~SEMI_XML~/
name = talker2name.fetch talker, talker
puts "#{Time.at(time/1000).strftime('%FT%R')}\t#{name}\t#{content}"
}
rescue SQLite3::Exception => e
puts e
ensure
db.close if db
end
Refenrences
android 微信 导出,Android微信数据导出相关推荐
- 微信公众号--会员数据导出
微信公众号--会员数据导出 最近有朋友想从微信公众号会员管理中将 会员数据 批量导出 excel,因此经过一段时间的研究,终于可以批量获取 关注了公众号成员的会员信息.如下图,在点读取会员后,可以读出 ...
- mongodb 导出一条数据导出_使用MongoDB命令工具导出、导入数据
Windows 10家庭中文版,MongoDB 3.6.3, 前言 在前面的测试中,已经往MongoDB的数据库中写入了一些数据.现在要重新测试程序,数据库中的旧数据需要被清理掉,可是,又想保存之前写 ...
- mysql 数据导出语句_MySQL 数据导出
将表中数据导出为一个文本文件,最简单的方法是用 SELECT...INTO OUTFILE 语句,它会将查询结果直接导出为服务器主机上的一个文件. 利用 SELECT...INTO OUTFILE 语 ...
- python读html导出excel,python数据导出到excel
如何使用python将大量数据导出到Excel中的 安装openpyxl模块 调用openpyxl模块,将变量中的数据写入excel 具体的操作流程需要根据您的需CSS布局HTML小编今天和大家分享和 ...
- 最新微信公众号文章数据导出软件工具
相信大家经常都会使用微信软件,对于微信公众号都不陌生,有很多人都会经常阅读公众号的文章.下面集宝数据就给大家说说如何找到好用的微信公众号文章采集器? 如何找到好用的微信公众号文章采集器 第一步:首先, ...
- Android 的Excel表的数据导出
前言 用Android 把一些数据用Excel表导出 一.引入jxl库? 1.直接引用 implementation group: 'net.sourceforge.jexcelapi', name: ...
- php excel 导出超时,PHP数据导出超时、内存不足的解决
实际工作中,我们经常导出报表的需求,当导出数据量过大的时候,经常会遇到超时和内存溢出的问题. 解决方案一 超时可用: set_time_limit(0) 解决. 内存溢出可用: ini_set('me ...
- mysql导出结构及数据结构,Mysql导出数据结构 or 数据
如果我们单单只想导出mysql数据表结构,通过navcat工具还不行,这时我们可以用mysqldump工具 在mysql server的安装目录:C:\Program Files\MySQL\MySQ ...
- java json删除指定元素_简洁而优雅,Python Tablib实现将数据导出为Excel, Json等N种格式...
遇见 Tablib 我们在 Python 实际开发过程中,经常涉及将数据导出为 Excel.Csv.Yaml.Json 等各种格式的文件的需求,一些粗鲁的实现方式是通过安装各种第三方模块以支持不同格式 ...
- MTi-300Windows使用及数据导出
提示:乌班图安装总是提示缺少依赖,所以我们单纯讨论Windows吧 文章目录 前言 一.MTI-300是什么 二.使用步骤 1.下载安装 2.启动软件 3.连接硬件 4.扫描硬件 5.配置选项 6.界 ...
最新文章
- MySQL jfinal 生成数据_JFinal Web开发学习(四)数据库连接与自动生成model
- 整合rpc远程调用_远程过程调用(RPC)
- 问鼎五岳之巅--Java开发手册泰山版心得分享
- Windows下文件名或目录的简写
- tencent intern learning
- 使用nodejs将某个简书用户的文章进行导出
- Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
- 怪物猎人online 日服 注册流程(原创)
- http://t.cn/xxx的短链接如何生成?(附15款新浪短链接生成器)
- gba口袋妖怪c语言源代码,查看“精灵宝可梦 火红·叶绿”的源代码
- 黑客电影预言或成真,英国核潜艇安全问题堪忧
- Python初学者应该选择哪个版本
- 怎样开发鸿蒙系统的输入法,2020华为开发者大会 讯飞输入法携手鸿蒙共创未来...
- 安卓手游脚本开发!闭关在家37天“吃透”这份345页PDF,已开源
- 用卷积神经网络实现笑脸、非笑脸表情识别
- kubernetes v1.20项目之部署二进制安装_系统环境配置
- oracle grant execute function,oracle grant 详解
- AOP的5种advice
- 机器学习系列(22)_SVM碎碎念part5:凸函数与优化
- 2018网易游戏开发面试题(经验)锦集
热门文章
- Java中Word转PDF解决方案
- ABAP 销售订单BAPI创建批导程序
- 26.【案例:敏感词汇过滤】
- 如何利用Arcmap模型构建器处理NC格式数据
- Matplotlib可视化数据分析图表下(常用图表的绘制、折线图、柱形图、直方图、饼形图、散点图、面积图、热力图、箱形图、3D图表、绘制多个图表、双y轴可视化图表、颜色渐变图)
- 数据库自学-SQL-四大SQL语句DDL、DML、DQL、DCL
- 直播教程 || 虚拟直播设备清单分享,建议收藏~
- “野火FreeRTOS教程”第7章补充知识点-异常流程
- STM32F103--移植FreeRTOS完整教程
- ensp查看历史配置命令_华为eNSP配置基本命令