文件管理的常见问题,获取手机中微信聊天记录方法

首先我们要知道,微信的聊天记录一般是不提供给我们获取的,所以一般情况下我们手机没root的话就拿不到了。就算是root后的手机,想要获取微信的EnMicroMsg.db文件并且解密它、打开它也有点难度。

Android Device Monitor 是 Android Studio
中用于监测模拟器或真机运行状态的一款开发者工具。但开发者在使用它的过程中往往会遇到很多问题,尤其对于新手。本文分析了实际学习中遇到的问题,包括:1.
File Explorer 不显示文件;2. 无权访问 data 等文件; 3.
无权下载文件等,涉及到 Monitor 的基本操作以及 adb shell
和命令行的操作等。

下面我们就来演示怎么从安卓设备的手机中拿到微信的数据文件吧~

背景

最近在看《第一行代码》(第二版)中关于数据存储方案的介绍。数据的状态分为两种:瞬时状态和持久状态,一般保存在内存中的数据随着活动的关闭,数据也就销毁了,如果我们想保存这些数据,该怎么办呢?书中介绍了三种实现数据持久化的方法,分别是:文件存储,SharedPreference
存储以及数据库存储。

在学习第一种数据持久化方法文件存储的时候,我们通过 Context 类中的
openFileOutput() 方法创建一个指定了保存路径的 FileOutputStream 对象
out,然后用这个 out 对象去创建一个 OutputStreamWriter 对象,之后再用这个
OutputStreamWriter 对象创建一个 BufferedWriter 对象
writer,我们就是通过这个 writer 的 write()
方法向文件输出流写入我们想要保存的数据的。文件写入数据之后默认保存在
/data/data/(package name)/files 目录下。我们可以通过 Android Studio 中的
Android Device Monitor 去查看,Android Device Monitor
的打开方法如下所示。

打开 Android Device Monitor

实验软件 :Android
Studio实验设备:Root过的真机一部一、拿到数据库文件EnMicroMsg.db

问题1:设备 Offline, File Explorer 空空如也

打开 Android Device Monitor
之后,发现里面什么都没有,左边的面板上显示了一台模拟器,但出于 offline
状态,不对呀,我的模拟器命名开着的呀,它正在运行我刚刚写的 app
呢,怎么这里会显示离线状态呢?于是我试着 Google 去找解决方案。

File Explorer 不显示文件

在 StackOverflow
上我发现了有人和我一样也碰到了这个问题,不过底下的回答寥寥无几,我找到了一个最高赞的答案(其实也就一个赞….),如下图所示,他的意思是他也不明白其中的具体原理,但是他发现如果先打开
Android Device Monitor,然后再运行模拟器,就可以解决这个问题。

解决 File Explorer 不显示文件(from SO)

于是我按照这个方法尝试,先打开 Android Device
Monitor,里面什么也没有,然后打开模拟器,随着模拟器的启动,Monitor
左侧面板出现了 offline 的模拟器,然后再相继启动很多服务,最后就显示为
online 了,如下图所示,这样我们就可以通过 Monitor 中的 File Explorer
标签访问模拟器中的文件了。

解决 File Explorer 不显示文件

一步步来,打开Android Studio的File Explorer:Tools –> Android –>
Android Device Monitor

问题2:File Explorer 中的文件无法访问

还记得刚刚说的吗,openFileOutput() 方法生成的文件存放在一个默认路径,即
/data/data/(package name)/files 下。由于我的包名是
com.knightaoko.filepersistencetest,所以在下文的叙述中,大家看到这个陌生的字符串不要惊讶,实际操作下替换成你自己的包名即可。(这期间还碰到个问题,好像
Android Device Monitor 不能和 Instant Run 同时运行,所以在此需要把
Instant Run 功能关闭,怎么关闭大家自行
Google,很简单的。)于是,下一步当然是打开这个路径了,找到
data,点击,没反应,再点击,还是没反应。又遇到问题了,我无法访问 data
目录,通过 Google 搜索,我知道了 File Explorer
中的每个文件和文件夹都是有访问权限的,如下图红框中标识的就是 data
文件夹的访问权限。

无权访问

