Inspect PDF text layers, detect visual masking, and export an audit report. Open the browser tool or run the Python utility locally.
Taylor Wessing Data Breach Toolkit
On this page
Inspect the text and drawing layers in a PDF, identify text hidden beneath visual masks, and export a report or an unmasked copy. The toolkit includes a browser interface and a Python command-line utility.
Removing a mask reveals content; it does not securely redact a document. Use a copy of the source PDF and inspect the output before sharing it. A scan result alone does not establish that a document is safe to publish.
Open the browser tool
- Open the PDF Redaction Auditor.
- Select a local PDF. Compare its rendered page with the text extracted by PDF.js.
- Export the audit report, or use the layer-stripping action to download a separate, unmasked PDF.
The document is processed in the browser. Loading the hosted interface downloads the application and its libraries. The repository includes the browser libraries locally; for an offline copy, download the repository and keep its lib/ directory beside index.html.
Run the Python tool locally
Download decensor.py from the project repository. Install Python 3 and PyMuPDF, then run the commands from the folder containing the script. Installing dependencies requires a connection; processing the PDF runs locally.
python -m pip install pymupdf
python decensor.py --help
Inspect the document structure
python decensor.py -i document.pdf -l
Export text detected beneath dark shapes
python decensor.py -i document.pdf -e findings.txt
Remove supported vector masks from a copy
python decensor.py -i document.pdf -m stream -o unmasked.pdf
Keep only the text layer
This mode removes all vector drawings, lines and boxes, including legitimate graphics. Preserve the original for comparison.
python decensor.py -i document.pdf -d -o text-only.pdf
What each mode checks
- Text inspection ยท browser
- PDF.js extracts the stored text and displays it alongside the rendered page.
- Layer stripping ยท browser and Python
- PDF-lib or PyMuPDF modifies supported drawing operators to reveal text beneath visual overlays.
- Collision audit ยท Python
- PyMuPDF checks overlaps between text blocks and dark shapes. The
-eoption writes the detected text to a report.
These checks target supported visual masking patterns. They cannot reconstruct text that was actually deleted, and they do not provide a complete audit of every PDF object, attachment or redaction method.
Source and documentation

Case study and correspondence
๐ Case Study: The Taylor Wessing / Valve GDPR Breach
While processing Article 15 GDPR subject access requests (SARs) concerning Steam user data, a critical security vulnerability was identified in documents processed and transmitted by the external legal counsel Taylor Wessing LLP on behalf of Valve Corporation.
Technical Failure Analysis
Instead of permanently sanitising the raw character arrays inside the PDF content streams, a custom automated PDF generation pipeline (using Aspose.PDF for .NET) was deployed. This system programmatically queried the coordinates of sensitive fields and drew solid black vector shapes (using the PDF re and f/F/b/B operators) on top of the text.
Because visual drawing layers neither alter nor destroy the underlying raw text arrays, thousands of unredacted private records (including account credentials, logins, emails, security logs and de-anonymised data of minors) remained fully intact, copyable and extractable from the files that were sent.
๐ Exhibit A: Disclosed Correspondence with Dr. Patrick Zurheide
The project README reproduces the response received from Dr. Patrick Zurheide, the Salary Partner at Taylor Wessing LLP, after PhishDestroy formally notified the firm of their PDF redaction failure and the resulting Steam user data leak. Instead of initiating an Article 33 GDPR breach notification, he wrote the following (English translation; the German original is linked in the README):
Hello PhishDestroy team,
Thank you for your seemingly translated, but quite entertaining message. Which communication "with criminal prosecution" addressed to the PhishDestroy team are you referring to? I am certain that I have never communicated with PhishDestroy in any form before. Please therefore provide this alleged communication so that I can understand what this is all about.
Your letter is unfortunately difficult, if not impossible, to follow in terms of content. As a note: A disclaimer, such as the one at the bottom of your letter, stating what is allegedly not done or intended, is meaningless if the actual actions contradict it.
Patrick Zurheide
๐ PhishDestroy Analysis:
- "entertaining message": A very well-paid "IT Law Expert" called a forensic notification about a massive GDPR data breach involving the exposed Steam accounts of minors "entertaining".
- "difficult, if not impossible, to follow": We gave him the exact hex values, his PDF's metadata, the 36-second batch pipeline timestamps and the specific Aspose 20.8 version that caused the leak. Apparently, IT metrics are too "difficult to follow" for a Doctor of Information Technology Law.
LICENSE ยท RIGHTS ยท DISCLAIMER
LICENSE ยท RIGHTS ยท DISCLAIMER
Additional editorial notes
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ ONE ACTUAL RULE (yes, just one) โ โ โ โ Access from OFAC-sanctioned jurisdictions is prohibited. That is a โ โ matter of territory and law โ not of nationality and not of people. โ โ Changing your Steam region does not change your physical location โ โ or your legal status. No loopholes. โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ THE DEAL (open offer, no lawyers needed) โ โ โ โ If you want the domain gone: โ โ let your IT law professionals calculate its price. Take your time โ โ โ it is a rare asset: the only website in the world whose purchase โ โ changes nothing, because everything on it already lives on IPFS, โ โ in regulator inboxes, and in archives we do not control. โ โ โ โ 50% of whatever you pay goes to the SEAL Foundation โ โ (securityalliance.org) โ people who do volunteer security work โ โ professionally and publish it for free. We are not affiliated with โ โ them and they did not ask for this; we name them as the public โ โ standard of what real volunteers look like โ the standard your own โ โ volunteer moderators and outsourced support failed, publicly, โ โ before you had to remove them. You know the scandals. So do we. โ โ โ โ The rest buys the community coffee while we keep publishing. โ โ That is not a settlement offer. It is a demonstration of what โ โ money can't reach: the domain is the maximum Valve can obtain, โ โ and obtaining it obtains nothing. The referrals continue. โ โ The mirrors continue. Part 3 continues. โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