./contents.sh

z0d1ak@ctf:~$ cat sections.md
z0d1ak@ctf:~$ _
writeup.md - z0d1ak@ctf
Reverse Engineering
0CTF
December 22, 2025
2 min read

0CTF - perspective

theg1239
z0d1ak@ctf:~$ ./author.sh

# perspective

Category: reverse / misc
Prompt: “An artist’s perspective is always unique”

## TL;DR

The binary is a Windows x64 OpenGL/GLFW program that contains a 3D point cloud. Only the right camera viewpoint makes a subset of points line up into a 7-row dot-matrix message (the flag).

## File

  • Challenge binary: ../perspective.exe

## Analysis

### 1) Triage

Running strings didn’t reveal a plaintext flag{...}.
Imports/strings showed typical OpenGL/GLFW usage (OPENGL32.dll, window title text, etc.), suggesting the program renders something visually.

### 2) Find the hidden data

Disassembly showed the program copies float arrays from .rdata into GPU buffers:

  • positions: float32 triplets (x,y,z)
  • colors: float32/bytes for per-point color (not strictly needed)
  • an extra/mask float array that was only 0.0 or 1.0

Filtering to mask == 1.0 leaves the points that actually form the message.

### 3) “Artist’s perspective” trick

If you project the masked points with an orthographic camera and rotate the cloud (yaw ~ 42° / mirrored ~ 222°), the points align into a clean 7-row dot-matrix text.
That’s the intended trick: the information only becomes readable from a specific viewpoint.

## Solve

Open the image file and you can read the dot-matrix after mentally “rectifying” the horizontal stretch.

## Flag

Oops{p3rsp3ct1v3_1s_3v3ryth1ng}

Comments(0)

No comments yet. Be the first to share your thoughts!