Der Browser bekommt den ganzen Code.
Obfuskierter Client-Code.
Jede Prüfung, die im Browser läuft, liegt auch dem vor, der sie umgehen will. Wer sie einmal versteht, baut sie nach. Deshalb darf der ausgelieferte Code nicht derselbe bleiben.
Stand: August 2026
Ein Ziel, das sich nicht bewegt, wird mit jedem Tag billiger.
- Problem
- Der Browser bekommt den vollständigen Code. Anders könnte er ihn nicht ausführen.
- Antwort
- Der Client-Code wird laufend neu generiert und obfuskiert, in jedem Tarif.
- Grenze
- Das verteuert den Nachbau. Entschieden wird auf dem Server.
Was heißt obfuskierter Code?
Absichtlich schwer lesbarer Code.
Namen verlieren ihre Bedeutung, die Struktur wird auseinandergezogen, der Ablauf lässt sich nicht mehr am Stück verfolgen. Der Browser führt das Ergebnis genauso aus wie vorher. Länger braucht nur, wer es nachbauen will.
(function () {
let bewegungen = 0, tasten = 0;
addEventListener('mousemove', () => bewegungen++);
addEventListener('keydown', () => tasten++);
window.pruefung = () => bewegungen > 3 && tasten > 0;
})();Was ein CAPTCHA über den Browser erfahren will, muss in diesem Browser stattfinden. Also geht der Code dorthin, vollständig.
function a0_0x5e01(_0x1fa6b4,_0x169a35){_0x1fa6b4=_0x1fa6b4-0xc6;const _0xf5e2a1=a0_0xf5e2();let _0x5e011f=_0xf5e2a1[_0x1fa6b4];return _0x5e011f;}(function(_0x1ff2f6,_0x190b54){const _0xa4768a=a0_0x5e01,_0x5bd4a6=_0x1ff2f6();while(!![]){try{const _0x3d129c=-parseInt(_0xa4768a(0xcd))/0x1*(-parseInt(_0xa4768a(0xd3))/0x2)+-parseInt(_0xa4768a(0xc7))/0x3*(parseInt(_0xa4768a(0xca))/0x4)+parseInt(_0xa4768a(0xce))/0x5*(parseInt(_0xa4768a(0xc9))/0x6)+-parseInt(_0xa4768a(0xc6))/0x7*(-parseInt(_0xa4768a(0xc8))/0x8)+-parseInt(_0xa4768a(0xd0))/0x9+parseInt(_0xa4768a(0xd1))/0xa+-parseInt(_0xa4768a(0xcf))/0xb*(parseInt(_0xa4768a(0xcc))/0xc);if(_0x3d129c===_0x190b54)break;else _0x5bd4a6['push'](_0x5bd4a6['shift']());}catch(_0x8b5288){_0x5bd4a6['push'](_0x5bd4a6['shift']());}}}(a0_0xf5e2,0x74144),(function(){const _0x3761ca=a0_0x5e01;let _0x3be410=0x0,_0x36e860=0x0;addEventListener(_0x3761ca(0xd4),()=>_0x3be410++),addEventListener(_0x3761ca(0xcb),()=>_0x36e860++),window[_0x3761ca(0xd2)]=()=>_0x3be410>0x3&&_0x36e860>0x0;}()));function a0_0xf5e2(){const _0x3b0313=['2766288kgUtXQ','174OoNFnr','8FsPATN','1548654wxVzZr','2252udVlBM','keydown','948sbEbvB','4HTpzMA','5ikYhmt','124685tIgGtH','956655tqWvJp','509330EUsxYr','pruefung','402824GaDQmO','mousemove'];a0_0xf5e2=function(){return _0x3b0313;};return a0_0xf5e2();}Erzeugt mit javascript-obfuscator 5.1.0, Standardeinstellungen, ein frei verfügbares Werkzeug. Veranschaulichung, nicht der Code, den ByeBot ausliefert.
- Lesbar
- Debugger und Netzwerkansicht hat jeder Browser eingebaut.
- Wiederholbar
- Was einmal verstanden ist, lässt sich in ein Skript gießen.
Verschlüsselt wird dabei nichts. Ein verschlüsselter Text braucht einen Schlüssel, den der Empfänger hat und der Angreifer nicht. Beim Client-Code hat der Angreifer alles, was der Browser auch hat, sonst würde die Seite bei ihm nicht laufen. Obfuskierung kostet Zeit. Ein Geheimnis schafft sie nicht.
Warum bleibt ein statischer Schutz gelöst, wenn er einmal gelöst wurde?
Weil die Arbeit einmal anfällt und der Ertrag danach skaliert.
Ein Sicherheitsforscher hat das im März 2026 an einem fremden Rechennachweis vorgeführt: Der Algorithmus stand offen im Seitenquelltext und war deterministisch. Ein nachgebauter Löser reichte, damit ein automatisierter Scanner die Prüfung passierte.
Sein Fazit beschreibt das allgemeine Problem, nicht die Schwäche dieses einen Systems: „PoW CAPTCHAs stop tools that don’t try. They don’t stop people who read the source.“ Ein Audit deutschsprachiger Anbieter, veröffentlicht vom Betreiber dieser Website, kommt zum selben Ergebnis: Wo die Erkennungslogik lesbar im Browser liegt, lässt sie sich lesen und überschreiben.
| Schritt | Wie oft | Aufwand |
|---|---|---|
| Code lesen und verstehen | einmal | Stunden bis Tage |
| Löser bauen | einmal | überschaubar |
| Löser ausführen | beliebig oft | Rechenzeit |
Auf zehntausend Anfragen verteilt sich die teure Zeile auf zehntausend billige. Ein unveränderter Client wird nicht einmal umgangen, sondern mit jeder Ausführung günstiger.
Was ändert laufende Neugenerierung daran?
Sie entwertet die Vorarbeit.
Wenn der ausgelieferte Code nicht derselbe bleibt, passt ein einmal gebauter Löser nicht dauerhaft. Die Analyse muss wiederholt werden, statt sich abschreiben zu lassen. Aus einer einmaligen Investition wird eine laufende Ausgabe.
Client bleibt gleich
Einmal analysieren
- Analyse: einmal
- Löser: bleibt gültig
- Kosten je Anfrage: sinken
Client ändert sich laufend
Immer wieder analysieren
- Analyse: wiederholt
- Löser: veraltet
- Kosten je Anfrage: bleiben
Beispielhafte Darstellung. Das Ziel ist nicht Unmöglichkeit, sondern wiederkehrende Kosten auf einer Seite, die bisher nur einmalige hatte.
Der Client-Code wird laufend neu generiert und obfuskiert.
Das gilt in jedem Tarif, für jedes Widget, ohne Einstellung. Wie oft und nach welchem Verfahren, steht nirgends auf dieser Website: ein veröffentlichter Zeitplan ist ein Zeitplan, nach dem sich ein Angreifer richten kann.
Was Obfuskierung nicht leistet.
Drei Dinge, die hier nicht behauptet werden sollen.
Sie stimmen nämlich nicht, und eine Schutzschicht wird nicht besser, wenn man sie überzeichnet. Auguste Kerckhoffs formulierte 1883 die Regel, an der sich so etwas messen lässt: Ein System darf nicht auf Geheimhaltung angewiesen sein.
- Kein Dauerschutz
- Genug Zeit und genug Interesse kommen an jedem Client vorbei.
- Kein Ersatz
- Ohne serverseitige Prüfung des Tokens nützt der beste Client nichts.
- Nichts gegen Handarbeit
- Gegen bezahlte Menschen an echten Browsern wirkt schwer lesbarer Code nicht.
Im Original lautet das zweite seiner sechs Desiderate: „Il faut qu’il n’exige pas le secret, et qu’il puisse sans inconvénient tomber entre les mains de l’ennemi.“ Obfuskierter Code erfüllt diese Regel nicht, denn er lebt davon, dass ihn niemand liest. Er ist bei ByeBot deshalb nicht die Sicherheit, sondern eine Kostenschicht davor.
- ClientSammelt und rechnet im Browser. Freigeben kann er nichts.
- ObfuskierungVerteuert den Nachbau des Clients. Ersetzt keine Prüfung.
- ServerEntscheidet, ob ein Token gültig ist. Hier liegt die Kontrolle.
Was bleibt, ist begrenzt und trotzdem der Unterschied zwischen einem Angriff, der sich einmal lohnt, und einem, der von vorn beginnt.
Fragen zum Client-Code.
Kurze Antworten, Grenzen inbegriffen.
Ist der Client-Code von ByeBot obfuskiert?
Ja. Der ausgelieferte Client-Code wird laufend neu generiert und obfuskiert, in jedem Tarif, für jedes Widget und ohne dass dafür etwas eingestellt werden muss. Was diese Schicht leistet und wo sie aufhört, steht vollständig auf dieser Seite.
Ist obfuskierter Code verschlüsselt?
Nein. Verschlüsselung braucht einen Schlüssel, den der Angreifer nicht hat. Beim Client-Code hat er alles, was der Browser auch hat. Obfuskierung kostet Zeit, ein Geheimnis schafft sie nicht.
Lässt sich obfuskierter JavaScript-Code wieder lesbar machen?
Ja. Genug Zeit und genug Interesse kommen an jedem Client vorbei. Obfuskierung ist kein Dauerschutz, sondern eine Kostenschicht: teuer, nicht unmöglich.
Ist das nicht Security through Obscurity?
Zum Teil ja, und der Einwand ist berechtigt. Obfuskierter Code lebt davon, dass ihn niemand liest, und verfehlt damit Kerckhoffs zweites Desideratum. Er ist deshalb nicht die Sicherheit, sondern eine Kostenschicht davor.
Wie oft wechselt ByeBot den ausgelieferten Client-Code?
Das steht nirgends auf dieser Website, und das ist Absicht. Ein veröffentlichter Zeitplan ist ein Zeitplan, nach dem sich ein Angreifer richten kann.
Sieben Tage testen, dann entscheiden.
Ein Zahlungsmittel wird zu Beginn hinterlegt. In der Testphase liegt die Grenze bei 10.000 Prüfungen. Danach ab 19 € im Monat.