$ python3 solve.py CTF{d1g1t4l_f4c3_831} $ ./physiognomy Enter digital physiognomy key: CTF{d1g1t4l_f4c3_831} Flag: CTF{d1g1t4l_f4c3_831} Matches expected output. Flag CTF{d1g1t4l_f4c3_831} Note: The number 831 appears as part of the intermediate constant string 831_physiognomy_cracked , likely referencing the challenge ID or a magic value.
undefined8 main(void) { char input[32]; char expected[32]; printf("Enter digital physiognomy key: "); fgets(input, 32, stdin); input[strcspn(input, "\n")] = 0; Crack Digital Physiognomy 1 831
Let target = "831_physiognomy_cracked" . $ python3 solve
$ ./physiognomy Enter digital physiognomy key: test Access denied. No other output. Likely checks a specific input. Load into Ghidra. The entry calls __libc_start_main with FUN_00101260 as main. Load into Ghidra
Now for each char c in reversed target:
$ file physiognomy physiognomy: ELF 64-bit LSB executable, x86-64, dynamically linked, stripped $ checksec physiognomy Arch: amd64 RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE