Acquisizione forense di chat Telegram

Acquisisci chat Telegram con validità forense: messaggi, media, documenti MTProto mirror, rendering HTML, rilevamento messaggi eliminati e timestamp RFC 3161.

Il modulo Telegram di C.E.R.T.O. Desktop acquisisce conversazioni da Telegram Web con piena validità forense. L'estrazione avviene tramite una tecnica a tripla sorgente: Mirror JS (messaggi decifrati dal worker MTProto), DOM (testo visibile nel browser) e Cache API (media e foto profilo). I media vengono scaricati con range request a blocchi da 512 KB. Per gruppi e canali, il sistema rileva automaticamente i gap nei message ID, segnalando potenziali messaggi eliminati. Il fascicolo include una chat HTML navigabile con lightbox, video recording della sessione, cifratura escrow AES-256 e marca temporale RFC 3161.

Costo: 1 slot per chat acquisita — vedi pacchetti slot

Come funziona l'acquisizione Telegram

L'acquisizione si basa su Telegram Web: l'utente effettua il login tramite QR code scansionato con il proprio smartphone e C.E.R.T.O. accede alla sessione in modalità esclusivamente di lettura. Il sistema utilizza il Chrome DevTools Protocol per intercettare il traffico di rete e accede direttamente al worker MTProto del browser per ottenere i messaggi già decifrati, senza necessità di gestire le chiavi di cifratura.

Il modulo è progettato per acquisizioni in ambito giudiziario: contenziosi civili, procedimenti penali, indagini difensive e CTU che coinvolgono conversazioni Telegram, gruppi o canali.

Trasporto cifrato: Telegram utilizza il protocollo MTProto 2.0 con cifratura AES-256-IGE su WebSocket Secure (WSS). C.E.R.T.O. non intercetta il traffico cifrato, ma accede ai messaggi dopo la decifratura nel browser, attraverso i mirror interni del worker MTProto (port.mirrors.messages). I dati acquisiti sono in chiaro perché già decifrati dal client Telegram Web.

Cosa acquisisce il modulo Telegram

Per ogni chat selezionata, il modulo produce un fascicolo forense completo contenente messaggi, media, rendering HTML interattivo, intercettazione di rete e dati di sessione.

Elemento acquisito Dettagli
Messaggi (tripla sorgente)Estrazione da Mirror JS (worker MTProto, dati strutturati e decifrati), DOM (testo visibile, autore, timestamp) e Cache API (media in cache del browser). Mirror JS ha priorità, DOM è il fallback per il testo.
Media scaricatiFoto (blob URL o Media Viewer o Cache API), video (stream URL con range request 512 KB, limite 100 MB), documenti (stream MTProto), messaggi vocali/audio (intercettazione download Electron).
Chat HTML con lightboxFile HTML autocontenuto con stile Telegram: bolle messaggi, media inline (foto, video, PDF embed), lightbox CSS-only per le immagini, colori autore hash-based (10 colori), separatori data, lazy loading.
Gap detection message IDPer gruppi e canali: analisi della sequenza dei message ID per rilevare ID mancanti (potenziali messaggi eliminati, rimossi da admin o auto-cancellati). Non applicabile alle chat 1:1 (ID globali).
Video recording sessioneCattura continua a 1 FPS della sessione Telegram Web in formato JPEG, convertita in video WebM con FFmpeg.
Intercettazione reteHAR completo delle richieste HTTP e log degli eventi CDP (Chrome DevTools Protocol). Cattura WebSocket frame per chat.
Dati di sessioneAuth key per Data Center, server salt, userId, phone, username, cookie, localStorage e sessionStorage completi. Dump IndexedDB di tutti i database di Telegram Web.
Mappa utentiDizionario userId → nome, cognome, username, telefono, flag bot. Estratto dal mirror MTProto con fallback a ricostruzione da IndexedDB.
Hash crittografici (x4)MD5, SHA-1, SHA-256 e SHA-512 per ogni file del fascicolo. Registri separati per tipo (immagini, video, documenti, JSON, screenshot).
Contesto di sistemaSincronizzazione NTP (offset documentato), IP pubblico del client, snapshot dei processi in esecuzione (ps aux / tasklist).
Report forenseDocumento TXT e PDF con account, interlocutori, lista chat, riepilogo, gap detection, inventario hash e catena di custodia.
Cifratura escrow + timestampFascicolo cifrato con AES-256-CBC escrow (chiave custodita dal server). Marca temporale RFC 3161 (FreeTSA o InfoCert eIDAS).

Estrazione messaggi: Mirror JS, DOM e Cache API

Il modulo utilizza una strategia di estrazione a tripla sorgente con priorità definita, per massimizzare la completezza e offrire ridondanza forense.

Mirror JS (primaria)

Accesso diretto al worker MTProto del browser tramite port.mirrors.messages[peerId]. I messaggi sono già decifrati e disponibili come oggetti JavaScript strutturati.

  • Campi: id, date, fromId, message, media, out, views, replyToId, fwdFromId
  • Sorgente più completa e affidabile
  • Include metadati media (mediaKey, size, mimeType)

DOM (secondaria)

Estrazione del testo visibile dalle bolle messaggi nel DOM di Telegram Web durante lo scroll progressivo della chat.

  • Campi: mid, text, authorName, timestamp, classes
  • Fallback per il testo quando il mirror è vuoto
  • Utile per nomi autore e formattazione visibile

Cache API (terziaria)

Estrazione di media e foto profilo dalla cache del browser (caches.open('cachedFiles')).

  • Foto profilo dei partecipanti
  • Foto di album non visibili nella griglia media
  • Fallback con download MTProto diretto

L'acquisizione della cronologia messaggi avviene in due fasi di scroll: scroll UP (fino a 2000 tentativi, per caricare la cronologia completa nel mirror MTProto) e scroll DOWN (per estrarre il testo DOM visibile). Il conteggio messaggi viene monitorato in tempo reale fino alla stabilizzazione.

Tripla estrazione Mirror JS, DOM e Cache API con fusione dati

Download media: foto, video e documenti

Il download dei media utilizza metodi diversi per tipo di contenuto, adattandosi all'architettura di Telegram Web che serve i file tramite Service Worker con range request.

Tipo media Metodo di download Formato output
FotoBlob URL dal DOM (full-size, naturalWidth > 200px) → fallback Media Viewer (lightbox) → fallback Cache API → fallback download MTProto direttophoto_{mid}.jpg|png|webp
VideoStream URL dal Service Worker con range request a blocchi da 512 KB. Dimensione estratta dai parametri JSON dell'URL. Limite: 100 MB per videovideo_{mid}.mp4|webm|mov
DocumentiStream URL MTProto con parametri inputDocumentFileLocation (dcId, documentId, accessHash, fileReference). Range request 512 KBdoc_{mid}.bin o nome originale
Audio / vocaliIntercettazione download Electron (session.on('will-download')). Fallback a stream URLFormato originale (ogg, mp3, m4a)
Foto profiloCache API del browser (cachedFiles), ricerca per pattern photo_{photoId}_{sizeType}profile_{peerId}_{photoId}.jpg

Per gruppi e canali, il download utilizza la griglia media del pannello laterale: il sistema apre il pannello destro, clicca sulla tab Media, scorre la griglia per caricare tutti gli elementi, poi apre ciascun media nel viewer per scaricare la versione full-size.

Chat HTML navigabile con lightbox

Per ogni chat acquisita, il sistema genera un file HTML autocontenuto che riproduce la conversazione con uno stile simile a Telegram Web. Il file è navigabile offline, senza dipendenze esterne.

Layout della chat

  • Bolle messaggi: blu (in uscita), grigio (in entrata)
  • 10 colori autore determinati da hash (consistenti in tutta la chat)
  • Timestamp HH:MM per ogni messaggio
  • Separatori di data (DD/MM/YYYY) tra giorni diversi
  • URL convertiti in link cliccabili
  • Design responsive (mobile-friendly)

