What does it look like?
Will thus results in the following two “crypted” images
Which are only what a PrintScreen could capture if you were to flip the display madly between bmpOne and bmpTwo.
The perceptual image, assuming you were to flip at a high enough frequency will be:
If your hardware and screen display (LCD) are fast enough, the above image is what your eyes will see. In practice, you’re more likely to have at least occasional frame skips, which will make the image flicker.
Since the technique only requires generating two images and flipping between them at high frequency, it will “work” on any platform, native apps, web apps, etc. and will defeat casual PrintScreen even when hosted in a VM or viewed over RDP.
Making it work in the real world
The key to making it work is to be able to flip fast enough between the images, preferably at each screen refresh (VSync) to minimize user discomfort. On Windows, you have access to VSync through OpenGL or DirectX, on web browsers, that’s through requestAnimationFrame.
When you don’t have access to VSync (such as in a normal VCL app), you’ll have to use a timer, but that won’t be very precise, can be subject to stroboscopic effect, so may have to aim for a lower flipping frequency than theoretically possible, which will increase discomfort.
I’ve made a small SmartMS app for your consumption’s, er… pleasure?
Consider yourself warned against epileptic seizures and headaches, then click on the link below, and hit Print Screen to your heart’s content!
My PC and iPad don’t seem to have any trouble displaying a rather stable perceptual image. If you don’t see it working on mobile Android browsers, try touching and dragging the screen (it allows higher screen refresh rates).
As a final note, remember that this technique does not work against eye-like devices, like… cameras. It defeats PrintScreen only, and only against casual print-screeners.
As an exercise left to the astute reader, there is very simple way to decrypt with non-casual Print-screening and the help of a Paint program, but shhh! 😉