-
Notifications
You must be signed in to change notification settings - Fork 4
Генератор флагов
Mikhail Gnedashev edited this page May 19, 2018
·
1 revision
- Категория: Reverse
- Стоимость: 200
- Автор: Мария Девятых
- Репозиторий
Псс, хочешь получить флаг? Ничего сложного, я могу это устроить. Вот программа. Всё, что тебе нужно, это... (помехи) flagogenerator
- Исполняемый файл flagogenerator
Запустим программу:
$ ./flagogenerator
Hello! This program will generate a flag for you by your token :)
Applying Caesar...
Applying hashing algorithms...
Applying concatenation...
Your flag is generated!
...But you're not allowed to see it. Ahahaha :D
Программа говорит нам что флаг сгенерирован. Из этого мы можем сделать предположение, что в какой-то момент ее работы верный флаг находился в памяти программы. Один из вариантов решения - воспользоваться дебаггером (например, ollydbg (Windows) или gdb (Linux)) и посмотреть на память программы во время ее исполнения, а конкретно - в тот момент когда печатается строка "Your flag is generated!". Но рассмотрим более детально, что происходит в программе. Откроем файл в IDA и найдем функцию с интересующей нас строкой:
Видим, что программа может вывести флаг на консоль, если функция _strcmp вернет 0. Это стандартная функция языка С, она сравнивает переданные ей строки. Видим что в начале функции break_everything значение какой-то переменной устанавливается в "debug-no", а потом эта переменная передается в _strcmp вместе со строкой "debug". Значит, если бы значение этой переменной было "debug", то мы бы увидели флаг. Так и сделаем. Посмотрим в hex-view на место, где в памяти лежит "debug-no":
Строка "debug-no" кодируется байтами 64 65 62 75 67 2D 6E 6F посимвольно. Значит, чтобы изменить ее значение на "debug", надо просто занулить в любом hex-редакторе последние три байта (2D 6E 6F) которые отвечают за "-no". Сохраним полученный файл и запустим - получим флаг.