
🔪 Dumper et ripper pour bots Telegram par token. Outil CLI forensique avec interface web
Extraction facile de tout le contenu d'un bot Telegram.
Entrée : uniquement le token du bot.
Sortie : nom et infos du bot, historique texte et médias de tous les chats, infos et photos des utilisateurs du bot.
Ceci est une implémentation en Python.
🚀 Version Golang rapide par ScBoln.
Une interface de navigation de type Telegram-Web pour un dump : liste des chats, historique complet des messages avec médias intégrés, profils utilisateurs avec carrousel de photos, et recherche globale sur toutes les conversations à la fois. Mode live pris en charge : il exécute le dumper en arrière-plan et diffuse les nouveaux messages vers le navigateur en temps réel.
Cas d'usage — pentest d'un token de bot fuité. Les tokens de bots Telegram apparaissent constamment lors d'un engagement — codés en dur dans une application mobile/desktop, commités dans un dépôt, ou présents dans un log CI, un fichier de configuration ou un bundle côté client. À lui seul, un token ressemble à une vulnérabilité de faible sévérité ; le charger ici révèle le véritable rayon d'impact. Pour un bot interne (support, assistant IT/DevOps, assistant IA), c'est l'ensemble des conversations des employés avec celui-ci — noms d'hôtes internes, profils VPN, identifiants et détails d'infrastructure — consultables et recherchables, ce qui permet de délimiter l'impact et de documenter la vulnérabilité dans votre rapport.

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
Ouvrez http://127.0.0.1:8010 et collez un token de bot pour sélectionner son dossier de dump. La consultation en lecture seule est sans authentification, locale, et ne nécessite aucun identifiant API. Le mode live nécessite en plus API_ID/API_HASH depuis my.telegram.org, passés via l'environnement — jamais intégrés dans l'image :
# 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
Les variables d'environnement PORT et HOST remplacent les valeurs par défaut (8010, 127.0.0.1).
--down / --start-from-id).--listen-only) : reçoit les nouveaux messages en temps réel et propose de dumper l'historique vers le bas à partir du premier id observé.[from:USER][group:CHAT]. Les messages privés sortants du bot sont étiquetés avec [to:USER].--listen-only les dumpera en temps réel. Avec le mode confidentialité activé (par défaut), le bot ne voit que les commandes, les mentions et les réponses.requirements.txt pour la version épinglée)API_ID et 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...
Parcourt les ids 1..∞ vers le haut par lots de 200, en téléchargeant chaque message, tous les médias et toutes les photos de profil utilisateur. Par défaut, le dumper continue d'écouter les nouveaux messages entrants après la fin du dump. Pour quitter immédiatement après le dump de l'historique (idéal pour les scripts et les tâches cron), passez --no-listen.
./dumper.py --token 12345678:ABCe2rPVteUWZ7wLeCqCb3CH3ilUY_fLabc
Pour un bot actif, le parcours vers le haut rencontre une longue série d'anciens ids purgés (supprimés/expirés) et abandonne. Parcourir vers le bas depuis l'id le plus récent est bien plus productif. --down sonde automatiquement la borne supérieure (puissances de 10 jusqu'à 10⁹) et démarre depuis l'id non vide le plus élevé trouvé :
./dumper.py --token TOKEN --down
Remarque. Telegram ne conserve pas indéfiniment l'historique des messages d'un bot. Empiriquement, seuls les quelques centaines de milliers de derniers messages restent accessibles — dans nos tests, un bot actif exposait environ les 500K derniers messages avant que
messages.getMessagesne commence à ne retourner que desMessageEmptypour les ids plus anciens. Si votre bot a historiquement traité plus de trafic que cela, l'historique plus ancien a simplement disparu côté serveur et aucun flag ne le récupérera.
Si vous connaissez déjà un id de message récent (par ex. un que vous avez vu en temps réel), vous pouvez ignorer la sonde et démarrer exactement à partir de celui-ci :
./dumper.py --token TOKEN --start-from-id 11922524
Ne rien dumper ; simplement observer ce qui arrive. Au premier message entrant, le script proposera de démarrer un dump vers le bas à partir de cet id :
./dumper.py --token TOKEN --listen-only
Utile lorsque vous avez seulement besoin d'une liste de qui a parlé au bot — pas de zips, pas de jpegs, pas de *_history.txt par chat.
./dumper.py --token TOKEN --down --users-csv --no-photos --no-media --no-history
Sortie : <bot_id>/users.csv avec les colonnes id, username, first_name, last_name, phone, lang_code, bot, premium, verified, scam, fake.
Le parcours vers le bas affiche Requesting message ids X..Y ... pour chaque lot. Si l'exécution est interrompue, redémarrez depuis la dernière borne inférieure affichée :
./dumper.py --token TOKEN --start-from-id <Y>
Lots plus petits → retour plus rapide dans le log et fenêtre de récupération plus courte après un FloodWait. Lots plus grands → moins d'allers-retours lors du scan de plages d'ids clairsemées / purgées. Des valeurs jusqu'à 1000 fonctionnent bien en pratique.
./dumper.py --token TOKEN --down --batch-size 50
./dumper.py --token TOKEN --down --batch-size 500
./dumper.py --token TOKEN --down --batch-size 1000