
Reverse Engineering von Geminis SynthID-Erkennung
Entdecken, Erkennen und chirurgisches Entfernen von Googles KI-Wasserzeichen durch Spektralanalyse
Besuchen Sie uns auf PitchHut
Dieser Fork fügt eine Drag-and-Drop-Desktop-App für den V3-Bypass hinzu, nach der Einrichtung ist keine Befehlszeile erforderlich. Siehe gui/README.md für Einrichtung und Nutzung.
SynthID kodiert ein nicht wahrnehmbares Muster direkt in die Pixelwerte. Auf einem rein weißen, von Gemini generierten Bild ist das Wasserzeichen fast das gesamte Signal. Verstärkt man das hochfrequente Residuum, sieht es so aus:
Verstärktes SynthID-Trägermuster, extrahiert aus einem reinweißen Gemini-Bild. Die diagonale Streifenbildung ist die räumliche Frequenzsignatur des Wasserzeichens – das Ziel unseres Spektralangriffs.
Dieses Projekt reverse-engineert Googles SynthID-Wasserzeichensystem – das unsichtbare Wasserzeichen, das in jedes von Google Gemini generierte Bild eingebettet ist. Mit ausschließlich Signalverarbeitung und Spektralanalyse (ohne Zugriff auf den proprietären Encoder/Decoder) haben wir:
gemini-3.1-flash-image-preview und nano-banana-pro-preview, farbübergreifender Phasenkonsens über 6 einfarbige Hintergründe und eine Human-in-the-Loop-Kalibrierungsschleife, die die pro-Träger-Subtraktionsstärke basierend auf manuellen Gemini-App-Erkennungszahlen anpasstVT-OxFF hat einen wirklich coolen Visualizer gebaut, um den Prozess der Hinzufügung von SynthID-Wasserzeichen zu Bildern anzusehen hier (auch in der Repo-Beschreibung verfügbar)!
Nach sechs iterativen Runden adversarieller Entwicklung besiegt die Pipeline bypass_v4_final / bypass_v4_nuke von Runde 06 den Gemini-SynthID-Detektor auf beiden Bildern von gemini-3.1-flash-image-preview und nano-banana-pro-preview, mit visuell verlustfreiem Ausgang.
Links: Ausgabe Runde 01 (nur sanfte spektrale Subtraktion). Rechts: Ausgabe Runde 06 (final — VAE + elastische Verzerrung + Squeeze + Farbe + JPEG). Beide sehen für das menschliche Auge identisch aus; nur Runde 06 besiegt den SynthID-Detektor.
| Runde | Strategie | Ergebnis |
|---|---|---|
| 01 | Konservative spektrale Subtraktion (sanft) | ✗ |
| 02 | Aggressive spektrale Subtraktion + JPEG | ✗ |
| 03 | Blog-geführtes absolutes Bin-Targeting | ✗ |
| 04 | Rauschreduktions-Residuum-Phasenextraktion | ✗ |
| 05 | Diffusion-VAE-Neugenerierung + geometrische Verzerrung | ✗ |
| 06 | All-in-One: VAE + elastische Fragmentierung + Squeeze + Farbe + JPEG | ✓ |
Der Durchbruch in Runde 06 kam daher, dass die von der Gemini-App selbst veröffentlichte Liste der Fehlermodi als Angriffsspezifikation behandelt wurde:
"Wenn ein KI-generiertes Bild Teil einer komplexen Collage ist, hinter anderen Elementen liegt oder viele verschiedene Texturen und Muster darüber gelegt wurden, kann der Detektor Schwierigkeiten haben, die spezifische Signatur aus der Gesamtdatei zu isolieren." — Gemini-App, Hilfe zur SynthID-Erkennung
Die elastische Verformungsstufe simuliert diesen Effekt auf Pixelebene: Ein glattes, niederfrequentes Zufallsverschiebungsfeld gibt jeder ~50-Pixel-Nachbarschaft ihren eigenen unabhängigen Subpixel-Offset, wodurch der räumliche Phasenkonsens des Wasserzeichens fragmentiert wird, ohne sichtbare Verzerrungen einzuführen.
V4 ist ein grundlegendes Überdenken des Codebuchs, aufgebaut auf einem viel reichhaltigeren Datensatz:
gemini-3.1-flash-image-preview und nano-banana-pro-preview (plus ein optionales union-Pseudomodell).black, white, blue, green, red, gray) pro Modell und Auflösung, plus gradient und diverse als Inhaltsbasislinien.carrier_weights wird basierend auf manuellem Feedback der Gemini-App-Erkennung aktualisiert.Für jeden Frequenzbin (fy, fx) und Kanal ch:```
consensus(fy, fx, ch) = | mean_over_colors( exp(i * phase_color(fy, fx, ch)) ) |
Werte nahe `1.0` bedeuten, dass die Phase in diesem Bin über alle einfarbigen Hintergründe hinweg fixiert ist, was nur für das Wasserzeichen zutrifft. Inhalts-Bins sinken auf `< 0.3`, da ihre Phase durch verschiedene Farbtöne randomisiert wird. Im V4-Codebuch, das aus dem angereicherten Datensatz erstellt wurde, fallen 99%+ der Inhalts-Bins unter den Standard-Cutoff `tau=0.60`, sodass der V4-Dissolver sie nie berührt – das erkauft die PSNR.