После запуска файла, я понял что сам файл – это что-то вроде инжектора (об этом свидетельствовали частые ошибки при попытках инжекта, которые свойственны при работе через ntdll). Открыв файл в IDA, я в этом убедился, он грузит свои ресурсы и запускает: Я запустил файл, после запуска окна кредитной карты сдампил процесс при помощи PeTools и открыл дамп в IDA. В main функции приложение запускало окно с функцией для callback’а DialogFunc: Перейдя в нее, я заметил несколько интересных вещей: Во-первых, текст, который появляется при вводе неверных данных в окна программы, подтверждающий что я на правильном пути, во-вторых, блок, судя по всему, содержащий логику регистрации и одну-единственную функцию в этом блоке. Перехожу на эту функцию и вижу заветное “Serial is valid”: Выше распологается if/else, которое, судя по всему, является валидатором серийного номера. Выглядит это примерно следующим образом: вызывается некая функция, куда передается почта, введенный серийник и длина обоих строк, по ее результату (1 / 0) определяется, правильно введены данные или нет: Переходим в функцию проверки серийника. Там видим 3 if/else для валидации данных: Одна из валидаций прямолинейно говорила что длина серийника должна быть 32 символа (подсчитал с помощью перебора цифр, скрипт ниже): for i in range(99999): if (i**2 - 24) % 1000 == 0: print(i) Далее видим функцию MD5, которая используется на почте и строке “Z3r0_N1ghts”: Почему это именно MD5 можно понять, **** в гугл hex-значения из этой функции: Далее, md5-хэши конвертируются в байтовый вид и побайтово вычитаются, попутно проверяя результат разности с введенным серийником: Алгоритм расшифрован, осталось только лишь написать к нему кейген: import hashlib import binascii zero_nights = hashlib.md5('Z3r0_N1ghts'.encode()).digest() mail = hashlib.md5("dmr0@protonmail.com".encode()).digest() result = [] for i in range(len(zero_nights)): result.append((zero_nights - mail) % 256) print(binascii.hexlify(bytearray(result))) Получаем MD5 в байтовом виде от мейла и строки ‘Z3r0_N1ghts’, далее побайтово в цикле вычитаем одну строку из другой и выводим результат в виде HEX-строки. Вводим полученные данные и получаем “Serial is valid”: