May 2010 Archives

Binary500 является исполняемым ELF'ом для SPARC V9. Дизассемблированный листинг на первый взгляд похож на смесь IA32 + ESA/390 в синтаксисе AT&T. После знакомства с архитектурой и используемыми соглашениями, все становится на свои места:
Процессор имеет 32 64-х битных регистров общего назначения: global %g0-%g7, out %o0-%o7, local %l0-%l7, in %i0-%i7, 32 регистра FPU и систему быстрых, но простых команд длиной 32 бита каждая. Некоторые регистры имеют особое назначение: %g0 всегда содержит ноль, %o6 также известен как %sp (stack pointer), %i6 - %fp (frame pointer), %o7 содержит адрес текущей инструкции при выполнении вызова подпрограммы и используется для определения адреса возврата. Регистры %o0-%o5 используются для передачи аргументов в процедуры, команда, save сохраняет и меняет mapping регистров в процедуре, и %i0-%i5 будут содержать значения из %o, то есть, переданные аргументы. %o0 содержит возвращаемое значение из процедуры.
Также стоит отметить специфику выполнения циклов: инструкция, следующая за командой условного перехода исполняется всегда. Но если условный переход не был выполнен, ее результат аннулируется.
Можно приступать к разбору.

Binary200 представляет собой обычный 32-х битный ELF. Наверное его можно позапускать, но это не наш метод.
IDA подсказала, что на борту имеется 2 больших функции sub_B40 (содержит connect + write) и main (содержит printf). Коннект показался интереснее.
В sub_B40 видим копирование 4-х массивов из области глобальных переменных в стековый буфер. Далее 2 цикла расшифровки скопированных буферов. Единственная сложность - это заметить циклы расшифровки, разбавленные весьма своеобразной реализацией функции вроде return (str + strlen(str)).
Расшифровав строки, получаем 'http://is.gd/bWsIR' и '192.168.69.77'. Конечно, сразу же смутил сокет типа AF_UNIX, а этот адрес укрепил подозрение в мусорности этого кода.
В main видим похожий код расшифрования и сразу сразу получаем ссылку http://is.gd/bUBRD, ведущую на фильм про зоофилию в Колумбии. Название страницы и есть ответ. Скрипт прилагается.

Binary300 - x86-64 ELF. IDA сказала, что он считает md5 от 256 байт по смещению 0 и смещению 17 от себя, проверят хеш по фильтру Блума и ксорит хеши с Encrypted Key, если хеш прошел проверку. Результат двух ксоров и есть Decrypted Key. Родилось предположение проверить хеши от всех смещений файла фильтром Блума, поксорить с Encrypted Key и получить флаг. Сначала была частично выдрана реализация фильтра из бинарника, но потом найдена здесь. В результате только хеши от 5 смещений проходили через фильтр. Высчитанные для них Decrypted Key не удовлетворили чекер.
Конвертация полученных Decrypted Key в строковое представление дало только одну корректную строку mYg0dthi$isD@k3y, которая и являлась флагом. К слову, этот Decrypted Key соответствует смещениям 0 и 17. То есть, для решения таска нужно было сконвертировать в строку Decrypted Key, который программа выводит при запуске. Скрипт прилагается.

About this Archive

This page is an archive of entries from May 2010 listed from newest to oldest.

April 2010 is the previous archive.

June 2010 is the next archive.

Find recent content on the main index or look in the archives to find all content.