Продолжаем обсуждение вопроса получения IDA без watermarks (предыдущие посты: пост
о невозможности купить IDA, пост
о watermarks в IDA).
Ссылка на автоматический перевод на английский язык этой записи. (Если будет надо, переведу условно-нормально).
Итак, на текущий момент с ida.wll и ida64.wll ситуация следующая: код и данные переставлены от билда к билду. (Подробнее
см. вчерашний пост).
Соответственно, что можно сделать?
Для разработки данной утилиты не нужно обладать доступом к нескольким копиям одной и той же версии IDA. На данный момент достаточно китайской IDA v6.1 и IDA v6.1 Demo.
Задачу можно сформулировать следующим образом. Нужно написать утилиту (кстати, это может быть и плагин к IDA), которая по бинарному представлению, по .asm'у, или по какому еще иному представлению сможет:
- пересортировать код в одинаковом порядке
- пересортировать данные в одинаковом порядке (можно пока не делать)
Схематично:
На каждую область кода (условно - функцию) можно насчитать разряженный хэш. В блок хэшируемых данных не должны входить релоцируемые участки. После этого произвести расчет таких хэш-блоков функций, составив текстовый отчет вида: хэш - имя экспорта (если есть) - offset. После этого произвести сортировку, например, по хэшам, таким образом "нормализировав" файл-отчет (вообще, неважно как делать сортировку, лишь бы ее логика была одинаковой для разных файлов). После этого произвести сравнение полученных отчетов без учета оффсетов (подготовить файлы без них). Сравнить насколько много совпадений/отличий и есть ли они вообще. (Чтобы было понятно, что такая схема вполне рабочая, посмотрите
этот пост - он на другую тему, но некая аналогия прослеживается).
(В схеме не рассмотрены возможные проблемы с chunks и другие вещи, связанные с global optimizations, но нужно смотреть, есть ли они на практике в этих бинарных файлах).
Это первый этап, на котором можно остановиться, чтобы сравнить: отличается ли код или нет.
После отладки этой утилиты (на IDA v6.1 Demo vs китайская IDA v6.1), я смогу передать ее для проведения аналогичных сравнений другого легального пакета с китайской IDA.
По результатам этого анализа (и демо, и полноценного релиза), можно будет скорректировать дальнейшие планы.
Так же стоит продумать каким образом произвести пересортировку данных - речь о константах (.rdata) и переменных (.data). Каким образом их выделять (существует ряд проблем по определению границ и вообще пониманию что есть данные). Важно не забывать, что здесь не ситуация "мы имеем один файл и нужно четко понимать где данные". А ситуация: "мы имеем два файла, где *одинаковые* данные лежат чуть по-разному". Это реально разные вещи в плане анализа. Кроме того, перестановки осуществлены не над "единицами" данных (атомарными кусками), а над целыми кластерами, которые гораздо проще выделять для сравнения в общем массиве (секции).
Теоретическая программа максимум: после создания утилиты, которая сможет произвести соответствующую пересортировку кода и данных, ее можно будет запустить на различные ida*.wll. По результату работы будут сформированы псевдо-одинаковые файлы, которые можно будет сравнивать уже бинарно. По результатам этого анализа можно будет сказать есть ли отличия, какие, в чем. Дальше принять решение. Если все обходится, то можно будет пересобрать совершенно другой PE, с другими перестановками.
Если кто хочет поучаствовать - приглашаю. Можно делать самостоятельно, можно организовываться. По-моему, достаточно неплохой и интересный crackme.
Что нужно: ida.wll от китайской IDA v6.1 и ida.wll от IDA v6.1 Demo (там не будет некоторых функций, плюс часть кода может отличаться; на этих файлах следует только отладить, выводы делать не стоит). Этого достаточно для написания и тестирования этого кода.
На всякий случай дистрибутив IDA v6.1 Demo сохранен. Сами понимаете, мало ли припадок какой будет.
Так же напоминаю, что на текущий момент до сих пор не сравнены различные версии HexRays. Пишите мне - sp0raw@mail.ru, ICQ 38890179 / 667169.
P.S. На текущий момент сравнение произведено с одним дистрибутивом. Несколько еще на подходе. Активнее, для общего дела!