
🔪 Dumper & Ripper für Telegram-Bots per Token. Forensisches CLI-Tool mit Web-Oberfläche
Einfaches Dumpen aller Telegram-Bot-Daten.
Eingabe: nur Bot-Token.
Ausgabe: Bot-Name & -Info, Textverlauf & Medien aller Chats, Infos & Fotos der Bot-Nutzer.
Dies ist eine Python-Implementierung.
🚀 Schnelle Golang-Version von ScBoln.
Eine Telegram-Web-ähnliche Browser-Oberfläche für einen Dump: Chat-Liste, vollständiger Nachrichtenverlauf mit Inline-Medien, Nutzerprofile mit Foto-Karussell und globale Suche über alle Konversationen gleichzeitig. Live-Modus wird unterstützt: Er führt den Dumper im Hintergrund aus und streamt neue Nachrichten in Echtzeit an den Browser.
Anwendungsfall — Pentesting eines geleakten Bot-Tokens. Telegram-Bot-Tokens tauchen bei einem Engagement ständig auf — fest kodiert in einer Mobile-/Desktop-App, in ein Repo committet oder in einem CI-Log, einer Konfigurationsdatei oder einem clientseitigen Bundle. Für sich genommen sieht ein Token wie ein Finding mit geringer Schwere aus; lädt man es hier, zeigt sich der tatsächliche Blast Radius. Bei einem internen Bot (Support-Desk, IT/DevOps-Helfer, KI-Assistent) ist das jede Mitarbeiterkonversation mit ihm — interne Hostnamen, VPN-Profile, Zugangsdaten und Infrastrukturdetails — durchsuchbar und durchblätterbar, sodass du die Auswirkungen eingrenzen und das Finding in deinem Bericht belegen kannst.

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
Öffne http://127.0.0.1:8010 und füge einen Bot-Token ein, um seinen Dump-Ordner auszuwählen. Das schreibgeschützte Ansehen ist authentifizierungsfrei, lokal und benötigt keine API-Zugangsdaten. Der Live-Modus benötigt zusätzlich API_ID/API_HASH von my.telegram.org, übergeben über die Umgebung — niemals ins Image eingebacken:
# 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
Die Umgebungsvariablen PORT und HOST überschreiben die Standardwerte (8010, 127.0.0.1).
--down / --start-from-id).--listen-only): neue Nachrichten in Echtzeit empfangen und anbieten, den Verlauf abwärts ab der ersten beobachteten ID zu dumpen.[from:USER][group:CHAT] getaggt. Ausgehende Bot-DMs werden mit [to:USER] getaggt.--listen-only dumpt sie in Echtzeit. Mit aktiviertem Privacy-Modus (dem Standard) sieht der Bot nur Befehle, Erwähnungen und Antworten.requirements.txt für die gepinnte Version)API_ID und API_HASH zu erhaltenpip install -r requirements.txt
# Telegram API credentials from https://my.telegram.org (read from the environment)
export API_ID=123456
export API_HASH=abc...
Durchläuft die IDs 1..∞ aufwärts in Batches von 200 und lädt jede Nachricht, alle Medien und alle Nutzerprofilfotos herunter. Standardmäßig hört der Dumper nach Abschluss des Dumps weiter auf neue eingehende Nachrichten. Um direkt nach dem Verlaufs-Dump zu beenden (ideal für Skripte und Cron-Jobs), übergib --no-listen.
./dumper.py --token 12345678:ABCe2rPVteUWZ7wLeCqCb3CH3ilUY_fLabc
Bei einem aktiven Bot trifft der Aufwärtsdurchlauf auf eine lange Strecke gelöschter (entfernter/abgelaufener) alter IDs und gibt auf. Das Abwärtsdurchlaufen ab der neuesten ID ist deutlich produktiver. --down sondiert automatisch die Obergrenze (Zehnerpotenzen bis 10⁹) und startet bei der höchsten nicht-leeren ID, die es findet:
./dumper.py --token TOKEN --down
Hinweis. Telegram bewahrt den Nachrichtenverlauf von Bots nicht ewig auf. Empirisch bleiben nur die letzten paar hunderttausend Nachrichten zugänglich — in unseren Tests gab ein stark frequentierter Bot etwa die letzten 500K Nachrichten preis, bevor
messages.getMessagesfür ältere IDs nur nochMessageEmptyzurückgab. Wenn dein Bot historisch mehr Traffic verarbeitet hat, ist der ältere Verlauf serverseitig schlichtweg weg, und kein Flag wird ihn wiederherstellen.
Wenn du bereits eine aktuelle Nachrichten-ID kennst (z. B. eine, die du in Echtzeit gesehen hast), kannst du die Sondierung überspringen und genau bei ihr starten:
./dumper.py --token TOKEN --start-from-id 11922524
Nichts dumpen; nur beobachten, was ankommt. Bei der ersten eingehenden Nachricht bietet das Skript an, einen Abwärts-Dump ab dieser ID zu starten:
./dumper.py --token TOKEN --listen-only
Nützlich, wenn du nur eine Liste brauchst, wer mit dem Bot gesprochen hat — keine Zips, keine JPEGs, keine *_history.txt pro Chat.
./dumper.py --token TOKEN --down --users-csv --no-photos --no-media --no-history
Ausgabe: <bot_id>/users.csv mit den Spalten id, username, first_name, last_name, phone, lang_code, bot, premium, verified, scam, fake.
Der Abwärtsdurchlauf gibt für jeden Batch Requesting message ids X..Y ... aus. Wenn der Lauf unterbrochen wird, starte ab der zuletzt ausgegebenen Untergrenze neu:
./dumper.py --token TOKEN --start-from-id <Y>
Kleinere Batches → schnelleres Feedback im Log und kürzeres Wiederherstellungsfenster nach einem FloodWait. Größere Batches → weniger Round-Trips beim Scannen dünn besiedelter / gelöschter ID-Bereiche. Werte bis 1000 funktionieren in der Praxis problemlos.
./dumper.py --token TOKEN --down --batch-size 50
./dumper.py --token TOKEN --down --batch-size 500
./dumper.py --token TOKEN --down --batch-size 1000