gamepwnfreeeasy

NoMap3D

HackTheBox

Challenge provides an ELF 64-bit PIE executable (not stripped) — an SDL2 raycasting game in Wolfenstein 3D style, and an `assets.dmp` file (11.9 MB) containing map data, skybox, and textures. Unlike the related NoClip challenge which encoded the flag in individual character textures, NoMap3D encodes

$ ls tags/ techniques/
binary_asset_parsingmap_extractionascii_art_decodingwall_pattern_visualization

$ cat /etc/rate-limit

Rate limit reached (20 reads/hour per IP). Showing preview only — full content returns at the next hour roll-over.

NoMap3D — HackTheBox

Description

"I'm lost in this green cube hell. I have to find a way out of it."

Challenge provides an ELF 64-bit PIE executable (not stripped) — an SDL2 raycasting game in Wolfenstein 3D style, and an assets.dmp file (11.9 MB) containing map data, skybox, and textures. Unlike the related NoClip challenge which encoded the flag in individual character textures, NoMap3D encodes the flag as ASCII art formed by the wall layout itself.

Flag format: HTB{...}

Analysis

Step 1: Initial Recon

file nomap3d # ELF 64-bit LSB pie executable, x86-64, not stripped, dynamically linked nm nomap3d | grep -E "player|raycast|colf|window|event|asset" # load_assets, player_init, raycast, event, input # colf.c, window.c, event.c, player.c, raycast.c

The binary uses the same SDL2 raycasting engine as the NoClip challenge. Key modules: collision detection (colf.c), player control (player.c), raycasting renderer (raycast.c), input handling (event.c), SDL2 window (window.c).

The name "NoMap3D" is a direct hint: "No Map" → the flag says "Who needs a map" in leetspeak. The map layout itself IS the flag.

Step 2: Parsing assets.dmp

The file uses the same chunk-based format as NoClip:

Chunk 1 (id=1): Player position

OffsetTypeValueDescription
0x00uint321Chunk ID
0x04double103.0Player X position
0x0Cdouble7.0Player Y position

Chunk 2 (id=2): Map data

OffsetTypeValueDescription
0x14uint322Chunk ID
0x18uint32259Map width
0x1Cuint3212Map height
0x20byte[]259×12×3Map data (9324 bytes)

...

$ grep --similar

Similar writeups