MS Paint Tags Your Images With a Hidden GUID
Paint and Photos stamp an invisible watermark into every saved image — even fully offline ones. Here's how to spot pixel steganography.
Open MS Paint, draw a rectangle, hit Save. Windows just stamped a serial number into your pixels — invisibly, and with no AI features involved. A reversing write-up on the front page of Hacker News today shows that Paint and Photos both embed a hidden GUID watermark into saved images, including ones created entirely offline.
Invisible watermarks were pitched as an AI-provenance tool. Your offline doodle was never supposed to be in scope. It now is.
Why this matters
A tool silently rewriting pixel values breaks the assumption that saving a file is a no-op. Content hashes, dedup keys, and pixel-perfect regression tests all shift when an editor decorates output on its own.
A GUID is also an identifier. If it stays stable per install, every image you export is quietly traceable back to that machine. And the technique behind it is worth knowing — most developers never touch steganography until it touches them first.
How it works
Invisible watermarks hide bits where your eyes don't look. The cheap version is least-significant-bit (LSB) steganography: flip the final bit of a color channel. A pixel that was (120, 45, 200) becomes (120, 45, 201) — a brightness change of one part in 255, invisible to humans, but now carrying one bit of payload. Spread across a few hundred pixels, that's room for a 128-bit GUID with plenty to spare.
The robust version hides bits in the frequency domain, tweaking DCT coefficients so the mark survives JPEG re-encoding and resizing. That's the family of technique behind commercial AI-image labeling systems.
Either way, the detection tell is the same: round-trip the same image through the app and diff the pixels. Deltas confined to the lowest bits mean something was written into them on purpose.
Where this helps
- Pipeline integrity. If CI hashes images or compares renders pixel-by-pixel, know which tools mutate output on save. Ghost diffs from invisible edits waste afternoons.
- Leak tracing. Worth stealing: watermark documents per recipient, and leaked copies point back to their source.
- Forensics. An embedded GUID can answer "which machine produced this" long after logs are gone.
- Privacy audits. A quick LSB check reveals what your "local-only" tools actually write into files.
Watch out
- Behavior is version-dependent — documented on current Windows Paint and Photos builds. Re-verify on yours before making claims.
- LSB watermarks die under JPEG re-encoding or resizing. A clean image proves nothing about its origin.
- Photos have naturally noisy LSB planes, so visual inspection only works well on flat, synthetic images like screenshots and drawings.
- Stripping watermarks from content you don't own can violate terms of service or law. Detect on your own files; think hard before removing.
Try it yourself
Save a flat-colored image from MS Paint, then inspect its LSB plane:
# pip install pillow numpy
from PIL import Image
import numpy as np
img = np.array(Image.open("paint_output.png").convert("RGB"))
# Isolate the least-significant bit of every channel
lsb = (img & 1) * 255
Image.fromarray(lsb.astype(np.uint8)).save("lsb_plane.png")
# Mostly uniform black = natural low bits
# Repeating patterns or structure = hidden payloadTL;DR
- What happened: Windows Paint and Photos invisibly watermark saved images with a GUID — including fully offline, non-AI ones.
- Why it matters: Editors now mutate pixels silently, breaking hashing, dedup, and privacy assumptions.
- Try today: Run the LSB-plane script on something you saved from Paint.