Особенности дизассемблирования под LINUX на примере tiny-crackme



         

Исследование tiny-crackme извне и изнутри - часть 11


Рисунок 6 просмотр атрибутов единственного сегмента

Переходим сюда (<F5>, 0CFh, <Enter>) и видим, что здесь находится байт 84h. Сейчас мы должны расшифровать его, исправить и зашифровать опять. Как это сделать? Вообще-то есть много путей и все они правильные. Самое простое, наложить XOR. Ведь ключ шифрования нам известен — 3F5479F1h. Но вот в чем вопрос — какая именно часть ключа накладывается на данный байт? В смысле каким из четырех байтов шифровать? Это нетрудно выяснить математически. Начало шифроблока располагается по адресу 200004Bh, так? Тогда наш байт совпадает с 2000CFh - 20004Bh % 4 байтом ключа. Чтобы вычислить значение этого выражения в HTE достаточно войти в Edit->Evaluate и ввести его в калькулятор. Получится ноль. Значит, байт 2000СFh шифруемся первым байтом ключа. На x86 платформе он располагается по меньшему адресу, то есть в младших разрядах числа и в данном случае равен F1h. Не выходя из калькулятора даем 84h ^ F1h и получаем 75h, что в точности соответствует опкоду инструкции JNZ. Как следует из руководства Intel, инструкции JZ в свою очередь соответствует опкод 74h. Набираем в калькуляторе 74h ^ F1h и получаем 85h. Это и будет зашифрованное значение опкода JZ. Нажимаем <F4> для активации режима редактирования, записываем на место 84h значение 85h и нажимаем <F2> чтобы сохранить правку на диск. Как видно, после хака изменился всего один бит и этим битом оказался младший бит числа: 85h (10000101) à 84h (10000100). Это потому, что сами опкоды 74h (1110100) и 75h (1110101) различаются всего лишь младшим битом, а XOR – это битовая операция! Другими словами, если шифрование производится путем наложения XOR, то, чтобы превратить JZ в JNZ (или наоборот), независимо от ключа шифрования (!)

достаточно инвертировать младший бит шифротекста! И не нужно возиться со всеми этими расчетами!!! Возьмите себе этот трюк на заметку. Нам он еще пригодится. Выходим из редактора и с замираем сердца запускам timy-crackme…. Увы! Он не запускается! То есть запускается, конечно, но отказывается принимать пароль. Почему?




Содержание  Назад  Вперед