Нужно найти флаг - верный серийный номер.

ELF PE

Solution

Гляну файл:

Info:
    File name: /spbctf_rev/Nostr 7/s7.out
    Size: 7444
    File type: ELF32
    String: ELF(386)
    Extension: elf
    Operation system: Linux(ABI: 2.6.32)
    Architecture: 386
    Mode: 32-bit
    Type: EXEC
    Endianness: LE

А вот и функция main:

int32_t main(int32_t argc, char** argv, char** envp)
{
    void* const __return_addr_1 = __return_addr;
    int32_t* var_c = &argc;
    int32_t var_14 = 0xb;
    printf("Enter serial number: ");
    void var_1f;
    scanf("%s", &var_1f);
    Check(&var_1f);
    return 0;
}

По scanf ясно, что var_1f - это строка. Перейду в функцию Check:

int32_t Check(char* arg1)
{
    char eax = strlen(arg1);
    char var_d;
    
    if ((eax != 6 || arg1[5] != 'x'))
        var_d = 0;
    else
    {
        var_d = 1;
        
        for (int32_t i = 1; ((int32_t)eax) > i; i += 1)
        {
            if (((int32_t)arg1[i]) != (i + ((int32_t)arg1[(i - 1)])))
            {
                var_d = 0;
                break;
            }
        }
    }
    
    PrintOK(((uint32_t)var_d));
    return PrintError(((uint32_t)(var_d ^ 1)));
}

Давайте разбираться. eax - это длина нашего ключа.

if ((eax != 6 || arg1[5] != 'x'))
    var_d = 0;

Значит ключ должен состоять из 6 символов, последний из которых - x. Ладно, погнали дальше. Вот эту кракозябру:

if (((int32_t)arg1[i]) != (i + ((int32_t)arg1[(i - 1)])))

Можно привести к следующему виду:

if (arg1[i] != i + arg1[i - 1])

Ну все ясно. Каждый последующий символ должен быть на i больше, чем предыдущий. Нам известен пятый символ x. Напишем код на Python:

key = []

c = 'x'
for i in range(5, -1, -1):
    key.append(c)
    c = chr(ord(c) - i)

print(''.join(key[::-1]))

А вот и флаг:

ijlosx

Проверю:

IMG