访问权限是 drwxrwx–x,这玩意是什么意思呢?我相信,学过 Linux
的同学肯定一眼就知道这是什么意思。不知道也没关系,听我慢慢道来,这一个字符串一共有
10 个字符,第一个字符表示是文件夹还是目录,如果第 1 个字符是
d,则表示是文件夹。后面 9 个字符可以分为三组,第一组 rwx
表示所有者(user)对文件的访问权限,r 表示可读(read),w
表示可写(write),x 表示可被执行,- 表示没有该权限;第二组 rwx
表示组群(group)对文件的访问权限;第三组 –x
表示其他人(other)对文件的访问权限,可以看到,没有 r 和 w,说明 data
对其他人来说是不可读不可写的,怪不得我们不能打开它呢,那怎么办呢?于是我又网上搜啊搜,发现可以通过一定的方法修改文件的访问权限的,对,这个方法就是
adb shell。

adb shell 是 Android SDK 中的一个工具,你可以在你的 Android SDK 目录下的
platform-tools 找到它,下图就是我电脑上的该目录:

adb 所在目录

我们需要将这个目录添加到环境变量,为的是后面在命令行直接调用 adb
中的命令。比如在此我将 D:\AndroidSDK\platform-tools
添加到环境变量(具体怎么添加应该不用手把手教学了吧)后,运行 cmd
命令行,然后输入下面的命令。

通过 adb shell 获取文件访问权限

  • adb shell 是打开 adb 外壳程序。
  • su 是获取 root 权限,只有 root 权限才能修改文件的访问权限。
  • 底下一堆 chmod 777 是把对应的文件或文件夹的访问权限的后 9 位设置成
    rwxrwxrwx,777 就三个二进制 111, 喝起来就是 111111111(9 个
    1),即相当于把后 9 位访问权限都置 1,于是就成了
    rwxrwxrwx,即所有用户都具有该文件的全部访问权限(妈妈再也不用担心我打不开
    data 了…)。我们来看看结果:

修改后的文件访问权限

首先我们可以先随便运行一个项目,将真机作为调试工具,跑起来之后按照上面方式打开文件管理器,进入“/data/data/”我们可以看到是这样的:
冠亚体育手机网站 1

问题3:File Explorer 中的文件无法 pull(下载)

可以看到这些目录都能访问了,可以在包名目录下看到生成的 data
文件了,下一步我们想把这个文件复制到我们的电脑里,怎么操作呢?选中该文件,点击右上角的
pull 图标即可,如下图所示:

文件下载按钮

点击之后,选好保存路径。结果我们发现文件并没有保存下来,在 Console
窗口还提示了错误:

文件下载出错

意思就是拉取文件失败,因为你无权进行该操作。又是一脸懵逼,怎么办?还能怎么办,继续
Google 呗!这里我找了很久,终于发现了解决方案:adb root
。没错,在命令行输入这条语句,完美解决!(注意是在 windows
下的命令行,而不是 adb shell 里,当然前提是你添加了 adb
的目录到你的环境变量里)

通过 adb root 获取文件下载权限

然后我们再来 pull 一下,卧槽,崩溃了,又发现问题了:Failed to pull
selection。

文件下载再次出错

怎么办?OK,继续 Google,在 StackOverflow 里找到了一个高赞的解决方法:

重新选择模拟器(from SO)

什么意思?重新选择一下 Android Device Monitor
左侧面板的设备即可,没错!就是把下图红框中国的玩意儿点一下。

重新选择模拟器

好了,我们再找到刚刚那个要拷贝的文件,pull
一下,卧槽!!成功了,真是踏破铁鞋无觅处,得来全得靠姑姑(谷歌)。

文件下载成功

可以看到有很多应用的项目路径,我们找到微信的,目录是:com.tencent.mm,这里其实会出现一个问题,就是权限不够打开/data/data目录其中就是需要进入到adb.exe所在的目录下,打开命令行形式,改变文件权限,由于安卓文件系统的内置问题,我们只好一层层地打开权限,才可以查看到里面的文件。可以参照下我的目录是:

总结

