Skip to content

Decision guide

Everything else on this site is organised by technique, which only helps once you know which technique you need. This page is organised by symptom. Each tree starts from something you can observe without knowing anything, and every branch ends at a tool.

These are the seven situations that actually recur - not an attempt at completeness. A tree that covers everything helps nobody at 2am.

I have a string of text and no idea what it is

The most common opening in any CTF. The alphabet tells you almost everything before you decode anything.

First move

Run the cipher identifier. It applies every decoder, including multi-layer cascades, and ranks by English-likeness - which resolves most wrappers in one action.

If none of that fits: The input is probably bytes rather than text. Decode whatever wrapper it is in, check the first bytes against the magic byte table, and move to File mode.

I have a file and it will not open, or opens and shows nothing

The extension is a suggestion. The first bytes are the fact.

First move

Identify the real type from its signature, and scan the whole file for embedded signatures rather than just reading the header.

  • The header does not match the extension

    The file was renamed. Treat it as what the bytes say it is.

    File type identifier by magic bytes
  • A second file signature appears partway through

    A polyglot or an appended archive - very common, and usually the whole challenge.

    `PK\x03\x04` inside an image means a ZIP is glued on the end.

    Magic byte and file signature table
  • The header is zeroed or subtly wrong

    A deliberately corrupted file. Write the correct magic bytes back.

    Magic byte and file signature table
  • It opens fine and shows nothing interesting

    The data is hidden inside rather than appended. Sweep the steganography techniques.

    Automatic steganography solver
  • It is a PNG that renders wrong or not at all

    Check the chunk CRCs - a bad CRC in IHDR usually means the dimensions were edited.

    PNG chunk analyzer
  • High entropy throughout, no readable strings

    Compressed or encrypted. Look for the container that should have unpacked it.

    Hex viewer and hexdump

If none of that fits: Run strings with a low minimum length and read everything. A surprising share of file challenges are solved by output nobody bothered to scroll through.

I have something that looks like a hash

Identification decides whether cracking is the intended path or a trap. Do it before spending any compute.

First move

Identify the format by length and prefix, and get the hashcat mode number.

If none of that fits: It may not be a hash. A fixed-length hex string can also be a key, an IV, or a raw digest of something you are supposed to compute yourself.

I have RSA parameters

Textbook RSA is not breakable. The challenge is breakable because one parameter was chosen badly - so read the parameters before running anything.

First move

Look at the size of n, the size of e, and how many ciphertexts you were given. Those three facts pick the attack.

If none of that fits: Look for partial information - known high bits of p, a leaked fragment of d, a decryption oracle. Those point at Coppersmith and lattice methods rather than classical attacks.

I have a URL and a login page

The interesting endpoint is rarely the one you were given. Enumerate first, then read what the application trusts.

First move

Fetch robots.txt and probe for common paths. `.git/HEAD` is a single request that occasionally ends the challenge on the spot.

If none of that fits: Read the client-side JavaScript in full. Endpoints, API keys, and the entire logic of the check are frequently sitting in a bundle nobody expected you to read.

I have an executable

The protections decide the exploit. Read them before opening a disassembler, because half the approaches are already ruled out.

First move

Check the architecture, the protections, and the imports. Then run strings - it solves more challenges than it has any right to.

If none of that fits: If the binary just checks input against a computed value, do not reverse the algorithm - set a breakpoint at the comparison and read the operand.

I have a packet capture

A capture is a story with one relevant thread. Look for the anomaly rather than reading the traffic.

First move

Look at the protocol breakdown first. Whatever is unusual - not whatever is largest - is the challenge.

If none of that fits: Check the capture’s own timestamps and packet ordering. Occasionally the payload is the timing rather than the content.

Want the same material in learning order rather than triage order? The curriculum sequences it into ten modules, each with real challenges to practise on.