# 跨所有聊天记录进行调查

Canonical page: https://phishdestroy.github.io/TgWitness/zh/docs/cases/

跨频道、群组、私聊和机器人处理整个案件：收集、关联、重建并移交证据。

本操作指南通过一个虚构案例，完整演示了整个处理流程。其中使用了实际的采集、搜索、人员档案和导出功能。案例图仅作为文档示例；您的结论和案件登记将保存在应用程序之外。

已处理案例 / 支付目的地变更

### 一起事件。四段对话。一条需要还原的线索。

一个频道公告指向了一个机器人。一个行动小组在讨论一个新的支付链接。随后，在一次私下跟进中，该链接被再次提及。后来，该公告被编辑，一条群组消息也消失了。

每个版本是由谁发布的？该链接出现在哪里？哪个文件被保留下来了？有哪些变化，以及何时发生的？

有关历史数据加载、可选的 AI 源代码审查、MCP、OCR 以及外发 webhook 等功能，请参阅[“使用存档”部分](https://phishdestroy.github.io/TgWitness/zh/docs/archive/)。

## 1. 确保覆盖整个账户

1. 在专属工作区中[连接采集账户](https://phishdestroy.github.io/TgWitness/zh/docs/accounts/)。请在案件笔记中记录案件编号、账户 ID、工作区名称以及签名密钥指纹。
2. 开放**来源 → 观察范围 → 调查模式**。查看**“整个账户**”、“全部四种来源类型”和**“自身操作**”。此预设可保存新来源的配置文件及其最近 **200 条可见消息**。点击**“保存范围**”并完成范围确认。
3. 点击**“加载聊天**”。将源数据与该账户的对话列表进行比对，并检查排除项。在**“参数”→“从账户列表读取的聊天”**中，如有需要可调整初始列表限制：默认值为 1,000 个对话，最大可配置为 20,000 个。 超出限额的聊天记录将在其变为活跃状态时被发现。
4. 在**“记录设置**”中，选择并保存**“所有可见活动**”。检查附件类型、大小限制和可用磁盘空间。在依赖该设置之前，请先启动监控并验证一条受控的消息、编辑和删除操作。

频道群组私聊机器人

一个账户 / 一把签名密钥**所有选定的、账户可见的活动 → 整合为一本日志**

消息 · 编辑 · 删除通知 · 可见反应 · 成员活动 · 自身操作

“整个账户”涵盖该账户可访问的聊天记录，包括已配置的来源类型和排除项。秘密聊天不可用。新对话会在收到更新时自动添加；启用此模式不会自动下载每个现有聊天的完整历史记录。

## 2. 获取历史记录并保存文件

为整个调查建立一个来源登记表。为每个聊天记录分配一行，包含其数字 ID、标题、账户、访问权限/角色、实时开始时间、历史记录获取情况、媒体结果以及已知缺失信息。仅在核查相关结果后，才将该来源标记为“已获取”。

| 需求 | 面板中的操作 | 功能介绍 |
| --- | --- | --- |
| 已启用聊天记录的历史 | 来源 → 加载完整历史记录 | 当前主要功能：可获取的历史消息将进入工作区日志，支持暂停/恢复操作，并提供带签名的进度报告。[使用指南](https://phishdestroy.github.io/TgWitness/zh/docs/reference/history/)。 |
| 日志中的现有聊天记录 | 来源 → 记录设置 → 历史快照 | 最近可见的消息以签名观察记录的形式呈现。默认上限为 500 条；**通过“参数 → 最大历史快照**”可将其提高至 10,000 条。 |
| 某次聊天的当前可见完整历史记录 | 导出完整聊天记录 → 导出完整聊天记录，或 聊天 → 导出聊天记录 | 包含`chat.json`和`chat.html`的独立签名包。针对每个来源重复此操作；保留成功/失败的结果。 |
| 新聊天出现时的上下文 | 监控范围 → 当出现新的聊天或机器人时 | 包含一个来源档案以及多达 1,000 条最近可见的消息；调查模式下将选取 200 条。现有聊天记录不会追溯性地纳入此数据。 |
| 附件字节数 | 下载可见附件 + 各类附件的限制 | 请核对文件ID为`media.saved`的文件，及其SHA-256校验值和字节数。处于队列中、被跳过或下载失败的文件均不视为已保存文件。 |

完整聊天记录导出是一个独立的快照；它不会将整个聊天历史导入日志或联系人档案中。若需在 TgWitness 内搜索历史资料，请使用**“加载**所有已启用来源的**完整历史记录**”功能，或使用“限定范围的日志快照”。开始运行前，请先查看来源列表。

在实际案例中，可获取公告频道、操作群组、机器人对话及后续私信记录。保留发票附件的字节数据和哈希值。当前可获取的历史记录无法还原捕获前已被删除的消息，也无法还原 Telegram 不再返回的中间编辑记录。

## 3. 记录不断发展的对话以及您自身的行动

随着案件进展，请持续进行监控。将活跃的案件聊天标记为优先来源；在**“录制设置”→“重新检查**”中配置优先级及其他来源的重新检查。随着工作推进，请审查 `recheck.completed`、持续补录、FloodWait 以及媒体结果。

请使用**“聊天”→“个人资料”→“立即保存个人资料**”，以保留当前的来源描述、机器人命令以及 Telegram 返回的其他元数据。此来源个人资料与根据日志消息生成的联系人个人资料是分开的。

**作为案件调查的一部分，关注机器人或接受邀请**

1. 在**“聊天”→“打开 Telegram 链接**”中，请先保存预览。原始链接和返回的预览将作为签名记录保存。
2. 若调查需要，`**Join / open**`**命令将**加入或打开源数据，并使用其提供的启动参数启动一个机器人。待处理的加入请求将在记录中保持待处理状态。
3. 若需记录某项操作，请使用面板中的文本回复功能或支持的**“按压”按钮**控件。日志会保留`interaction.requested`和`interaction.result`，包括返回的回调文本或URL。

这些控制项会执行真实的 Telegram 操作。在其他 Telegram 应用中点击的回调按钮对收集器不可见；但机器人随后发送的消息或编辑操作可能被记录。网页应用、支付以及电话/位置请求均不在迷你客户端的监控范围内。

## 4. 追踪聊天记录中的人员、链接和文件

1. 打开**日志**，将来源过滤器保持为**“所有来源**”，并搜索特定短语、域名、用户名或已保存的标识符。打开每条匹配记录，并记录其聊天内容、消息 ID 和日志序列号。
2. 要查看相关聊天记录，请打开**“聊天”→“联系人”→“开启个人资料**”，然后选择某位联系人。查看姓名/用户名历史、回复关系、活动记录，以及**“还出现在……”中的**其他被监测到的聊天记录、提取的链接、钱包或电话号码。打开引用的日志记录。
3. 在该工作区中，追踪同一数字 Telegram 用户 ID 进入其他聊天群组。将匹配的姓名、钱包提及或相似的头像视为需要核查的线索。被提及的地址并不证明所有权；相似的头像也不证明是同一个人。
4. 比较不同记录中保存的附件 SHA-256 值。哈希值相等可证明保存文件的字节内容完全一致。在确定文件分享者之前，请先查阅相关的消息和发件人记录。

案例地图 / 追踪引用虚构案例 · 非实时图表

频道 / 公告**原文 → 编辑后的目标文本**

记录 #101、#188 消息 #84 · 未标注发件人

组 / 运营**用户 71001 发布了新链接**

记录 #146 · 消息 #309 已保存文件收据 #151

机器人 / 订单对话**一个按钮指向该目标页面**

记录 #173 · 消息 #12 “返回”按钮的元数据

私密 / 后续**用户 71001 重复了收件人信息**

记录 #205 · 消息 #922 已保存文件收据 #209

四个聊天群组提供了不同的观察结果。请追踪每条连接的源记录；在未确认发件人身份的情况下，请勿将该频道帖子归因于用户 71001。

本操作指南中的数字 ID 和记录引用均为虚构。本图说明了分析师如何利用搜索、个人资料和记录审查功能开展工作；该应用程序不会生成全局调查图谱。

| 连接 | 辅助观察 | 保留结论 |
| --- | --- | --- |
| 同一 Telegram 账号 | 用户 ID 71001 所在的群组 #146 和私聊 #205 | 两个聊天中显示的发件人 ID 完全一致。其真实身份仍是另一个问题。 |
| 重复的目标 | `pay.example.invalid/new` 在 #146，按钮元数据 #173，编辑后的帖子 #188 和 #205 | 同一目标在四个已观察到的上下文中出现。仅凭这一点尚无法确定其控制方。 |
| 相同文件字节数 | 已完成的媒体收据 #151 和 #209 中 SHA-256 值完全一致 | 这两份被保存的附件在字节层面完全一致。仅凭文件名或缩略图无法证明这一点。 |

用户档案涵盖在该聊天中保存了消息的作者，并将其与*同一工作区日志*中的其他聊天关联起来。这些档案并非完整的成员名录。头像哈希值来自独立的本地缓存；档案引用数量可在**“参数”→“每个事实引用的记录数”**中进行配置。

## 5. 还原事件序列并标注缺失部分

在**“聊天**”页面，查看已保存的版本及其**“日志记录 #…”**链接。在**“日志**”页面，使用**“所有来源**”以及**“编辑”**、**“删除**”和**“覆盖”功能**。结合 Telegram 提供的日期和采集器的观察时间，构建案件时间线。

1. 09:00 · #101**捕获的频道帖子**

   保留了原始目标。
2. 09:12 · #146 / #151**群组提供了一个不同的链接**

   用户 71001 发布了该内容；附件下载已完成。
3. 09:16 · #173**机器人显示相同的目标地址**

   保存的键盘元数据中包含该链接。
4. 09:20 · #188**频道公告变更**

   原始内容和编辑后的内容均予以保留。
5. 09:24 · #205 / #209**私下跟进时再次强调这一点**

   保存的附件与 #151 具有相同的完整 SHA-256 值。
6. 09:28 · #231**群组删除通知已发送**

   先前的观察结果依然成立：既未提供删除者信息，也未提供确切的删除时间。

示例性的观察时间及参考信息。其他日志记录发生在这些条目之间。

日志序列按接收顺序排列，未必与 Telegram 中的原始操作顺序一致。较新的实时消息之后可能会出现较早的历史快照。请将实时观察记录、快照、恢复的消息、删除通知以及“重新检查时缺失”的情况区分开来。凡是覆盖范围出现缺口之处，均应明确标注“未知时间段”；后续的快照并不会消除该缺口。

## 6. 将此案例扩展至其他收集账户

为每个独立账户添加一个工作区，并重复执行范围和历史记录的清点工作。记录每个账户的成员身份/角色及签名密钥指纹。确保标识符由工作区和聊天室限定：相同的消息编号并非跨账户的通用标识符。

在您的案件笔记或分析工具中对比相关观察结果时，请保留每行对应的账户和日志引用信息。TgWitness 目前不提供跨工作区的全局搜索、合并时间线、联系人图谱或案件档案功能。对单个频道或超级群组进行多账户全量导出是一项独立功能；这并非所有账户日志的合并。

在长期工作中，应添加[独立见证人](https://phishdestroy.github.io/TgWitness/zh/docs/witness/)以保留先前的边界。利用受控交付试点项目，验证账户的捕获路径和可见性。

## 7. 提供完整且可核查的案件资料包

从每个工作区导出一个带签名的日志 ZIP 文件。该文件包含完整的记录日志，不受面板搜索过滤器的影响。单独导出相关人员的个人资料，保留每个完整的聊天记录包，并保存完整的附件证据。

```
CASE-001/                         # assembled by the analyst
  case-notes.md                   # question, findings, alternative explanations
  sources.csv                     # every chat, role, acquisition result and gap
  timeline.csv                    # account + chat + message + seq + both times
  workspace-A/
    evidence.zip                  # complete signed observation journal
    retained-checkpoint.json
    profiles-operations.json      # separately signed people profiles
    history-channel.zip           # signed current-history export
    history-group.zip
    verification.txt
  workspace-B/                    # separate journal and trusted fingerprint
  witness/                        # retained checks, journal and signed posts
  SHA256SUMS                      # hashes of the delivered files
```

通过独立信道保存可信指纹。从可信安装环境出发，根据其自身工作区身份对每个证据进行验证：

```
python -m tgwitness.verify evidence.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --checkpoint retained-checkpoint.json
python -m tgwitness.verify profiles-operations.json --fingerprint TRUSTED_PUBLIC_KEY_SHA256 --evidence evidence.zip
python -m tgwitness.verify history-channel.zip --fingerprint TRUSTED_PUBLIC_KEY_SHA256
```

查看实际验证结果，保留原始文件，并将覆盖报告、采集失败记录及传输记录与您的调查结果一并保存。顶级案件文件夹和分析师结论在外部汇总生成；每个 TgWitness 证据文件均带有独立的签名。

## 其他调查也可采用相同方法

**由机器人引发的订单或支付纠纷**

**问题：**该机器人曾做出过什么承诺？提供了哪个按钮的跳转目标？之后发生了什么变化？

**追踪路径：**频道入站消息 → 保存的机器人链接预览 → 机器人启动参数 → 消息及键盘输入记录 → 任何面板发出的回调收据 → 群组/私聊后续消息。将每个目标与相应的源记录进行匹配；保留个人资料描述及完整的媒体内容。

**提供内容：**所观察到的要约及回应的时间线、来源参考信息以及经过验证的导出数据。显示的支付链接并不构成支付已发生的证据。

**因跨聊天室事件而被删除的消息**

**问题：**在相关消息消失之前，已经观察到了什么？

**追踪路径：**所有受影响的聊天记录 → 原始消息 → 已送达的编辑内容 → 删除通知或后续复查时发现的消息缺失结果 → 已保存的附件 → 事件相关的覆盖范围。将独立账户的观察结果与其声明的可见性进行对比。

**呈现内容：**一系列被保留的版本以及明确标注的未知时间段。切勿将缺失的历史消息视为某人将其删除的证据。

**某参与者在多个聊天群中使用了不同的昵称**

**问题：**尽管名称发生了变化，哪些被观察到的活动属于同一个 Telegram 账号？

**追踪路径：**数字发件人 ID → 已保存的名称/用户名历史记录 → 回复 → 工作区内的其他聊天记录 → 被提及的目标及已保存文件。对每条声称的连接检查源记录；将相似账户区分开来。

**交付内容：**包含带引用来源的账户活动时间线，以及关于关系链的独立假设。名称相似性和头像 pHash 仅为线索，并非身份证明。
