Delta Doodle
tjctf
Task: CSV file with trackpad delta values (dx, dy) and pen_down state — reconstruct the drawn message. Solution: accumulate deltas into absolute coordinates, draw line segments only where pen_down=1, flip Y-axis for correct text orientation.
$ ls tags/ techniques/
$ cat /etc/rate-limit
Rate limit reached (20 reads/hour per IP). Showing preview only — full content returns at the next hour roll-over.
Delta Doodle — TJCTF 2026
Description
i was calibrating the new AR airbrush for our maker faire booth by doodling the flag in midair. the headset, unfortunately, only logged the raw data. can you accumulate the motion trail and figure out what message we were trying to spray-paint?
English summary: Given a CSV file (trackpad_deltas.csv) containing 782 rows of incremental trackpad motion data with columns time_ms, dx, dy, and pen_down. The goal is to reconstruct the handwritten flag from the raw delta values.
Analysis
The CSV has 4 columns:
time_ms— timestamp in milliseconds (16ms intervals, ~60 Hz sampling)dx,dy— floating-point incremental movement valuespen_down— 0 or 1, indicating whether the pen is drawing (1) or lifted (0)
time_ms,dx,dy,pen_down
40,2.500,15.008,0
56,0.000,-2.485,1
72,2.960,0.000,1
88,0.000,-1.117,1
104,-2.960,0.000,1
The challenge title "delta doodle" and the description phrase "accumulate the motion trail" directly hint at the technique: these are delta (incremental) values that must be summed (accumulated) into absolute positions to reconstruct the drawn path.
The pen_down field acts like a plotter pen — when 0, the pen is lifted (moving between characters without drawing), and when 1, the pen is drawing a stroke. This naturally segments the path into individual character strokes.
Solution
Step 1: Parse CSV and accumulate deltas
Read each row, maintain a running sum of dx and dy to convert deltas into absolute (x, y) coordinates.
Step 2: Draw the path
For each consecutive pair of points where both have pen_down=1, draw a line segment. Skip segments where the pen is lifted (stroke breaks between characters).
Step 3: Flip Y-axis
Screen/trackpad coordinates have Y increasing downward, but for readable text we need Y increasing upward (cartesian convention). Flip with sy = height - sy.
...
$ grep --similar
Similar writeups
- [misc][Pro]Zuma— duckerz
- [forensics][Pro]awk...wardddd ✂️— bluehensctf
- [hardware][free]Critical Flight— hackthebox
- [reverse][Pro]Nava - ASIS CTF Reverse Challenge— ASIS CTF
- [hardware][free]Nishcheta— alfactf