TryHackMe c4ptur3-th3-fl4g Writeup | Steganography & Crypto Walkthrough for Beginners
TryHackMe: c4ptur3-th3-fl4g Writeup
Overview
This writeup covers all four tasks of the "c4ptur3-th3-fl4g" CTF challenge on TryHackMe. Each task focuses on different cybersecurity and cryptography concepts.
Task 1: Encoding/Decoding
Objective: Decode various types of encoded messages to find flags.
Solutions
1. Leetspeak Decoding
Leetspeak (l33t sp34k) is internet slang where numbers and symbols replace similar-looking letters.
Challenge:
c4n y0u c4p7u23 7h3 f149?
Method: Look for number-to-letter substitutions:
- 4 looks like A
- 0 looks like O
- 1 looks like I or L
- 3 looks like mirrored E
- 7 looks like T
- 9 looks like g
Leetspeak Mapping:
0 = O 1 = I/L 3 = E 4 = A
5 = S 7 = T 8 = B 9 = G
Solution:
c4n y0u c4p7u23 7h3 f149?
can you capture the flag?
Answer: can you capture the flag?
Tools: Manual decoding with leetspeak chart, or CyberChef
2. Binary Decoding
Binary uses two digits (0 and 1) to represent data. Each 8 bits = 1 character.
Challenge:
01101100 01100101 01110100 01110011 00100000 01110100 01110010 01111001 00100000 01110011 01101111 01101101 01100101 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101111 01110101 01110100 00100001
Method:
Step 1: Split into 8-bit chunks
01101100 | 01100101 | 01110100 | ...
Step 2: Convert each to decimal
01101100 = 108
01100101 = 101
01110100 = 116
Step 3: Convert decimal to ASCII
108 = 'l'
101 = 'e'
116 = 't'
Answer: lets try some binary out!
Tools: CyberChef, Python, or manual conversion
3. Base32 Decoding
Base32 is an encoding scheme that represents binary data in a base-32 alphabet using 32 characters.
Challenge:
MJQXGZJTGIQGS4ZAON2XAZLSEBRW63LNN5XCA2LOEBBVIRRHOM======
Method: Use CyberChef or a Base32 decoder:
- Paste the Base32 string
- Decode to UTF-8
- Read the output
Answer: base32 is super common in CTF's
Tools: CyberChef, Python (base64 module with Base32)
4. Base64 Decoding
Base64 is a binary-to-text encoding scheme. Each character represents 6 bits of data.
Challenge:
RWFjaCBCYXNlNjQgZGlnaXQgcmVwcmVzZW50cyBleGFjdGx5IDYgYml0cyBvZiBkYXRhLg==
Method:
- Recognize Base64 (ends with = or ==)
- Use CyberChef or
echocommand:
Answer: Each Base64 digit represents exactly 6 bits of data.
Tools: CyberChef, base64 command, Python
5. Hexadecimal Decoding
Hexadecimal (base 16) uses digits 0-9 and letters A-F.
Challenge:
68 65 78 61 64 65 63 69 6d 61 6c 20 6f 72 20 62 61 73 65 31 36 3f
Method: Convert hex pairs to ASCII:
68 = h
65 = e
78 = x
61 = a
...
Answer: hexadecimal or base16?
Tools: CyberChef, Python, or hex-to-ASCII converter
6. ROT13
ROT13 is a simple letter substitution cipher that replaces each letter with the letter 13 positions after it.
Challenge:
Ebgngr zr 13 cynprf!
Method: ROT13 is reciprocal - apply it twice to get the original.
Ebgngr zr 13 cynprf!
↓ (apply ROT13)
Rotate me 13 places!
Answer: Rotate me 13 places!
Tools: CyberChef (search "ROT13"), Python
7. ROT47 (Caesar Cipher Extended)
ROT47 is a variant of Caesar cipher that works on all printable ASCII characters (33-126), not just letters.
Challenge:
*@F DA:? >6 C:89E C@F?5 323J C:89E C@F?5 Wcf E:>6DX
Method: ROT47 shifts all printable ASCII by 47 positions. Use CyberChef:
- Search "ROT47"
- Paste input
- Read output
How ROT47 Works:
Answer: You spin me right round baby right round (47 times)
Tools: CyberChef, Python script
8. Morse Code
Morse code uses dots (·) and dashes (−) to represent letters and numbers.
Challenge:
- . .-.. . -.-. --- -- -- ..- -. .. -.-. .- - .. --- -.
Morse Code Chart:
A ·− B −··· C −·−· D −·· E · F ··−· G −−· H ····
I ·· J ·−−− K −·− L ·−·· M −− N −· O −−− P ·−−·
Q −−·− R ·−· S ··· T − U ··− V ···− W ·−− X −··−
Y −·−− Z −−··
Method: Split by spaces and decode each Morse pattern:
- = T
. = E
.-.. = L
Answer: TELECOMMUNICATION ENCODING
Tools: CyberChef, Morse decoder online, manual chart
9. Decimal/ASCII
Decimal representation of ASCII values.
Challenge:
85 110 112 97 99 107 32 116 104 105 115 32 66 67 68
Method: Convert decimal to ASCII:
85 = U
110 = n
112 = p
97 = a
99 = c
107 = k
32 = (space)
116 = t
...
Answer: Unpack this BCD
Tools: CyberChef, Python, ASCII table
Task 2: Spectrograms
Objective: Analyze an audio file's spectrogram to find hidden information.
File: secretaudio_1559007588454.wav (105,840 samples at 44100 Hz)
Concepts
-
Spectrogram: Visual representation of frequency spectrum over time
- X-axis: Time (seconds)
- Y-axis: Frequency (Hz)
- Color/Brightness: Signal intensity (dB - decibels)
-
Sonogram/Voiceprint/Voicegram: Alternative names for audio spectrograms
-
3D Waterfall: Alternative 3D representation of spectrograms
Complete Python Solution
Use this proven Python script to generate spectrograms:
How to Use
Step 1: Save the script
Step 2: Run the script
Step 3: Output

