Исследование файла ключей Chessgenius | ||
В прошлой статье я описывал взлом программы при помощи патчинга. Более интересно было бы взглянуть на структуру файла регистрации. Файл считывается в следующую область памяти: | ||
Я немного пересмотрел имена переменных, добавил к ним префикс lgdat, а также переименовал метку hash на uncrypt. | ||
Итак, первым словом из этой 56-байтной структуры является ключ, которым и расшифровывается остальная часть файла, если перевести этот участок кода на язык высокого уровня, то выглядеть это будет так: | ||
Заметим, что шифрование и дешифрование происходит этой же функцией. После расшифровки этой структуры проверяется корректность ключа, то есть расшифрованное двойное слово lgdat.magic_number должно быть равным 234567. После чего начинаются операции с датами: | ||
в переменную time2 записывается разность 12000 и lgdat.time2, а в переменную days записывается 365 +sec_to_days(lgdat.time-current_time). Затем, | ||
В переменную reg_username копируется содержимое из структуры lgdat_username. Затем, файл считывается повторно и повторяется расшифровка. Честно говоря, я не совсем понимаю, зачем считывать файл снова? | ||
Код абсолютно идентичен предыдущему. Далее начинается самое интересное! Содержимое lgdat копируется в локальную область, в нем изменяются поля lgdat_key (туда записывается текущее время), переменная lgdat.time2 увеличивается на единицу, структура обратно шифруется и записывается в файл! В случае успеха, все окей. Ниже приведен этот интересный участок кода: | ||
Итак, похоже, что единственное что определяет корректность ключа – это магическое число 234567. Напишем же генератор файлов регистрации! | ||
Вводим имя пользователя и все! | ||
Настоящая статья предоставлена в ознакомительных целях и ответственность за использование ее в незаконных целях ложится на ваши плечи | ||
| ||
|