Media inline e lightbox

  • Foto: thumbnail inline con click → lightbox CSS-only a schermo intero
  • Video: player HTML5 con controlli nativi e preload metadata
  • PDF: embed inline nel messaggio
  • Documenti: icona colorata per estensione (PDF rosso, Excel verde, Word blu, ZIP arancione) + link download
  • Lightbox: overlay con metadati (autore, data, ora, caption, filename) e pulsante chiudi

Chat HTML navigabile con bolle messaggi, media inline e lightbox per le immagini

Rilevamento messaggi eliminati (gap detection)

Nei gruppi e canali Telegram, i message ID sono sequenziali all'interno della chat. Il sistema analizza la sequenza di ID acquisiti e segnala ogni ID mancante tra il minimo e il massimo rilevato.

Come funziona

  • Si estraggono tutti i message ID dalla chat acquisita
  • Si calcola la sequenza attesa dal minimo al massimo ID
  • Ogni ID presente nella sequenza attesa ma assente nei messaggi acquisiti viene marcato come mancante
  • I gap vengono salvati in metadata.json come array missingIds e riportati nel report forense

Possibili cause di un gap

  • Messaggio eliminato dall'autore
  • Messaggio rimosso da un amministratore
  • Messaggio di servizio (aggiunta/rimozione membro, cambio titolo)
  • Messaggio con auto-cancellazione scaduto
  • Messaggio programmato mai pubblicato

Limitazione: la gap detection si applica solo a gruppi e canali, dove i message ID sono sequenziali per chat. Nelle chat individuali (1:1) gli ID sono globali sull'intero account, quindi la presenza di gap è normale e non indica messaggi eliminati.

Rilevamento gap nei message ID: analisi della sequenza per evidenziare messaggi potenzialmente eliminati

Dati di sessione e mappa utenti

Il modulo acquisisce i dati tecnici della sessione Telegram Web che documentano l'identità dell'account, lo stato dell'autenticazione MTProto e la mappa completa degli utenti conosciuti.

Autenticazione MTProto

  • Auth key per ogni Data Center (hex)
  • Server salt per DC (hex)
  • User ID numerico
  • Numero di telefono
  • Username (@handle)
  • Data Center di appartenenza

Mappa utenti (UsersMap)

  • Dizionario userId → profilo completo
  • Nome, cognome, username, telefono
  • Flag bot
  • Sorgente: mirror MTProto (primaria) o ricostruzione da IndexedDB (fallback)
  • Usata per risolvere i nomi nella chat HTML

Storage del browser

  • Cookie completi
  • localStorage (dump completo)
  • sessionStorage (dump completo)
  • IndexedDB: dump di tutti i database di Telegram Web (account, stores, sample)

Il fascicolo forense prodotto

Ogni acquisizione genera un archivio cifrato contenente tutti gli artefatti forensi, organizzati per chat e per tipo.

{acquisition-id}/
├── chat/
│   └── [NomeChat]/ — directory per ogni chat acquisita
│      ├── mirror-messages.json — messaggi dal mirror MTProto
│      ├── messages.json — estrazione DOM
│      ├── messages-readable.txt — trascrizione leggibile
│      ├── chat.html — rendering HTML con lightbox
│      ├── metadata.json — conteggi, gap detection, metodo
│      └── media/
│         ├── photo_{mid}.jpg — foto scaricate
│         ├── video_{mid}.mp4 — video (max 100 MB)
│         ├── doc_{mid}.bin — documenti
│         └── profile-photos/ — foto profilo partecipanti
├── json/
│   ├── auth-session-data.json — auth key e server salt per DC
│   ├── users-map.json — dizionario userId → profilo
│   ├── chat-list.json — lista completa chat dell'account
│   ├── telegram-session-info.json — metadati sessione
│   ├── local-storage.json — dump localStorage
│   ├── session-storage.json — dump sessionStorage
│   ├── indexeddb-tweb-*.json — dump database IndexedDB
│   ├── file-manifest.json — inventario file con dimensioni
│   ├── {id}-hashes.json — manifest SHA-256 globale
│   └── timestamp-info.json — metadati marca temporale
├── screenshot-recorded/
│   ├── frame_00000_0ms.jpg ... — frame catturati a 1 FPS
│   ├── recording-info.json — metadati registrazione
│   └── session-recording.webm — video della sessione
├── registri/ — hash separati per tipo
│   ├── registro-immagini.txt
│   ├── registro-video.txt
│   ├── registro-files.txt
│   ├── registro-json.txt
│   └── registro-screenshot.txt
├── freetsa-cacert/
│   ├── freetsa-cacert.pem — CA per verifica offline
│   └── tsr-verifica.txt — comando OpenSSL
├── rapporto-acquisizione.txt — report forense
├── rapporto-acquisizione.pdf — report PDF
├── rapporto-acquisizione.tsr — marca temporale RFC 3161
├── network-capture.har — log HTTP/WebSocket in formato HAR
├── rapporto-processi-sistema.txt — snapshot processi attivi
├── acquisizione-log.txt — log cronologico
├── verifica-integrita.sh — script verifica macOS/Linux
└── verifica-integrita.bat — script verifica Windows

