Уведомления
Очистить все

Ищу совета по анализу самописного шифра в CTF-задаче


RNM
 RNM
(@rnm)
New Member
Присоединился: 12 месяцев назад
Записи: 1
Создатель темы  

Всем привет,

Застрял на одной CTF-задаче (речь о легальных соревнованиях Capture The Flag) и нужна помощь сообщества, чтобы двигаться дальше. Речь идет о реверс-инжиниринге небольшой самописной программы на C++, которая использует кастомный алгоритм шифрования.

Что я уже сделал: Декомпилировал бинарник с помощью Ghidra. Выделил ключевые функции, отвечающие за кодирование и проверку флага. Попытался проанализировать логику алгоритма — похоже, он использует XOR с динамически генерируемой ключевой последовательностью, основанной на текущем индексе символа. Логика генерации ключа запутанная. Кажется, там используется псевдослучайный генератор с состоянием, которое обновляется после каждого символа. Мой брутфорс по пространству ключей ни к чему не привел.

Есть ли у кого-нибудь опыт анализа подобных "кастомных" криптосистем?

Какие инструменты или методы, кроме статического анализа в Ghidra, могут быть полезны? Может, стоит попробовать динамический анализ с gdb с скриптами для дампа состояния памяти?

Может, я упускаю что-то очевидное в арифметических операциях?

Буду рад если кто поможет.



   
Цитата
Zumer2000
(@zumer2000)
New Member
Присоединился: 1 год назад
Записи: 3
 

Попробуйте динамический анализ: запустите программу в gdb с breakpoint'ами на функции генерации ключа и шифрования, дампьте регистры и память для нескольких первых символов это часто позволяет быстро восстановить простой алгоритм (типа LCG), который выглядит запутанно только в статике. Воспроизведите логику в Python для проверки. 😎 



   
Ecom reacted
ОтветитьЦитата
Ecom
 Ecom
(@ecom)
Active Member
Присоединился: 1 год назад
Записи: 5
 

Запись от: @zumer2000
↑

Попробуйте динамический анализ: запустите программу в gdb с breakpoint'ами на функции генерации ключа и шифрования, дампьте регистры и память для нескольких первых символов это часто позволяет быстро восстановить простой алгоритм (типа LCG), который выглядит запутанно только в статике. Воспроизведите логику в Python для проверки. 😎 

просто "запустите в gdb с брейкпоинтами" звучит так, будто ты никогда не пытался отлаживать бинарник, который собран с -O2 и -s, где все символы вырезаны, а оптимизатор размазал твою логику по регистрам в стиле «а давайте я этот цикл разверну и всё, что можно, заинлайню так, что даже сам автор не поймёт, где начинается функция, а где просто удачное стечение обстоятельств...

 



   
ОтветитьЦитата