Как правило, вначале антивирус проверяет файл по сигнатуре, сравнивая его со своей базой , если ничего не обнаружено, запускается эмулятор. антивирус как бы создает свою среду (буфер), в который загружает исследуемый код, далее определяется глубина погружения в мкс (примерно) и начинается выполнение всех инструкций как в ольге.
глубина т.е время которое сканирует антивирус может меня вовремя сканирования, например антивирус обнаружил паковку и.т.п. однако все это должно быть в умеренном режиме, иначе процесс сканирования будет чрезвычайно долгим.
по мере распаковки файла антивирус сверяет его со своей базой, и как только обнаружит вредоносную сигнатуру, сообщает об этом.
Есть несколько подходов обнаружения вирусов, сигнатурный (по характерным сегментам кода), и эвристический по поведению (например честной программе незначем скрывать свой прочес в диспетчере задач).
тоесть если закриптовать файл антивирь тока скажет что не может проверить, так , допустим , тогда вопрос - а дальше при запуске зашифрованного файла разве нет над ним контроля? делает что хочет????
Все ваши крипторы приват не приват в большинстве своем до одного места. После распаковки "пинча" он перестанет быть критованым файлом и снова станет "пинчем"
на диске ли он или в памяти. Если авер написан грамотно и "наглухо погружен в МКС" :-) то ваш файл полюбому спалят. Для этого в крипторы встраивают анти... эмуляцию, эвристику ляляля. Но при хорошем антивирусе это не поможет. Хотя в данный момент таковых нет
Антивирусы очень много чего не эмулируют.
допустим вам нужно закриптовать пинч возмем самый простой способ каждый байт подвергнем хором с рандомным ключом + добавим рандомное число байт это же число вставим в стаб. эвристик конечно распакует все это тогда в дело вступает анти эмуляционные трюки.
нужно заставить эмулятор пойти по ложному следу к примеру использовать такие команды о которых незнает эмулятор а программа выполнит их и пойдет по нужному пути.
вот один пример.
можно использовать сложную цепочку передачи из памяти в ммх из ммх в FPU ну а там можно к примеру в SSE далее прибавить к ним число которое тоже будет генерироваться подобным образом при этом в SSE у тебя должен получиться набор байт при вкладывании которых должна получиться команда push и байты после чего в стеке получим уже готовый ничем не эмулированный набор команд каких? ну тут уже вам решать. это один из способов сложной анти эмуляции осталось добавить генерацию использования разных ММХ SEE и FPU регистров ну и цифра которая будет прибавляться к каждому байту в SSE тем самым эмулировать будет еще сложней.
собирается этот код в обратном порядке.
к примеру конечные байты это и будет выход из бесконечного цикла,программа все это поймет и выпрыгнет а эмулятор зависнит.
р.с правда в случии с пинчем это не поможет антивирусы палят его местоположение при запуске imageBase придеться и его сменить ну и постовить заглушку DOS.
вот после этого он точно не спалиться.
хотя при запуске проактивка все равно его спалит.
Последний раз редактировалось Грот; 27.01.2009 в 06:25..