I did the usual actions of running strings and strace but found nothing interesting. I then ran it and found I needed to provide a key. Randomly typing got me nowhere so I opened Ghidra.

webpage

I saw that the application checks the length of your argument and does a comparision. But against what? Their is some proccessing that is done on the string “sup3r_s3cr3t_k3y_1337” each character is shifted by 0x22.

We see that an additional buffer local_88 is made up of different values, your input is then xor’ed against abstack40 to check if it matches local_88.

webpage

We need to provide and input that satisfies input XOR abstack40 = local_88 we can calculate the required input with another xor input = abstack40 XOR local_88. I transplanted some code and calulated the required input.

#include <stdio.h>
int main(int argc, char *argv[])
{
    int local_88 [24];
    local_88[0] = 0x37;
    local_88[1] = 0x3f;
    local_88[2] = 0x2f;
    local_88[3] = 0x76;
    local_88[4] = 0x2b;
    local_88[5] = 0x62;
    local_88[6] = 0x28;
    local_88[7] = 0x21;
    local_88[8] = 0x34;
    local_88[9] = 0xf;
    local_88[10] = 0x77;
    local_88[11] = 0x62;
    local_88[12] = 0x48;
    local_88[13] = 0x27;
    local_88[14] = 0x75;
    local_88[15] = 8;
    local_88[16] = 0x56;
    local_88[17] = 0x6a;
    local_88[18] = 0x68;
    local_88[19] = 0x4e;
    local_88[20] = 0x68;

    int abStack40 [24];
    for(int i = 0; i < 0x15; i++)
    {
        abStack40[i] = "sup3r_s3cr3t_k3y_1337"[i] - 0x22;
    }
    //print abStack40
    for(int i = 0; i < 0x15; i++)
    {
        printf("%x\n", abStack40[i]);
    }

    //xor abstack with local_88
    for(int i = 0; i < 0x15; i++)
    {
        abStack40[i] = abStack40[i] ^ local_88[i];
    }
    //print the values as characters
    for(int i = 0; i < 0x15; i++)
    {
        printf("%c", abStack40[i]);
    }

}

Using the output as argument gives the the desired responce!

webpage