安卓手机微信数据恢复取证研究 EnMicroMsg.db FTS5IndexMicroMsg_encrypt.db

article/2025/10/4 12:51:00

一、记录级恢复

        对于安卓手机微信数据恢复取证,大部分用户删除微信数据时,只对部分消息进行针对性的删除,实际上仅仅删除了EnMicroMsg.db文件message数据表中的局部内容,由于没有覆盖新数据,在安卓微信5.2版本前可以通过SQLite恢复工具直接恢复;5.2版本后因腾讯对安卓版本实行了删后写0覆盖的机制,至此对数据库文件无法直接恢复,数据库无法直接恢复就无法安卓手机微信数据恢复取证。
        空间清理时,一般会将聊天产生的多媒体文件和传输的其他文件直接删除,文字记录仍然保留,如需恢复上述文件的需要进入文件级恢复(详见下文);如果选择清空微信数据时,将会连同文字记录一并全部删除。

 


        为了尽可能寻找被删除的重要数据,经过研究发现在以下两处仍有可能存在历史已删除数据:


1、索引文件
        安卓微信在建立EnMicroMsg.db文件的同时会生成一个索引文件,目的在于方便数据检索,相当于对产生过的数据会有一个类似缓存的备份。早期版本的索引文件为IndexMicroMsg.db,该文件结构如图所示:


        其中数据表包括了群组及成员、游戏、收藏、通讯录、好友标签、消息内容等。依次对重要数据进行分析,发现群组及成员对应ChatRoomMembers表内容为明文,如下图所示:


        收藏内容(FtsIndexFavorite_content)、通讯录内容(FtsIndexContent_content)、消息的容(FtsIndexMessage_content)等表项中内容字段均为密文,如下图所示(乱码的即为密文):


        图中加密字段的解密秘钥为IMEI与uin组合后的MD5值,因此很容易解析出明文内容。
        目前6.6以后版本的微信索引文件已更新为FTS5IndexMicroMsg.db,所有表名称变更为FTS5开头,内容字段均为明文,如下图所示为某微信索引的消息内容。


        上图中并没有详细的消息发送/接收主体、也没有时间等必要字段,此时只需与下图所示的FTS5MetaMessage表进行对应匹配即可。


        当EnMicroMsg.db文件内数据删除时,对应的IndexMicroMsg.db或FTS5IndexMicroMsg.db文件中的相应内容同步删除,但不受写0覆盖的影响,因此可以从该索引文件中基于数据库恢复原理获得大量已被删除的数据记录。这也是目前部分国产取证软件所恢复出的微信数据的来源。


2、备份文件
        当微信使用中有过版本升级时,默认会生成EnMicroMsg.db.bak文件,该文件用于备份之前版本产生的聊天数据,及微信版本升级前的EnMicroMsg.db数据。当EnMicroMsg.db内旧数据删除时,对应的bak文件中的相应内容并没有删除且不受影响,因此可以从该备份文件中获得大量已被删除的数据记录。这部分数据很容易被忽略,但也可以作为恢复已删除微信数据的来源。
        该bak文件经过压缩加密,加密方式未公开。我们通过研究获得了解密密钥(密钥组成暂不公布),并通过腾讯的开源工具成功解压,从而能够打开该bak文件,内部结构与EnMicroMsg完全相同。
        综合上述两种方式,我们可以更好地找回被删除的微信历史数据,使安卓微信取证能够获得更多的线索和证据。
 

二、 文件级恢复

        微信消息中的音视频图片及传输的其他文件均以附属文件形式存储在独立目录中,删除这些消息时对应会删除相应原文件。如果要恢复这些文件,首选当然是寻找是否有下载或备份到其他路径的可能,其次考虑对手机存储区域进行全盘镜像,再对未加密的镜像进行目录恢复或文件挖掘(类似于硬盘或U盘的操作)。由于安卓系统的升级和文件系统的变化,目前针对安卓镜像的文件恢复效果并不理想。
        APP卸载时,一般不会保留数据(刻意保留的除外),所有相关文件均会删除,除非能够恢复出微信原始文件,否则无法恢复出相关数据。因此,同样需要借助镜像,在未加密的镜像中针对性的恢复安卓微信目录中的几个核心数据库文件及其他聊天附属文件。
        恢复出厂时,相当于系统还原,所有数据文件全部清除并被新系统重新覆盖,微信数据几乎荡然无存,安卓手机微信数据恢复取证就无法实现。

如果需要交流,或者更详细的代码,可以联系,15387172081微信同号,1037512447 qq/微信


http://chatgpt.dhexx.cn/article/qxeIlTQP.shtml

相关文章

电子数据取证-流程与技术

推荐公众号:安全猎人 专注于全栈攻防,学习笔记等; 原文url:https://mp.weixin.qq.com/s/hwpBcp-55ycXnSdObEffGg 电子数据取证流程与技术 根据某大佬经验,汇总出一系列取证流程、理论和模型; 在模型中&a…

计算机取证科普性基础

内容为美亚柏科公开课笔记。 1 Windows系统与取证 1.1 存储介质取证概述 专业名词 未分配空间文件残留区 物理大小逻辑大小文件大小物理大小-逻辑大小 临时文件 C:\Windows\Temp*.tmpC:\Documents and Settings\Username\Local Setting\Temporary Internet FilesC:\Documen…

逆向开发学习手机取证之钉钉取证分析

