Category: Forensics
Flag: TACHYON{fr4gm3nt3d_1s_n0_4un}
Challenge Description
The sender want’s to outsmart you, can you outsmart the sender? The intercepted transmission wasn’t as straightforward this time. Instead of a single clean message, the data appears to have been broken into multiple fragments before being sent. Each piece may not make sense on its own.
Analysis
This one was a compact packet-forensics puzzle where the important part was not finding one obvious plaintext frame, but reconstructing a message spread across fragments. I started by confirming what the file actually was so I knew I was parsing the right artifact and timestamp/link-layer assumptions.
file "/home/LIGHT/Downloads/chall.pcap"/home/LIGHT/Downloads/chall.pcap: pcap capture file, microsecond ts (little-endian) - version 2.4 (No link-layer encapsulation, capture length 524288)After that, I checked protocol hierarchy to see whether application payload even existed and how much of it there was. The key clue here is that only five packets carried data, which immediately matches the challenge hint about fragmented transmission.
tshark -r "/home/LIGHT/Downloads/chall.pcap" -q -z io,phsProtocol Hierarchy StatisticsFilter:
frame frames:60 bytes:3725 null frames:60 bytes:3725 ipv6 frames:10 bytes:760 tcp frames:10 bytes:760 ip frames:50 bytes:2965 tcp frames:50 bytes:2965 data frames:5 bytes:325With that signal, I pulled only the payload bytes from those data packets. The output was clearly chunk-like rather than final plaintext, and each ended with 0a (newline), so stripping and joining was the right reconstruction model.
tshark -r "/home/LIGHT/Downloads/chall.pcap" -Y "data" -T fields -e data.data5645464453466c500a546e746d636a526e620a544e7564444e6b587a0a467a58323477587a520a31626e303d0aOnce those fragments were decoded from hex to text and concatenated, they formed one Base64 string, and decoding that produced the flag directly.

tshark -r "/home/LIGHT/Downloads/chall.pcap" -Y "data" -T fields -e data.data | ~/.venvs/py312-global/bin/python "/home/LIGHT/Downloads/solve_shark2.py"parts = ['VEFDSFlP', 'TntmcjRnb', 'TNudDNkXz', 'FzX24wXzR', '1bn0=']joined = VEFDSFlPTntmcjRnbTNudDNkXzFzX24wXzR1bn0=decoded = TACHYON{fr4gm3nt3d_1s_n0_4un}Solution
import sysimport base64
hex_lines = [line.strip() for line in sys.stdin if line.strip()]parts = [bytes.fromhex(h).decode().strip() for h in hex_lines]joined = "".join(parts)
print(f"parts = {parts}")print(f"joined = {joined}")print(f"decoded = {base64.b64decode(joined).decode()}")tshark -r "/home/LIGHT/Downloads/chall.pcap" -Y "data" -T fields -e data.data | ~/.venvs/py312-global/bin/python "/home/LIGHT/Downloads/solve_shark2.py"parts = ['VEFDSFlP', 'TntmcjRnb', 'TNudDNkXz', 'FzX24wXzR', '1bn0=']joined = VEFDSFlPTntmcjRnbTNudDNkXzFzX24wXzR1bn0=decoded = TACHYON{fr4gm3nt3d_1s_n0_4un}