StegoToolkit

PDF Steganography Extractor

Extract text or files hidden by the PDF Steganography Hider's five methods. Tries each method in turn and shows a PDF Anomaly Score. Processed in your browser, not uploaded.

Try the demo instantly

Loads a PDF with a hidden message already embedded

Drop PDF here or click to browse

Accepted: PDF · Maximum file size: 200 MB on desktop, 50 MB on mobile

Processed in your browser

Your PDF is read and analysed in this browser tab; the original is not modified or sent to our servers. Usage statistics may record which options you used (such as the algorithm) and coarse file facts such as size range, never the PDF or the payload.

How the Extractor Works (4 steps)

  1. Upload the PDF file that may contain a hidden payload
  2. Select the detection method (or use Auto to scan all methods)
  3. Enter a password if the payload was encrypted during encoding
  4. Click Decode — the hidden message or file will be extracted below

5 PDF Extraction Methods

MethodWhat it readsWhat it doesBest For
Metadata FieldsThe Keywords value begins with STEGO_META_V1:, then Base64 pieces joined by ||Reads the Info dictionary's Keywords fieldPayloads from this tool's Metadata method
Invisible TextCatalog entry StegoITData (Base64)Reads one Catalog keyPayloads from this tool's Invisible Text method
Whitespace ManipulationPage 1 Resources entry StegoWSData (Base64)Reads one Resources keyPayloads from this tool's Whitespace method
Object StreamStream referenced by Catalog key StegoObjStreamFollows one reference, checks the markerPayloads from this tool's Object Stream method
Font EncodingStegoFontData key in a font dictionary or page ResourcesWalks every page's fontsPayloads from this tool's Font Encoding method

What This Extractor Can and Cannot Find

This extractor reads payloads written by the PDF Steganography Hider on this site. Each of its five methods looks in one exact place for one exact key name — the Keywords field with the STEGO_META_V1: marker, the Catalog entries StegoITData and StegoObjStream, the page Resources entry StegoWSData, and the StegoFontData key. If a PDF holds hidden data placed anywhere else, or under a different name, this tool will report that nothing was found.

That is a real limit for people searching for hidden data in an unknown PDF, for example in a CTF challenge. For those files, start with tools that show everything: the Polyglot File Analyzer for appended or embedded formats, the Strings Analyzer for readable text, the Hex Viewer for the raw bytes, and the PDF Metadata Steganography Extractor, which reads six different metadata and structure methods.

Before You Use It

The Extractor only reads the file; it never changes it, and the PDF is not sent to a server. An extracted file comes from whoever made the PDF, so treat it like any download: do not open an unknown file just because it came out of a PDF. A password-protected PDF is refused. If the payload was encrypted and you do not have the passphrase, the data stays unreadable and nothing here can recover it.

How Auto Detect Works

Auto Detect tries the five methods in this order: Metadata, Invisible Text, Whitespace, Object Stream, Font Encoding. For each one it loads the PDF, reads the one location that method uses, and reports whether a payload was there. The scan stops early at the first clear text or file payload; otherwise every method is tried, each result is listed, and the best one (text, then file, then binary, then encrypted) is shown. The scan does not guarantee that every payload in a PDF is extracted. You can also pick a single method if you know how the file was made.

Each method either finds its marker and key or finds nothing. There is no guessing from the page content, so a found marker identifies a candidate payload at the expected location; successful decoding or authenticated decryption is stronger confirmation. These are three different outcomes: a marker found, a payload recovered, and (for an encrypted payload) authentication succeeded. A failed scan tells you only that this tool's fixed locations are empty.

The PDF Anomaly Score

