Введение:
Те кто в теме, кто знает и слышал никнэйм Ms-Rem думаю слышали и о его детище-головоломке игрушке кейгенми цель, которого предоставить реверсеру офигенный навык по работе с виртуальными машинами. Итак все по порядку:
Цель кейгенми:
Разработать приложение которое на заданное имя пользователя сгенерирует последовательность цифр,называемую серийным номером. Введя эти данные в Edit'ы кейгенми получить "Congratiolations"
Уровни защиты:
1. Уровень защиты это небольшая и не сложная полиморфная паковка, снимаемая на глаз.
2. Алгоритм работы скрыт в командах придуманого разработаного интерпретатора этих команд, т.е.виртуальной машины.Именно в логике этих команд и скрыт механизм генерации фраз поздравления или посыла крякера, а также проверке введенных данных.
Краткое описание виртуальной машины:
Машина очень напоминает математический абстрактный аппарат Машина Тьюринга, а также язык так называемый "брайнфак". В логике ВМ всего 8 команд и своя виртуальная память.
Обозначения:
eax - выступает в роли указателя на команду
lpVMMem - указатель на виртуальную память
lpInput - указатель на введенные пользователем данные
lpOutput - указатель на то куда будет ложиться результирующая строка, о результате сверки, затем толи вас пошлют, либо поздравят )
Описание:
Размер виртуальной программы - 0x3DA2 байт!
- 0 - увеличение на 1 численного значения указателя на виртуальную память
- 1 - уменьшение на 1 численного значения указателя на виртуальную память
- 2 - увеличение на 1 численного значения байта по указателю на виртуальную память
- 3 - уменьшение на 1 численного значения байта по указателю на виртуальную память
- 4 - копирование одного байти из входной последовательности в позицию виртуальной памяти куда указывает указатель на вирт. память. После увеличиваем на 1 указатель входных данных
- 5 - копирование одного байта из вирт.памяти в память по указателю выходных данных. Затем увеличение на 1 указателя выходных данных
- 6 - В случае если по указателю вирт. памяти хроанится 0, то вычисляется новое смещение и осуществляется переход
- 7- В случае если по указателю вирт. памяти байт не равен 0, то вычисляется новое смещение и осуществляется переход
Выводы:
При просмотре кода вирт программы можно сделать выводы:
- Существует одна инструкция "5" значит и выполняется несколько роза, т.е. ЦИКЛ. Тоже самое с "4" !
- Из-за обилия инструкций "2" и двух "0" можно сделать вывод что это генерация юникод-строк с фразами результата в вирт. памяти.
- Нет проверки аналогично cmp в привычной нам хакерам свято верящих в x86-64 архитектуру и следовательно защита может только проверить какие-то байты введенных байт, командами "6" или "7"
- В силу. п3 защита может вычислеть такое значение значение указателя на вирт. память, где хранится строка с результатом!
Все! ;) Остается пожелать удачи тем, кто хочет попробовать силы и найти ответ на вопрос : "Как именно защита вычесляет значение указателя на строку с правильным результатом ?
Комментариев нет:
Отправить комментарий