Contenuto del report forense

Il documento rapporto-acquisizione.pdf include:

  • Account Telegram: nome, telefono, username, user ID, Data Center
  • Metodo di autenticazione (QR code) e modalità di accesso (read-only)
  • Tecnica di estrazione: Mirror JS + DOM + Cache API + Media Viewer
  • Sicurezza trasporto: MTProto 2.0, AES-256-IGE, WSS
  • Sincronizzazione NTP con offset documentato e IP pubblico
  • Dati di autenticazione: auth key per DC, server salt, conteggio chiavi
  • Elenco interlocutori con numeri di telefono, username e user ID
  • Lista completa delle chat visibili (prime 50 con tipo: canale/gruppo/chat)
  • Riepilogo: chat acquisite, messaggi totali, media scaricati/trovati, dimensione
  • Dettaglio per chat: tipo, peer ID, messaggi, media, message ID mancanti
  • Registri hash per tipo con MD5, SHA-1, SHA-256, SHA-512
  • Hash dei file di sistema e hash dei registri stessi

Struttura del fascicolo forense prodotto dall'acquisizione Telegram

Integrità, cifratura escrow e marca temporale

Come per il modulo WhatsApp, il fascicolo Telegram è protetto dalla cifratura escrow AES-256-CBC con chiave custodita dal server.

Hash per file (x4)

MD5, SHA-1, SHA-256, SHA-512 per ogni file del fascicolo. Registri separati per tipo (immagini, video, documenti, JSON, screenshot).

Cifratura escrow

ZIP e TAR cifrati con AES-256-CBC. Chiave e IV forniti dal server al momento dello sblocco. I file in chiaro vengono eliminati dopo la cifratura.

Marca temporale

RFC 3161 su rapporto-acquisizione.txt, applicata dopo la finalizzazione di tutti gli hash. FreeTSA (base) o InfoCert eIDAS (qualificata).

Script di verifica

verifica-integrita.sh (bash) e .bat (Windows) per ricalcolare SHA-256 di tutti i file e verificare la marca temporale con OpenSSL.

Resilienza: l'acquisizione è progettata per gestire errori a livello di singola chat o singolo media senza interrompere l'intero processo. Se una chat fallisce, il sistema registra l'errore e prosegue con la successiva. Il supporto per pausa e cancellazione consente di sospendere e riprendere l'acquisizione in qualsiasi momento. Lo stato finale è COMPLETATA (nessun errore), PARZIALE (alcuni errori) o FALLITA.

Acquisisci chat Telegram con valore forense

Scarica C.E.R.T.O. Desktop, effettua il login via QR code e ottieni un fascicolo forense completo delle conversazioni. 1 slot per chat.

Registrati e scarica Panoramica C.E.R.T.O. Desktop

Ultima revisione

il 07/04/2026 alle 16:25:58

Argomenti

acquisizione forense, Telegram, chat, messaggistica, prova digitale, MTProto