Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #80, АВГУСТ 2005 г.

Ручная троянизация

Крис Касперски ака мыщъх

Хакер, номер #080, стр. 080-120-5


HTE все ассемблирует правильно, но переходить к бацилле по перекрестной ссылке наотрез отказывается, считая, что ее нет. Нет - и не надо. Нажимаем <F2> (save), чтобы изменения возымели силу и выходим по <F10>.

C замиранием сердца запускам notepad.exe и… Оторвать мыщъх'у хвост, это работает!

[обход антивирусов]

И все бы было у нас хорошо, если бы антивирусы ни ругались на инфицированный файл. А они ругаются, причем матом, что портит нам весь бизнес и создает угрозу отрыва хвоста и детородного органа вместе с ним.

Вернемся к адресу 1006571h, в котором происходит передача управления на бациллу, и посмотрим, что тут можно предпринять:

100656a ! ff1594100001 call dword ptr [KERNEL32.dll:GetModuleHandleA]

1006570 ! 50 push eax

1006571 ! e88a9dffff call 1000300h

1006576 ! 894598 mov [ebp-68h], eax

1006579 ! 50 push eax

100657a ! ff1568110001 call dword ptr [MSVCRT.dll:exit]

Очевидно, антивирус отслеживает команду CALL, эмулируя ее выполнение. А как на счет передачи управления через ret? Интересно, сможет ли он с ним справиться? Давай, заменим CALL 1000300h на PUSH 1000300h/RET. Это ведь несложно. Правда, возникает одна проблема - чистый CALL на байт короче и этого самого байта нам как раз не хватает! К счастью, следом за CALL'ом расположена команда MOV [EBP-68h], EAX, копирующая код возврата в локальную переменную, а кому он сейчас нужен? Поэтому мы можем смело оттяпать от нее один байт и перекрыть оставшиеся два байта операциями NOP. Как вариант, можно перенести часть Start-Up кода внутрь бациллы, но в нашем случае это излишне.

Подводим курсор к 1006571h, жмем <Ctrl-A> и пишем PUSH 1000300h/RET/NOP/NOP. К сожалению, HTE позволяет ассемблировать только одну команду за раз, поэтому жать <Ctrl-A> приходится многократно. Еще необходимо в теле бациллы заменить JMP 100299Eh/RET на CALL 100299Eh/JMP 1006579h (мы ведь заменили CALL на эквивалент JMP'а, поэтому для достижения гармонии необходимо проделать обратную ему операцию).

Сохраняем изменения по <F2>, выходим и запускаем. Бацилла работает как миленькая, но антивирус уже не ругается. Обиделся, наверное. Или уснул.

Вообще, это не самый надежный антиантивирусный прием, зато самый простой! Остальные можно найти в статье «техника выживания в мутной воде или как обуть антивирус», опубликованной в одном из номеров Хакера.

[заключение]

Созданная нами бацилла предельно проста и пользы от нее немного. Но ведь и вреда никакого! Более сложные программы пишутся аналогичным способом и каждый из нас сможет справиться с этой задачей самостоятельно, так что не будем охлаждать творческий стимул и выдавать на гора кучу готовых полуфабрикатов.

Назад на стр. 080-120-4  Содержание  Вперед на стр. 080-120-6