First, reverse target : "dekarc_demongysoihp_138"
flag = ''.join(flag_chars) print(flag)
Let target = "831_physiognomy_cracked" . Crack Digital Physiognomy 1 831
$ ./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.
Now for each char c in reversed target:
Decompile main :
$ 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. // custom obfuscation function if (strcmp(expected
transform(input, expected); // custom obfuscation function if (strcmp(expected, "831_physiognomy_cracked") == 0) { printf("Flag: %s\n", input); } else { puts("Access denied."); } return 0; }