Ручная троянизация Крис Касперски ака мыщъх Хакер, номер #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>, выходим и запускаем. Бацилла работает как миленькая, но антивирус уже не ругается. Обиделся, наверное. Или уснул. Вообще, это не самый надежный антиантивирусный прием, зато самый простой! Остальные можно найти в статье «техника выживания в мутной воде или как обуть антивирус», опубликованной в одном из номеров Хакера. [заключение] Созданная нами бацилла предельно проста и пользы от нее немного. Но ведь и вреда никакого! Более сложные программы пишутся аналогичным способом и каждый из нас сможет справиться с этой задачей самостоятельно, так что не будем охлаждать творческий стимул и выдавать на гора кучу готовых полуфабрикатов. |