$ cat writeup.md…
$ cat writeup.md…
umasscybersec
Task: inspect a packet capture of a malware download and identify the downloaded virus from VirusTotal. Solution: extract HTTP objects, recover the Python decryption logic for the launcher, hash the decrypted binary, and pivot from that SHA256 to the exact VirusTotal family string.
Hey! A man was caught with malware on his PC in Lego City. Luckily, we were able to get a packet capture of his device during the download. Help Lego City Police figure out the source of this malicious download.
The flag for this challenge is the name of this virus on VirusTotal under the details tab with the format UMASS{[String]_[Sha256 Hash]}. For example if your hash is 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824, there will be a virus name under the details tab with a format similar to ForensicsChallenge_2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824, where "ForensicsChallenge" is an arbitrary string.
English summary: the challenge provides a packet capture from a host downloading suspected malware. The goal is to recover the malicious payload, identify the correct sample on VirusTotal, and format the answer as UMASS{family_sha256}.
The main artifact inside the downloaded archive was thedamage.pcapng. HTTP reconnaissance showed that the infected host fetched several files from 156.234.52.16, including installer.py and launcher.
The important pivot was that installer.py did not merely download malware; it contained the decryption routine for ./launcher. After decrypting the launcher and hashing the plaintext binary, the decrypted SHA256 matched the relevant VirusTotal sample, which exposed the exact string REDACTED.
After downloading and extracting the ZIP, the key artifact was thedamage.pcapng.
Useful initial commands:
file thedamage.pcapng capinfos thedamage.pcapng tshark -r thedamage.pcapng -Y "http.request" -T fields -e frame.number -e ip.src -e http.host -e http.request.method -e http.request.uri
The HTTP request list showed a single suspicious download server at 156.234.52.16 serving these paths:
/fungame.jpg/cooldog.jpeg/installer.py/literallyme.jpeg/launcherThat made 156.234.52.16 the malware download source/server requested by the challenge.
Next, export the HTTP objects and inspect what was actually transferred:
tshark -r thedamage.pcapng --export-objects "http,http_objects" file http_objects/installer.py http_objects/launcher shasum -a 256 http_objects/*
The obviously suspicious files were installer.py and launcher. The images looked like decoys, while the Python script and a raw executable payload strongly suggested a staged malware delivery.
Relevant hashes:
launcher SHA256: 695b3eeeb8a4a4d22405d78732f19c6e42527d374ae3b23ba1c4e4b757e10359launcher.dec SHA256: REDACTEDReading installer.py revealed the entire decryption routine. The script used:
seed = "38093248092rsjrwedoaw3"key = hashlib.sha256(seed.encode()).digest()nacl.secret.SecretBox(key)It then decrypted ./launcher in place. That tells us the downloaded launcher file inside the PCAP is not the final malware sample; it is only the encrypted container. The challenge asks for the VirusTotal name associated with the real virus, so the correct object to hash and submit to VirusTotal is the decrypted payload, not the encrypted blob.
Minimal reproduction:
#!/usr/bin/env python3 import hashlib import pathlib import nacl.secret seed = "38093248092rsjrwedoaw3" key = hashlib.sha256(seed.encode()).digest() box = nacl.secret.SecretBox(key) data = pathlib.Path("launcher").read_bytes() plaintext = box.decrypt(data) pathlib.Path("launcher.dec").write_bytes(plaintext)
Equivalent one-liner used during the solve:
python3 -c 'import hashlib,nacl.secret,pathlib; seed="38093248092rsjrwedoaw3"; key=hashlib.sha256(seed.encode()).digest(); box=nacl.secret.SecretBox(key); data=pathlib.Path("launcher").read_bytes(); pathlib.Path("launcher.dec").write_bytes(box.decrypt(data))'
After decryption:
file launcher.dec
The result was identified as:
FreeBSD/i386 compact demand paged dynamically linked executable, not stripped
The decisive lookup was the SHA256 of the decrypted binary:
REDACTED
Why this hash matters:
installer.py explicitly decrypts launcher, so the encrypted file is only a wrapper.Looking up that decrypted hash on VirusTotal showed the malware family as Snoopy, and the file names/details included the exact challenge-formatted string:
REDACTED
That string is what the challenge wanted inside UMASS{...}.
thedamage.pcapng and enumerate HTTP requests.156.234.52.16.tshark.installer.py and recover the hardcoded SecretBox decryption logic.launcher into launcher.dec.launcher.dec and use that SHA256 in VirusTotal.UMASS{...}.UMASS{REDACTED}
$ cat /etc/motd
Liked this one?
Pro unlocks every complete writeup and expanded API access. $9/mo.
$ cat pricing.md$ grep --similar