Alongside the extraction, the tool inspects the PDF's structure and shows a score from 0 to 100. It is the sum of four parts, each worth up to 25: metadata, invisible text, object stream and font encoding. A part scores when the tool finds its own marker — the STEGO_META_V1 / STEGO_WS_V1 Keywords prefix, the StegoWSData, StegoITData, StegoObjStream or StegoFontData keys — or, for metadata only, a Keywords field that is unusually long (over 200 characters) or that looks like a long Base64 string. The label is Low up to 20, Medium above 20, and High above 50. The score has four parts for five methods because Whitespace Manipulation's fingerprints are counted inside the metadata part. This Hider's Whitespace Manipulation writes the page 1 Resources key StegoWSData, which scores 18 there, and no Keywords prefix; the 25-point rule for a Keywords value starting STEGO_WS_V1: applies only to a file that has that prefix. Font Encoding scores 25 when the PDF has an embedded font (the key sits in the font dictionary) and 20 when it has none (the key falls back to the page Resources).

So the score tells you how many of this tool's own fingerprints are present. It is not a general steganalysis measure: a PDF carrying data by some other technique scores 0, and a high score on a file you did not make with this tool suggests matching key names or metadata patterns are present.

Passwords, Redundancy and What the Result Means

If the payload was encrypted, the extracted bytes are AES-256-GCM ciphertext until you supply the password; a wrong password fails authentication and the raw bytes are shown instead of text, with a note that a wrong passphrase and damaged data cannot be told apart. A password typed for a payload that was never encrypted is simply not used. A green note appears only when AES-GCM authentication succeeded. The interpreter then classifies what it has: a known file signature (PDF, ZIP, PNG, JPEG, GIF, MP3 and others) is offered as a download, mostly-printable low-entropy bytes are shown as text, and data that matches this toolkit's encrypted layout or has very high entropy is flagged as probably encrypted.

If the Hider's RS option was used, the wrapper is detected by its header and removed first. In theory the Extractor can repair up to 5, 10 or 15 changed bytes per 223-byte block (RS-10, RS-20, RS-30), provided it can locate the block and the errors stay within that limit, and it reports blocks it cannot repair.

About the Password

The password is turned into a key with PBKDF2-HMAC-SHA-256 (100,000 iterations) and the salt stored in the payload, and the AES-256-GCM authentication tag then checks it. A wrong password and a damaged payload both simply report failure, so the tool cannot tell you which it was, and there is no way to recover a forgotten password. The full description, including what this scheme does not protect, is on the PDF Steganography Hider page.

Where the Extractor Looks, Exactly

Each method reads one fixed place. Nothing is guessed from the page text or the content streams.

