Мы решили учесть пожелания читателей нашего блога и подготовили небольшую статью о том, как можно извлечь код разблокировки из блокера. Отвечает старший вирусный аналитик «Лаборатории Касперского» Вячеслав Закоржевский!..
Для разбора мной был выбран один из представителей нового семейства Trojan-Ransom.Win32.Mbro. Эти блокеры заражают MBR и вымогают деньги у пользователя за снятие блокировки компьютера.
Я решил не углубляться в разбор процесса попадания зловреда на компьютер и алгоритма заражения загрузочного сектора, а сразу приступить к анализу модифицированного MBR’а. Итак, после запуска рассматриваемого блокера операционная система уйдет в перезагрузку, а при последующей загрузке компьютера отобразится следующий текст.
Сообщение, появляющееся при загрузке компьютера после запуска блокера
Ниже представлены скриншоты начальных секторов жесткого диска до и после их заражения блокером.
Начальные секторы жесткого диска до заражения
Фрагмент той же самой области жесткого диска после заражения
Отчетливо видно, что начало жесткого диска значительно преобразилось – добавился дополнительный код, EGA-паттерны и текст, который был приведен на первой картинке.
Ниже я буду поэтапно расписывать весь функционал модифицированной Master Boot Record, а в конце статьи будет приведена полная схема, содержащая секторы, используемые блокером, и их назначение. Для отладки MBR’а я использовал комбинацию IDA и Bochs for Windows.
Первым делом вредоносный код считывает девятый сектор и сохраняет его по адресу 0186A:0000. Затем, на него выполняется переход с помощью CALLF 0186A:0000.
Фрагмент кода, выполняющий чтение девятого сектора
Далее, происходит проверка текущей даты и времени с эталонным значением. В моем случае, это значение (очевидно, представленное в удобном виде) равнялось 04.06.2011 15:04. Сообщение с требованием об оплате будет появляться только в том случае, если текущий отпечаток времени меньше, чем эталонный. А если он больше, то блокер восстанавливает оригинальный МБР и загружает компьютер, как ни в чем не бывало. Время и дата получаются напрямую из BIOS’а при помощи следующей последовательности команд:
mov al, x
out 70h, al
in al, 71h
aam 10h
aad
Где ‘x’ принимает разные значения в зависимости от того, что требуется получить. Стоит отметить, что BIOS возвращает числа в формате BCD. Инструкции AAM и AAD преобразовывают эти числа в hex.
Если проверка на время и дату прошла успешно, то зловред зачитывает секторы с третьего по пятый включительно. В третьем и четвертом содержатся так называемые «user font table», а в пятом – текст, отображаемый при загрузке. Для применения собственного «стиля» (громко сказано) написания текста вызывается INT 10h. Далее, зачитываются секторы 5-8 включительно, и выводится текст, содержащийся в пятом и нулевом секторах (“Enter Code:»).
Фрагмент кода, выводящий на экран текст
После этого начинает работать цикл проверки введенного текста. Цикл реализован следующим образом. Вначале вызывается инструкция INT 16h. Это прерывание возвращает в AX значение нажатой кнопки (AH = скан-код, AL – символ) клавиатуры:
mov ah, 0
push di
int 16h
pop di
jmp short loc_7CC7
Потом идет проверка на введенный символ. Если он находится между 20h и 7Fh, то его значение записывается по ES:DI при помощи инструкции STOSB. Если же была нажата клавиша Enter (0Dh), то выполняется проверка введенной и эталонной строки при помощи REPE CMPSB.
Сравнение введенной строка и кода разблокировки
Из скриншота видно, что по адресу ES:7DA5 находится строка, необходимая для разблокировки загрузки компьютера. Вот что находится по этому адресу: '002158RD',0. А так как в CL заносится число «6», то это означает, что достаточно ввести лишь «002158».
Если введен корректный код, то зловред берет из второго сектора оригинальный MBR и записывает его в начало жесткого диска.
Сектора, используемые блокером:
1 – основной код;
2 – оригинальный первый сектор;
3 – 4 – user font tables;
5 – 6 – текст, выводимый пользователю;
7 – 8 – сектора заполнены нулями;
9 – код, выполняющий сверку текущей даты и времени;
P.S. А можно было просто из Hiew «глазами» посмотреть на начало жесткого диска и найти пресловутый код.
Теперь, если каким-то чудом вы подцепите подобную штуковину, для вас не составит труда разблокировать ее самостоятельно. Но в случае заражения неопознанными объектами вам следует пройти по ссылке http://support.kaspersky.ru/viruses/deblocker. Буду рад ответить на все вопросы в комментариях.
Для разбора мной был выбран один из представителей нового семейства Trojan-Ransom.Win32.Mbro. Эти блокеры заражают MBR и вымогают деньги у пользователя за снятие блокировки компьютера.
Я решил не углубляться в разбор процесса попадания зловреда на компьютер и алгоритма заражения загрузочного сектора, а сразу приступить к анализу модифицированного MBR’а. Итак, после запуска рассматриваемого блокера операционная система уйдет в перезагрузку, а при последующей загрузке компьютера отобразится следующий текст.
Сообщение, появляющееся при загрузке компьютера после запуска блокера
Ниже представлены скриншоты начальных секторов жесткого диска до и после их заражения блокером.
Начальные секторы жесткого диска до заражения
Фрагмент той же самой области жесткого диска после заражения
Отчетливо видно, что начало жесткого диска значительно преобразилось – добавился дополнительный код, EGA-паттерны и текст, который был приведен на первой картинке.
Ниже я буду поэтапно расписывать весь функционал модифицированной Master Boot Record, а в конце статьи будет приведена полная схема, содержащая секторы, используемые блокером, и их назначение. Для отладки MBR’а я использовал комбинацию IDA и Bochs for Windows.
Первым делом вредоносный код считывает девятый сектор и сохраняет его по адресу 0186A:0000. Затем, на него выполняется переход с помощью CALLF 0186A:0000.
Фрагмент кода, выполняющий чтение девятого сектора
Далее, происходит проверка текущей даты и времени с эталонным значением. В моем случае, это значение (очевидно, представленное в удобном виде) равнялось 04.06.2011 15:04. Сообщение с требованием об оплате будет появляться только в том случае, если текущий отпечаток времени меньше, чем эталонный. А если он больше, то блокер восстанавливает оригинальный МБР и загружает компьютер, как ни в чем не бывало. Время и дата получаются напрямую из BIOS’а при помощи следующей последовательности команд:
mov al, x
out 70h, al
in al, 71h
aam 10h
aad
Где ‘x’ принимает разные значения в зависимости от того, что требуется получить. Стоит отметить, что BIOS возвращает числа в формате BCD. Инструкции AAM и AAD преобразовывают эти числа в hex.
Если проверка на время и дату прошла успешно, то зловред зачитывает секторы с третьего по пятый включительно. В третьем и четвертом содержатся так называемые «user font table», а в пятом – текст, отображаемый при загрузке. Для применения собственного «стиля» (громко сказано) написания текста вызывается INT 10h. Далее, зачитываются секторы 5-8 включительно, и выводится текст, содержащийся в пятом и нулевом секторах (“Enter Code:»).
Фрагмент кода, выводящий на экран текст
После этого начинает работать цикл проверки введенного текста. Цикл реализован следующим образом. Вначале вызывается инструкция INT 16h. Это прерывание возвращает в AX значение нажатой кнопки (AH = скан-код, AL – символ) клавиатуры:
mov ah, 0
push di
int 16h
pop di
jmp short loc_7CC7
Потом идет проверка на введенный символ. Если он находится между 20h и 7Fh, то его значение записывается по ES:DI при помощи инструкции STOSB. Если же была нажата клавиша Enter (0Dh), то выполняется проверка введенной и эталонной строки при помощи REPE CMPSB.
Сравнение введенной строка и кода разблокировки
Из скриншота видно, что по адресу ES:7DA5 находится строка, необходимая для разблокировки загрузки компьютера. Вот что находится по этому адресу: '002158RD',0. А так как в CL заносится число «6», то это означает, что достаточно ввести лишь «002158».
Если введен корректный код, то зловред берет из второго сектора оригинальный MBR и записывает его в начало жесткого диска.
Сектора, используемые блокером:
1 – основной код;
2 – оригинальный первый сектор;
3 – 4 – user font tables;
5 – 6 – текст, выводимый пользователю;
7 – 8 – сектора заполнены нулями;
9 – код, выполняющий сверку текущей даты и времени;
P.S. А можно было просто из Hiew «глазами» посмотреть на начало жесткого диска и найти пресловутый код.
Теперь, если каким-то чудом вы подцепите подобную штуковину, для вас не составит труда разблокировать ее самостоятельно. Но в случае заражения неопознанными объектами вам следует пройти по ссылке http://support.kaspersky.ru/viruses/deblocker. Буду рад ответить на все вопросы в комментариях.