Tags: reverse_engineering ghidra
Rating:
Decompiling the main function in the givin file using ghidra and then cleaning it up gives
```c
int main(void)
{
  size_t inputLength;
  long in_FS_OFFSET;
  int counter;
  char input [104];
  long canary;
  
  canary = *(long *)(in_FS_OFFSET + 0x28);
  setvbuf(stdin,(char *)0x0,2,0);
  setvbuf(stdout,(char *)0x0,2,0);
  puts("Welcome to SuperTexEdit!\n");
  puts("To begin using SuperTexEdit, please enter your registration code.");
  printf("Code: ");
  __isoc99_scanf(&string_format_99s,input);
  inputLength = strlen(input);
  if (inputLength == 32) {
    input[0] = input[0] + -0x69;
    input[1] = input[1] + -0x71;
    input[2] = input[2] + -0x67;
    input[3] = input[3] + -0x70;
    input[4] = input[4] + -0x5f;
    input[5] = input[5] + -0x6f;
    input[6] = input[6] + -0x60;
    input[7] = input[7] + -0x74;
    input[8] = input[8] + -0x65;
    input[9] = input[9] + -0x60;
    input[10] = input[10] + -0x59;
    input[11] = input[11] + -0x67;
    input[12] = input[12] + -99;
    input[13] = input[13] + -0x66;
    input[14] = input[14] + -0x61;
    input[15] = input[15] + -0x57;
    input[16] = input[16] + -100;
    input[17] = input[17] + -0x4e;
    input[18] = input[18] + -0x65;
    input[19] = input[19] + -0x5c;
    input[20] = input[20] + -0x5e;
    input[21] = input[21] + -0x4f;
    input[22] = input[22] + -0x49;
    input[23] = input[23] + -0x4a;
    input[24] = input[24] + -0x5c;
    input[25] = input[25] + -0x46;
    input[26] = input[26] + -0x4e;
    input[27] = input[27] + -0x54;
    input[28] = input[28] + -0x51;
    input[29] = input[29] + -0x48;
    input[30] = input[30] + -0x1c;
    input[31] = input[31] + -0x5e;
    counter = 0;
    while( true ) {
      if (31 < counter) {
        puts("Key Valid!");
        puts("SuperTexEdit booting up...");
                    /* WARNING: Subroutine does not return */
        abort();
      }
      if (counter != input[counter]) break;
      counter = counter + 1;
    }
    puts("Invalid code!");
  }
  else {
    puts("Invalid code!");
  }
  if (canary != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return 1;
}
```
and from that we can see that the flag is 32 characters and can be constructed letter by letter.
for the exact flag, check the original write up