← Back to EHAX 2026
compute it
Challenge Description
the computation prof gave me some data and a executable, what does he want from me?
Files provided:
signal_data.txt- 2600 lines of comma-separated (x, y) coordinate pairsvalidator- ELF 64-bit x86-64 binary (not stripped, compiled fromvalidator.cpp)
Analysis
Binary Reverse Engineering
The validator binary takes two command-line arguments: a real and imaginary component of a complex number. Disassembly of main reveals it implements Newton's method for finding roots of the polynomial f(z) = z^3 - 1.
The algorithm:
- Parse
real(x) andimag(y) from command-line arguments - Iterate up to 50 times:
- Compute f(z) = z^3 - 1:
- Real part:
A = x^3 - 3*x*y^2 - 1.0 - Imaginary part:
B = 3*x^2*y - y^3
- Real part:
- Compute f'(z) = 3z^2:
- Real part:
C = 3*(x^2 - y^2) - Imaginary part:
D = 6*x*y
- Real part:
- Check if |f'(z)|^2 < 1e-9 (derivative too small, bail out)
- Apply Newton step:
z = z - f(z)/f'(z)(complex division) - Increment iteration count
- Check convergence: |Re(z) - 1| < 1e-6 AND |Im(z)| < 1e-6 (converged to root z=1)
- Compute f(z) = z^3 - 1:
- If iteration count == 12: print "AUTHORIZATION ACCEPTED: Node Valid."
- Otherwise: print "AUTHORIZATION DENIED: Node Invalid."
Key constants extracted from .rodata:
0x20d0: 3.0 (used in f(z) and f'(z) computation)0x20d8: 1.0 (the -1 in z^3 - 1, and the target root)0x20e0: 6.0 (coefficient in imaginary part of f'(z))0x20e8: 1e-9 (derivative magnitude threshold)0x20f0: 1e-6 (convergence tolerance)
Data Processing
Each of the 2600 points in signal_data.txt was run through the Newton's method algorithm. Points that converge to root z=1 in exactly 12 iterations are marked as 1 (valid), all others as 0 (invalid).
This produces a 2600-bit binary string. Arranging these bits as a 130x20 grid reveals ASCII art text rendered in a 5-row pixel font:
#### # # # # # # ## ### #### # # ### ## ### # # # # #### #### # #### # # ### ##
# # # # # ## ## # # # # # # # # # # # # # # # # # ## # # # # ##
### #### #### # # # # ### # # # # # # # # #### # # # #### ### #### ### # # ## #### # #
# # # # ## ## # # # ## ## # # # # # ## ## # # # # # # # # # # ##
#### # # # # # ## # # #### # # # ## # # # # # #### # # #### #### # # # ##
Verification
# Point that converges in exactly 12 iterations -> ACCEPTED
$ ./validator 0.689743 1.844815
AUTHORIZATION ACCEPTED: Node Valid.
# Point that converges in 10 iterations -> DENIED
$ ./validator -1.652406 -0.049086
AUTHORIZATION DENIED: Node Invalid.