Day 04

We are given a binary. Decompile:

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  __int64 v3; // rdx
  const char *v4; // rdi
  char s[64]; // [rsp+8h] [rbp-50h] BYREF
  unsigned __int64 v7; // [rsp+48h] [rbp-10h]

  v7 = __readfsqword(0x28u);
  sub_1339(a1, a2, a3);
  puts("NPLD Mainframe Authentication");
  __printf_chk(2, "Enter access code: ");
  if ( !fgets(s, 64, stdin) )
    return 1;
  s[strcspn(s, "\n")] = 0;
  if ( strlen(s) != 23 )
  {
    puts("Jingle laughs. Wrong credential length!");
    return 1;
  }
  sub_1339(s, "\n", v3);
  v4 = "Access Denied. Jingle smirks.";
  if ( (unsigned int)sub_1362(s) )
    v4 = "Welcome to the mainframe, Operative. Jingle owes the elves a round.";
  puts(v4);
  return 0;
}
__int64 __fastcall sub_1362(__int64 a1)
{
  __int64 v1; // rax

  v1 = 0;
  while ( (*(char *)(a1 + v1) ^ 0x42) == byte_2110[v1] )
  {
    if ( ++v1 == 23 )
      return 1;
  }
  return 0;
}

.rodata:000000000000210E                 align 10h
.rodata:0000000000002110 ; unsigned __int8 byte_2110[23]
.rodata:0000000000002110 byte_2110       db 21h, 31h, 26h, 39h, 73h, 2Ch, 36h, 72h, 1Dh, 36h, 2Ah
.rodata:0000000000002110                                         ; DATA XREF: sub_1362+6↑o
.rodata:000000000000211B                 db 71h, 1Dh, 2Fh, 76h, 73h, 2Ch, 24h, 30h, 76h, 2Fh, 71h
.rodata:0000000000002126                 db 3Fh
.rodata:0000000000002126 _rodata         ends
.rodata:0000000000002126

A simple XOR cipher:

data = bytes.fromhex(
    "21h, 31h, 26h, 39h, 73h, 2Ch, 36h, 72h, 1Dh, 36h, 2Ah, 71h, 1Dh, 2Fh, 76h, 73h, 2Ch, 24h, 30h, 76h, 2Fh, 71h, 3Fh".replace(
        "h, ", ""
    ).removesuffix("h")
)
print(bytes([x ^ 0x42 for x in data]))

Solved.