MethodReadsAcceptsIgnores
MetadataInfo dictionary KeywordsA Keywords value that begins with STEGO_META_V1: (this Hider's output; any space-separated word starting with it is accepted), then Base64 pieces joined by ||XMP streams, other Info fields
Invisible TextCatalog key StegoITDataA PDF string of Base64The off-page text on page 1 (it is a copy)
Whitespace ManipulationPage 1 Resources key StegoWSDataA PDF string of Base64The Tw lines (they are decoration)
Object StreamThe stream behind Catalog key StegoObjStreamStream text starting STEGO_OBJ_V1:Streams without the marker
Font EncodingEach page's Resources, then each font dictionary, key StegoFontDataA string starting STEGO_FONT_V1:Font programs and glyphs

PDF Anomaly Score, Part by Part

The score is the sum of four parts of up to 25 each; Low is 0 to 20, Medium 21 to 50, High over 50. It counts this tool's own fingerprints (and one Keywords heuristic), not steganography in general.

PartScores whenOne payload of that method scores
Metadata (max 25)Keywords starts STEGO_META_V1: (25), or STEGO_WS_V1: (25, a prefix this Hider never writes); Keywords over 200 characters (15); a Base64-looking Keywords of 40+ characters (12); Subject STEGO_V1 adds 10; page 1 Resources key StegoWSData (at least 18)Metadata Embedding 25; Whitespace Manipulation 18 (it writes StegoWSData and no Keywords prefix)
Invisible text (max 25)Catalog key StegoITData25
Object stream (max 25)Catalog key StegoObjStream25
Font encoding (max 25)Key StegoFontData in a page's Resources (20) or in a font dictionary (25)25 with an embedded font; 20 without one (the key falls back to page Resources)

Examples

Input: A PDF made by the Hider's Metadata method, Auto Detect

Result: Metadata Fields: payload found. The Keywords field started with STEGO_META_V1:. The anomaly score's metadata part is 25.

Meaning: The marker and Base64 were exactly where the Hider puts them. Read the text, or download the file if it is one.

Input: A PDF from the Object Stream method, with a password, entered correctly

Result: Object Stream: payload found, decrypted, shown as text or offered as a file.

Meaning: The StegoObjStream reference was followed, the marker stripped, then AES-256-GCM decrypted.

Input: The same PDF, wrong password

Result: The raw bytes are shown, classified as probably encrypted; no text appears.

Meaning: Authentication failed. The payload is present but unreadable without the right password.

Input: A CTF PDF with a flag hidden in a content stream or after %%EOF

Result: All five methods report nothing found; the score is 0 when no fingerprint or Keywords heuristic matches (an unrelated long or Base64-looking Keywords value can still add points).

Meaning: The payload is not under this tool's key names. Try the Polyglot Analyzer, Strings Analyzer or Hex Viewer.

Input: A PDF edited and re-saved by a tool that rebuilds the file

Result: Nothing found, even though the original stego PDF held a payload.

Meaning: Rebuilding a PDF from its rendered pages generally drops custom structural entries. Other optimisers were not tested.

Input: An ordinary PDF with a very long, Base64-looking Keywords field

Result: No method finds a payload, but the anomaly score shows a metadata warning.

Meaning: The heuristic flags the field as unusual; it does not prove a payload exists or that it was made by this tool.

How the Extractor Works, Step by Step

1. Load and inspect

The PDF is parsed in the browser with pdf-lib and a structural pass collects the metadata fields and looks for this tool's marker keys to compute the anomaly score.

2. Read one location per method

Each method reads a single fixed place: the Keywords field, a Catalog key, a Resources key, a referenced stream, or font dictionaries. Nothing is guessed from page text.

3. Decode

A found payload is Base64-decoded (or read as raw stream bytes after the marker) and, if it carries the redundancy header, unwrapped.

4. Decrypt

With a password the payload is decrypted with AES-256-GCM. A wrong password keeps the raw bytes and says so.

5. Interpret

The original filename is restored if one was stored, and the bytes are classified as text, a file, probably-encrypted data or binary, with CTF flag patterns highlighted.

What the results mean

ResultWhat it meansWhat to do
Payload foundA method found its marker and keyRead it, or download it if it is a file
No payload detectedNone of the five fixed locations held dataThe PDF may use another technique — try the Polyglot Analyzer, Strings Analyzer or Hex Viewer
Probably encryptedThe bytes match this toolkit's encrypted layout or have very high entropyEnter the password used when hiding
Anomaly score: Low (0–20)Few or none of this tool's fingerprints. A Whitespace Manipulation payload alone scores 18, and a Font Encoding payload in a PDF with no embedded font scores 20; both are LowDo not read Low as proof that nothing is there: run Auto Detect; it says nothing about other techniques
Anomaly score: Medium (21–50)Some fingerprints, or an unusual Keywords field. One Metadata, Invisible Text, Object Stream or Font Encoding (with an embedded font) payload alone scores 25Run Auto Detect and read the listed anomalies
Anomaly score: High (over 50)At least three of the four parts scored, because each part is capped at 25: several of this tool's fingerprints matchedA strong sign of a payload written by this tool, but not proof: anyone can add the same key names
Hidden data found, but it could not be decrypted with that passphraseA passphrase was given and the data has the encrypted layout, but AES-GCM authentication failed. A wrong passphrase and damaged data cannot be told apartCheck the passphrase; the bytes shown are still encrypted
AES-GCM authenticated decryption succeeded (green note)AES-GCM authenticated decryption succeeded with this passphraseRead or download the result
Reed-Solomon repaired N changed bytesThe Hider's RS option was used and some stored bytes had changedCheck the result; the repair is limited to 5, 10 or 15 bytes per block in theory
Reed-Solomon found damage it could not repairMore bytes changed than the parity can fixTreat the bytes as possibly wrong
Flag detectedThe text matches a CTF flag patternVerify it — generic patterns can match ordinary words in braces

Limitations

  • Only payloads written by this site's PDF Steganography Hider are found. Each method reads one fixed key name; data hidden anywhere else, or by another tool, is invisible to it.
  • The anomaly score counts this tool's own fingerprints plus one heuristic for long or Base64-like Keywords. It is not a general PDF steganalysis score, and a PDF using another technique scores 0.
  • Rebuilding a PDF from its rendered pages (print to PDF, flattening) generally drops custom structural entries, so the payload is usually gone afterwards. Other optimisers were not tested.
  • Password-protected PDFs are not supported. Remove the protection first.
  • The upload box accepts PDFs up to 200 MB (50 MB on a phone) and refuses anything larger without reading it. Measured in Chromium on a laptop with a 190 MB PDF that is one large binary stream: about 1 s to read it and extract a short message, with the page staying responsive (longest frame gap 33 ms). A PDF made of very many small objects takes longer.
  • The Hider's RS option is Reed-Solomon parity: the extractor repairs a few changed bytes per block, not removed pages or objects.
  • For hidden data in unknown PDFs, use the Polyglot File Analyzer, the Strings Analyzer or the Hex Viewer; for more PDF metadata methods use the PDF Metadata Steganography Extractor.

Privacy

Your PDF is analysed in your browser, in a Web Worker, and is not sent to a StegoToolkit upload server. The extracted payload and any password stay on your device. Usage analytics (page views and tool events) record which options you choose (such as the method), coarse facts about the file such as its type and size range, and how long processing took — never the PDF, the extracted data, a filename or a password. Your display mode preference is kept in this browser's localStorage.

Which Tool Next?

Frequently Asked Questions

Will decoding modify my PDF?

No. Decoding only reads the file. The original is never changed, and the extracted payload is returned to your browser.

Is my PDF uploaded to a server?

No. Extraction happens in your browser, in a Web Worker. The PDF does not leave your device.

Which method should I try first?

Auto Detect. It tries Metadata, Invisible Text, Whitespace, Object Stream and Font Encoding in that order, stops early at the first clear text or file, and otherwise tries all five. Pick a single method only if you know how the PDF was made.

Why is the output garbled?

The payload was most likely encrypted. Enter the same password used when hiding. A wrong password fails authentication and shows the still-encrypted bytes with a note; a wrong password and damaged data cannot be told apart.

Can I extract files, not just text?

Yes. If the payload is a file, it is recognised by its signature and offered as a download, with its original filename restored if one was stored.

What is the PDF Anomaly Score?

A 0–100 score made of four parts of up to 25 each (metadata, invisible text, object stream, font encoding). A part scores when this tool's own marker keys are found, and the metadata part also scores for a Keywords field that is unusually long or looks like Base64. Above 50 means several of this tool's fingerprints are present. It does not measure other steganography techniques.

Why does it say nothing was found in my CTF PDF?

This extractor reads only the exact locations the PDF Steganography Hider writes. If a CTF PDF hides data with a technique this extractor does not support (for example in a content stream, after the end of the file or in an embedded file), this tool will not find it. Try the Polyglot File Analyzer, Strings Analyzer or Hex Viewer.

What does the Reed-Solomon option do?

If the Hider used its RS option, the payload carries a Reed-Solomon wrapper that the extractor detects and removes, which can in theory repair up to 5, 10 or 15 changed bytes per block (if the block can be located and the errors stay within that limit) and says how many it repaired, or that some damage could not be repaired. It does not recover content from deleted pages or an entry another program removed.

Related Tools