
🔪 Dumper e ripper per bot Telegram tramite token. Strumento CLI forense con interfaccia web
Facile dump di tutto ciò che riguarda un bot Telegram.
Input: solo il token del bot.
Output: nome e info del bot, cronologia testuale e media di tutte le chat, info e foto degli utenti del bot.
Questa è un'implementazione in Python.
🚀 Versione Golang veloce di ScBoln.
Un'interfaccia browser in stile Telegram-Web per un dump: elenco chat, cronologia completa dei messaggi con media inline, profili utente con carosello di foto e ricerca globale su tutte le conversazioni contemporaneamente. Supportata la modalità live: esegue il dumper in background e trasmette i nuovi messaggi al browser in tempo reale.
Caso d'uso — pentesting di un token bot trapelato. I token dei bot Telegram saltano fuori continuamente durante un engagement — hard-coded in un'app mobile/desktop, committati in un repo, oppure presenti in un log CI, in un file di configurazione o in un bundle lato client. Da solo un token sembra una vulnerabilità di bassa severità; caricarlo qui mostra il reale raggio d'azione. Per un bot interno (support desk, helper IT/DevOps, assistente AI) si tratta di ogni conversazione dei dipendenti con esso — hostname interni, profili VPN, credenziali e dettagli infrastrutturali — consultabile e ricercabile, così puoi valutare l'impatto e documentare il finding nel tuo report.

docker run --rm -p 8010:8010 -v "$PWD:/data" soxoj/telegram-bot-dumper-web
docker compose up --build # builds and serves on http://127.0.0.1:8010
pip install -r requirements.txt
python webapp/server.py # serves the current directory's dumps on :8010
Apri http://127.0.0.1:8010 e incolla un token bot per selezionare la sua cartella di dump. La visualizzazione in sola lettura è senza autenticazione, locale e non richiede credenziali API. La modalità live richiede inoltre API_ID/API_HASH da my.telegram.org, passati tramite l'ambiente — mai incorporati nell'immagine:
# one-off container
docker run --rm -p 8010:8010 -v "$PWD:/data" \
-e API_ID=123456 -e API_HASH=abc... soxoj/telegram-bot-dumper-web
# or with docker compose: put them in a local .env (see .env.example)
cp .env.example .env && $EDITOR .env && docker compose up
Le variabili d'ambiente PORT e HOST sovrascrivono i valori predefiniti (8010, 127.0.0.1).
--down / --start-from-id) sugli id dei messaggi.--listen-only): riceve nuovi messaggi in tempo reale e propone di eseguire il dump della cronologia verso il basso a partire dal primo id osservato.[from:USER][group:CHAT]. I DM in uscita del bot sono etichettati con [to:USER].--listen-only li dumperà in tempo reale. Con la privacy mode abilitata (predefinita) il bot vede solo comandi, menzioni e risposte.requirements.txt per la versione bloccata)API_ID e API_HASHpip install -r requirements.txt
# Telegram API credentials from https://my.telegram.org (read from the environment)
export API_ID=123456
export API_HASH=abc...
Percorre gli id da 1..∞ verso l'alto in batch da 200, scaricando ogni messaggio, tutti i media e tutte le foto profilo degli utenti. Per impostazione predefinita, il dumper continua ad ascoltare i nuovi messaggi in arrivo dopo il termine del dump. Per uscire immediatamente dopo il dump della cronologia (ideale per script e cron job), passa --no-listen.
./dumper.py --token 12345678:ABCe2rPVteUWZ7wLeCqCb3CH3ilUY_fLabc
Per un bot attivo la scansione verso l'alto incontra una lunga serie di vecchi id eliminati/scaduti e si arrende. Percorrere verso il basso dall'id più recente è molto più produttivo. --down sonda automaticamente il limite superiore (potenze di 10 fino a 10⁹) e parte dall'id non vuoto più alto che trova:
./dumper.py --token TOKEN --down
Nota. Telegram non conserva la cronologia dei messaggi dei bot per sempre. Empiricamente, solo gli ultimi qualche centinaio di migliaia di messaggi rimangono accessibili — nei nostri test un bot molto attivo esponeva all'incirca gli ultimi 500K messaggi prima che
messages.getMessagesiniziasse a restituire soloMessageEmptyper gli id più vecchi. Se il tuo bot ha storicamente gestito più traffico di così, la cronologia più vecchia è semplicemente sparita lato server e nessun flag la recupererà.
Se conosci già un id di messaggio recente (ad esempio uno che hai visto in tempo reale), puoi saltare la sonda e partire esattamente da esso:
./dumper.py --token TOKEN --start-from-id 11922524
Non esegue alcun dump; osserva solo ciò che arriva. Al primo messaggio in arrivo lo script proporrà di avviare un dump verso il basso da quell'id:
./dumper.py --token TOKEN --listen-only
Utile quando ti serve solo un elenco di chi ha parlato con il bot — niente zip, niente jpeg, niente *_history.txt per chat.
./dumper.py --token TOKEN --down --users-csv --no-photos --no-media --no-history
Output: <bot_id>/users.csv con colonne id, username, first_name, last_name, phone, lang_code, bot, premium, verified, scam, fake.
La scansione verso il basso stampa Requesting message ids X..Y ... per ogni batch. Se l'esecuzione viene interrotta, riparti dall'ultimo limite inferiore stampato:
./dumper.py --token TOKEN --start-from-id <Y>
Batch più piccoli → feedback più rapido nel log e finestra di recupero più breve dopo un FloodWait. Batch più grandi → meno round-trip quando si scansionano intervalli di id sparsi / eliminati. Valori fino a 1000 funzionano bene in pratica.
./dumper.py --token TOKEN --down --batch-size 50
./dumper.py --token TOKEN --down --batch-size 500
./dumper.py --token TOKEN --down --batch-size 1000