总结一下吧,初次使用 Android Device Monitor,本来只是用来辅助学习
SQLite,结果一上午碰到一大堆问题,总算都一一解决了,在此总结一下。

  1. Android Device Monitor
    要在模拟器运行之前就打开
    ,这样才不会出现模拟器设备 offline
    的问题。

  2. Android Device Monitor 和 Instant Run 貌似有冲突,在用 Android
    Device Monitor 时关闭 Instant Run
    功能
    。我相信还有更好的解决方法,不然打开一个大一点的
    APP,不能同时用这两个功能,那多影响效率啊。只是我目前还处于学习阶段,上述方案能解决我当前的问题,不影响我进一步学习,那它就是
    OK 的。

  3. 操作 Android Device Monitor
    时,应该默认把你当做其他人(other)对待,所以你对文件的访问权限很受限制。解决方法是在命令行中,通过在
    adb shell 里获取 root 权限,并更改相应文件的访问权限
    ,当然记得将
    adb 所在目录添加进环境变量。

  4. 能访问了但是不能下载也是很麻烦的事,通过在命令行运行 adb root
    获取文件的下载权限

  5. 通过上述操作之后,就能正常使用 Android Device Monitor
    进行文件管理了。但不幸的是,当你重启模拟器,或启动另一台模拟器时,这些配置又得重新来过,否则你还是无法访问和下载模拟器中的文件。这个问题的根源在于权限二字,问题不是不能获取权限(通过
    adb shell 可以获取 root
    权限),而在于获取权限太麻烦了,希望后续版本的 Android Studio
    可以直接在 Android Device Monitor 的 GUI
    中设置相应获取权限的命令,使得广大 Android
    开发者对模拟器中的文件操作更有效率。

  6. Google 大法好

  7. 最后还有一点,我目前是跟着《第一行代码》(第二版)学习 Android
    开发的,但是作者郭霖老师没有组织读者交流群,所以在学习过程中遇到问题时,要么不知所措,要么大费周折才解决一个问题。如果有志同道合的同学一起交流,那样学习更有效率,遇到问题也能大家一起讨论解决。不知道大家有没有《第二行代码》学习社群推荐,或者有意向和我一起组建一个这样的学习环境,大家可以在留言区畅所欲言

  8. PS:本人初出茅庐,开发经验匮乏。如果你发现上文中有不对的地方,还望不吝赐教!

D:\Users\Administrator\AppData\Local\Android\sdk\platform-tools

具体操作如下:

在此adb.exe所在的目录下打开命令行形式,按SHIFT+右键打开进入adb
shell模式:在命令行中输入: adb shell 进一步进入root权限:在命令行输入:
su这时候你在File
Explorer中可以发现上面讲到的问题,就是文件夹打不开,这时候就需要你改变权限,但是权限的改变不是改变根文件夹的权限后子文件的权限也随着改变,比方你想改变/data/下的所有文件夹及其子文件夹文件的权限:chmod
-R 777 /data/

冠亚体育手机网站 2

会爆上面这个错,所以我们只好一层层改变权限,拿到我们需要的文件就好,依次输入命令:

chmod 777 /data/
chmod 777 /data/data/
chmod 777 /data/data/com.tencent.mm/
chmod 777 /data/data/com.tencent.mm/MicroMsg/
chmod 777 /data/data/com.tencent.mm/MicroMsg/01xxxxxxxxxxxxxx

改完权限我们就可以打开File Explorer中的文件了

冠亚体育手机网站 3

看到以上目录后,就可以试着把EnMicroMsg.db这个文件pull出来

冠亚体育手机网站 4 

ps:这里可能有些人会pull不出来,解决办法我在这篇文章上面有叙述:Android
Studio中导出数据库文件的方法以及出现Failed to pull selection: open
failed: Permission
denied的解决思路

二、解密数据库文件

这一步比较简单,首先需要我们下载一个SQLcipher,SQLCipher开发得和开放源码的扩展,它提供的SQLite数据库的透明加密.数据页之前被写入加密存储和读取解密。

下载传送门:SQLcipher下载

我们试着打开EnMicroMsg.db,发现它被加密了!但是微信给数据库加密的方式实在太简单,我们可以轻松地破解,一破一个准!该数据库密码的生成是由微信uin跟手机IMEI两个字符串相加后去md5前七位

1、这里先要拿到微信uin,很简单,有两种方式可以获取:

第一种是 :→传送门
//www.jb51.net/article/139995.htm

第二种呢,我们可以在shell命令行中cd进入:/data/data/com.tencent.mm/share_prefs/
后 :

cat system_config_prefs.xml

然后我们就可以看到下面这张图片的信息:

冠亚体育手机网站 5 

冠亚体育手机网站,上面我们就可以清楚地看到了,标记了default_uin标签名对应的value值就是我们要找的uin了~

2、手机IMEI的获取:在手机拨号键输入:*#06# 即可获取

3、得到微信uin和手机IMEI相加,因为都是数字,加完之后还是数字,得到了一个最终的数字字符串,通过在线md5加密软件加密后去前7位就是密码了,输入密码我们就可以进入梦寐以求的db文件EnMicroMsg.db了!!!

冠亚体育手机网站 6 

冠亚体育手机网站 7

实验成功,教程结束,觉得可以就点个赞吧

您可能感兴趣的文章:

  • Android如何获取QQ与微信的聊天记录并保存到数据库详解
  • Android破解微信获取聊天记录和通讯录信息(静态方式)

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注