- [Duke's Virus Labs #6] - [Page 23] - Опыт взлома AVP (c) by SMT/SMF Тут ко мне недавно заходил некто Flame посмотреть на мою хакерскую деятельность, и я решил показать ему, как ломаются программы под win32. Обьектом для нападения я избрал всеми любимый AVP, который очень досаждал меня своей эвристикой. (Тут, понимаешь, я поизменял сигнатуры у Win95.CIH'a, а он все равно, понимаешь, ругается, что, вот, мол, подозрание на win32 вирус...) Ну так вот, запускаю кучу программ (отладчик, SPY, и все такое - хотел еще registry monitor и file monitor запустить, но вот только куда бы их приспособить для крака я не придумал). Выясняю, значит, handl'ы окон AVP, кнопочек, листбоксов, и т.п. и ставлю брек поинт на сообщения windows, заодно там посмотрел в SDK, форматы вызовов сообщений. Ну вот, хочу, например, отследить нажатие кнопки ПУСК или добавление строки в listbox и тут меня засыпало кучей сообщений, которые посылает форточка в огромных количествах. Хотел тут профильтровать их и тоже обломился: попробуй угадай, как AVP взаимодействует с окнами - то ли LB_ADDSTRING, то ли LB_INSERTSTRING, а может и LVM_чего-нибудь... Вобщем, всемогущий GUI мне не помог. Тут меня все это стало доставать и я решил: что-ж, надо принимать действенные меры. Поставил точки останова на фунции работы с файлами, и в том месте, где читается блок из файла, указал не тот размер блока, т.е. вместо, скажем, нескольких килобайт поставил 0. Конечно же все заработало. Тут я сделал вид, какой я крутой хакер, и оставил AVP. Конечно, досадно было, что вместо тонкой работы пришлось продемонстрировать метод грубой силы... AVP после этого продолжала определять вирус в памяти, не распознавала архиваторы и упаковщики (pklite и т.п.) сканировала очень быстро - ну совсем не то, что хотелось получить. Потом я решил вернутся к этой работе и проделать ее как следовало бы... Прежде всего я посмотрел на имена библиотек и функций, вызываемых AVP, и очень обрадовался, когда увидел в AVPBASE.DLL AVP_AddMask, AVP_LoadBase, AVP_UnloadBase и особенно AVP_ProcessObject, которая и проверяла обьекты. Немного потрассировав последнюю функцию я нашел, где расположены проверки: (сначала даны виртуальные адреса, по которым грузится DLL, а потом смещения в файле AVPBASE.DLL) Итак, .10004b96 00003f96 - записать 00 - проверка памяти (теперь будет стоять на одном месте, т.е. проверять одну и ту же сигнатуру) .10003266 - здесь переход на сканирование архивов, лучше оставить как есть, чтобы создавать видимость проверки архивов. .1000329b - переход если найден pklite, diet, etc... та же ботва, что и с архивами... .1000331c 0000271c - а вот и обнаружение вируса. Поставим сюда байты E9 89 00 - и вирус не будет обнаружен... .1000346e 0000286e - что, думаете, вирусы не обнаруживаются и нам этого хватит? Нет, конечно! Запишем сюда 90 90 и даже подозрения теперь не будут нас беспокоить. Подведем итог - CRK-файл для применения на своих и чужих AVP: ===== Cut here ===== AVP 3.00 build 129 Comparing files AVPBASE.old and AVPBASE.dll AVPBASE.DLL 0000271C: 0F E9 0000271D: 84 89 0000271E: 88 00 0000286E: 74 90 0000286F: 0B 90 00003F96: 19 00 ===== Cut here =====