whatsapp 数据库中每个媒体文件的链接在哪里

Where are the links to each media file in a whatsapp database

我想整理一个包含 Whatsapp 群组中所有照片的相册。 使用 root phone 我已经将未加密的 whatsapp 数据库下载到我的电脑上。

在 Ubuntu 上使用 Sqliteman 我环顾四周,特别是在 msgstore.db 中,似乎无法找到特定组图像的所有链接。

使用 table "chat_list" 我看到一个特定的 "key_remote_jid" 值对应于我想要的组并且在 "messages" 数据库中我可以使用那个 "key_remote_jid" 获取与该组相关的所有消息,例如:

select * from messages where key_remote_jid="53151151515-1515131313535@g.us";

此外,我可以丢弃短信,以便通过

专注于我想要的媒体(主要是照片和视频)
select * from messages where key_remote_jid="53151151515-1515131313535@g.us" and  not media_wa_type = 0;

有些图片在 "media_name" 列下有文件名,但它们只是我发送的。

还有一个名为 "media_refs" 的 table,它包含许多图像和视频路径,但似乎只包含已转发到多个聊天室且具有我没有的密钥的文件'找不到与 "messages" table.

的关系

该小组相当古老(可追溯到 2013 年),而且 whatsapp 处理其数据库的方式似乎多年来发生了变化,因为有些列在过去一直是 {null} 而不是大多数最近的消息(如 participant_hash)和值 key_id 似乎在某些时候更改了格式。

然而,Whatsapp 应用程序可以毫无问题地向我显示过去任何时刻的文件,并让我可以选择使用 "Gallery" 类型的软件打开实际文件,因此信息在我的 phone 某处。

所有这一切的重点是基本上有一个我可以使用的备份,并且能够从我的 phone 中删除图像,并且仍然按照它们在该组中共享的相同方式组织它们。

我在 table messagesthumb_image 列中找到了 Whatsapp Images 的 link 作为 blob。您可以查看十六进制的 blob 并查找可能类似于 Whatsapp Images\IMG-20130101-WA0001.jpg 的字符串。我不知道 Whatsapp 正确存储 link 的确切位置,但这对我有用。

以下是我设法提取 links 的方法:

select
    _id,
    media_mime_type,
    substr(
        substr(thumb_image,instr(thumb_image,'IMG'),60)
        ,instr(substr(thumb_image,instr(thumb_image,'IMG'),23),'IMG')
        ,23)
from `messages`
where
    `key_remote_jid` like '%<your desired contact>%'
    and `media_mime_type` like '%image%';

我使用 DB Browser for SQLite 在 Windows 中执行此操作。

(Android) - 人们正在寻找的是 table message_media 中的 file_path。它指向相对于 /sdcard/WhatsApp/ 的文件,其 message_row_id 引用 messages table pk _id。组 (<..>@g.us) key_remote_jid 的 where 条件应输出所有组图像文件路径。

select mm.file_path
  from messages m
  join message_media mm on m._id = mm.message_row_id
 where m.key_remote_jid = 'xyz@g.us'
   and m.media_wa_type = 1; -- 1 = images

(缩略图预览在消息 table 本身的 raw_data 中存储为 blob 字节)