一、钉钉取证分析 钉钉是阿里巴巴专为中国企业推出的一款企业级应用。其主要支持视频会议、商户电话、聊天、企业通讯录以及企业办公协同等功能。其采用AES加密算法与第三方加密相结合,来提高用户数据的安全等级,旨在为企业员工间的交流、协同提供一个安…

电子取证

前言:比赛看到取证类的题目,但是没了解过,所以很尴尬。比赛那道题没做出来,没有什么思路,所以等下师傅们的wp看看之后在进行复现。然后就在CTF平台上找了取证类的题目,进行学习一下。 知识了解 取证方法 …

【Android取证篇】三星手机开启开发者模式

【Android取证篇】三星手机开启开发者模式 三星开发者模式—【suy】 文章目录 【Android取证篇】三星手机开启开发者模式三星手机开启开发者模式测试设备 (一)Android通用->版本号路径:设置--->关于手机--->版本号 (二&…

微信电子取证

微信电子取证 一键提取本地PC所有的微信信息 微信电子取证 电子取证 | wechat_info_collect,一款针对微信客户端的信息收集工具, 能够自动化提取本地PC所有的微信信息 包括微信号, 手机号等,使用python写的,mac需要安装requests库&#x…

安卓玩机搞机技巧综合资源-----手机隐藏拍照录像 取证软件 寻找隐藏摄像头 【十六】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

一篇手机取证的资料

手机取证工具介绍。 关于手机取证 目前手机的普及率是如此之高,以至手机取证成了一个非常重要的技术研究领域。而国内这方面尚处于起步阶段,未见有成熟的产品可用。事实上,手机取证,其技术难度相对还要低一些,因为数据…

【图像取证篇】手机拍摄的照片包含有哪些信息?

【图像取证篇】手机拍摄的照片包含有哪些信息? 以Android手机拍摄的图片为例—【suy】 文章目录 【图像取证篇】手机拍摄的照片包含有哪些信息?手机拍摄的照片(一)计算机照片属性查看(二)手机照片详细信息…

安卓手机取证要点(一)

微信发送的视频一般在以下文件夹里: 微信发送的语音一般在以下文件夹里: 语音文件类型一般为:amr文件: amr是一种主要用于移动设备上的音频文件格式,由于占用资源小,便于发录音彩信,所以手机上…

「技术视界」精编手机取证分析速查手册

要做好取证分析工作,对取证知识的熟练和掌握必不可少。之前在【技术视界】栏目我们推出了一篇《【技术视界】Windows取证分析基础知识大全,赶快收藏!》文章,广受大家好评。 今天,我们又给大家整理了在手机取证分析中的…

逆向开发学习手机取证之技术手段分析

手机取证的应用背景 随着移动终端的迅速发展,利用移动终端进行各类非法或犯罪行为的犯罪行为不断出现,而且呈现 出高速增长的势头,这使得电子数据取证的主要 目标从存储介质向移动终端延伸。美国科研机 构电子数据取证包括手机在内的取证实现…

手机取证设备(手机点验设备、手机合规检测、双路并行手机取证深度分析系统、手机点验数据恢复)

支持功能 支持多路点验、多路取证:可同时对多部手机进行采集、数据解析、数据分析、点验结果展示,采集完成后, 数据在后台自动解析, 效率更高,可检查手机使用违规敏感不良行为记录,如不良言论、涉蜜信息、违规翻蔷、wang赌wang贷、不良消费、…

说说尾递归

原文:https://www.cnblogs.com/catch/p/3495450.html 微博上看到有人在讨论尾递归,想起以前曾看过老赵写的一篇相关的博客,介绍的比较详细了,相信很多人都看过,我也在下面留了言,但挑了个刺,表…

Kotlin尾递归优化

Kotlin尾递归优化 尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的含义和用法。 1. 尾递归 ​ 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执…

c语言尾递归,C语言——递归与尾递归

在计算机科学领域中,递归式通过递归函数来实现的。程序调用自身的编程技巧称为递归( recursion)。 一个过程或者函数在其定义或者说明中有直接或者间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题类似的规模较小的问题来求解&…

php 尾递归,又见尾递归

这几天看到几篇关于尾递归的文章,之前对尾递归没有多大概念,所以回头研究了一下尾递归。 尾递归的概念 尾递归(Tail Recursion)的概念是递归概念的一个子集。对于普通的递归,由于必须要记住递归的调用堆栈,由此产生的耗用是难以估…

javascript尾递归优化

JS中的递归 我们来看一个阶乘的代码 function foo( n ){if(n < 1){return 1;}return n * foo( n - 1 ); }foo(5); // 120下面分析一下&#xff0c;代码运行过程中,执行上下文栈是怎么变化的 这个代码是在全局作用域中执行的&#xff0c;所以在foo函数得到执行之前&#x…

Scala尾递归

一、首先来简单介绍一下递归和尾递归 1.递归&#xff1a; 简单来说就是在函数内部调用函数本身来完成函数体。对于返回值的要求并不很严格。 递归的缺点&#xff1a;递归效率比较低&#xff0c;调用次数过多还会出现栈溢出的问题。 2.尾递归&#xff1a; 尾递归的核心思想&…

java 递归 尾递归_递归和尾递归

C允许一个函数调用其本身&#xff0c;这种调用过程被称作递归(recursion)。 最简单的递归形式是把递归调用语句放在函数结尾即恰在return语句之前。这种形式被称作尾递归或者结尾递归&#xff0c;因为递归调用出现在函数尾部。由于为递归的作用相当于一条循环语句&#xff0c;所…