[*] Loading audio file: secretaudio_1559007588454.wav
[+] Audio loaded: 105840 samples at 44100 Hz
[*] Generating spectrogram...
[+] Spectrogram saved as spectrogram.png
[✓] Spectrogram analysis complete!
Recommended Tools
- Sonic Visualiser (sonicvisualiser.org) - Best for spectrograms
- Audacity (audacityteam.org) - Built-in spectrogram view
- Python (scipy) - Programmatic analysis
Task 3: Steganography
Objective: Extract hidden data from JPEG images.
Files to Analyze:
stegosteg_1559008553457.jpg- Contains hidden payloadmeme_1559010886025.jpg- Secondary image
Concepts
Steganography: Practice of concealing a file, message, image, or video within another file
- Key Difference: Data is hidden (steganography) vs scrambled (encryption)
- Common Methods:
- Steghide (embeds in JPEG/WAV files)
- LSB (Least Significant Bit) in images
- Metadata/EXIF hiding
- File concatenation
- Invisible text/colors
Working Solution: Using Steghide
Step 1: Check for Hidden Data
Output:
"stegosteg_1559008553457.jpg":
format: jpeg
capacity: 2.5 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
embedded file "steganopayload2248.txt":
size: 13.0 Byte
encrypted: rijndael-128, cbc
compressed: yes
Step 2: Extract the Hidden File
When prompted:
Enter passphrase:
(press Enter for no passphrase or leave empty)
Output:
wrote extracted data to "steganopayload2248.txt".
Step 3: View the Extracted Content
Output:
SpaghettiSteg%
Answer: SpaghettiSteg%
Pro Tips
✅ Try empty passphrase first (just press Enter)
✅ Check both JPG files for hidden data
✅ Use steghide info BEFORE extracting to see what's inside
✅ Look at file metadata with exiftool as first step
✅ If steghide fails, try LSB extraction tools (Stegsolve)
✅ Always check the file extension and format
✅ Some files may have multiple layers of steganography
Task 4: Security Through Obscurity
Objective: Find hidden data and text in files.
File: meme_1559010886025.jpg
Concept
Security Through Obscurity: Relying on secrecy of design/implementation as the main security method. Often considered weak when used alone - should be combined with actual encryption/security measures.
Solution: Using strings Command
Step 1: Extract Readable Text
Output:
Step 2: Identify the Hidden Data
From the strings output, you can see:
- Hidden message:
AHH_YOU_FOUND_ME!
Answer: AHH_YOU_FOUND_ME!
Summary of All Answers
| Task | Answer |
|---|---|
| Task 1.1 | can you capture the flag? |
| Task 1.2 | lets try some binary out! |
| Task 1.3 | base32 is super common in CTF's |
| Task 1.4 | Each Base64 digit represents exactly 6 bits of data. |
| Task 1.5 | hexadecimal or base16? |
| Task 1.6 | Rotate me 13 places! |
| Task 1.7 | You spin me right round baby right round (47 times) |
| Task 1.8 | TELECOMMUNICATION ENCODING |
| Task 1.9 | Unpack this BCD |
| Task 2 | (Hidden in spectrogram) |
| Task 3 | SpaghettiSteg% |
| Task 4 | AHH_YOU_FOUND_ME! |
Tags
Keep Reading