Раздел: Документация
0 ... 8 9 10 11 12 13 14 ... 102 Листинг 1.5. Атак выглядят окрестности точки входа вируса Win2K.Inta.1676 texf.DOOnOOO start text text text text text text text 0001ЮС0 0001Ю04 0001Ю0А 0001100D 00011013 00011019 0001101C proc near mov lea mov lea lea mov mov eax edx push push call or jnz mov retn [esp+arg 0] icc 11129 [eax+34h], edx edx. dword 117A0 eax. aHh [edx+8]. eax [eax+4J. aSystemrootSyst 1200h 0 ExAllocatePool eax. eax short loc 1103E eax. OCOOOOOOlh "HH" :"\\SystemRoot\\system32\\ driversWinf .sys" texf.OOOHOlC text:00011023 text:00011028 text:0001IC2D text:00011032 text:00011034 .text:00011036 . text:0001103B Смотрите, в то время как «хорошая» программа лениво опрашивает текущую версию операционной системы и иже с ней, зловредный вирус сломя голову несется в объятья драйвера inf.sys. Правильные программы так не поступают, и коварность вирусных планов разоблачается с первого взгляда! ПРИМЕЧАНИЕ-— Разумеется, отсутствие стартового кода еще не есть свидетельство вируса! Быть может, исследуемый файл был упакован или разработчик применил нестандартный компилятор/набор библиотек. Ну, с упаковкой мы уже разобрались, а с идентификацией компилятора поможет справиться IDA и ваш личный опыт. ПРИМЕЧАНИЕ Текущие версии IDA PRO определяют версию компилятора непосредственно по стартовому коду и если он отсутствует или был изменен, механизм распознавания дезактивируется и поиском подходящей библиотеки сигнатур нам приходится заниматься вручную, через меню File ► Load file ► FLIRT signature file. И если обнаружится, что нормальный start-up у файла все-таки есть, но выполнение программы начинается не с него, — шансы на присутствие вируса существенно возрастают! Троянские программы, в большинстве своем написанные на языках высокого Уровня, имеют вполне стандартный start-up и потому на такую наживку обнаруживаться не хотят. Взять, например, того же Kileza (листинг 1.6). Листинг 1.6. Стандартный стартовый код червя I-Worm.Kjlez.h text: te*t:00408458Dushebp:subj408458 text text text
Продолжение # Листинг 1.6 (продолжение)
Даже «невооруженным» глазом видно, что стартовый код червя идентичен стартовому коду Microsoft Visual С++ 6.0, что совсем не удивительно, поскольку именно на нем червь и написан. ТОЧКА ВХОДА При внедрении вируса в файл точка входа в него неизбежно изменяется. Лишь немногие из вирусов ухитряются заразить файл, не прикасаясь к последней. Вирус может вписать по адресу оригинальной точки входа jump на свое тело, слегка подправить таблицу перемещаемых элементов, вклиниться в массив RVA-адресов таблицы импорта, внедриться в незанятые области кодовой секции файла и т. д., однако ареал обитания таких особей ограничен преимущественно застенками лабораторий, и в дикой природе они практически не встречаются. Не тот уровень подготовки у вирусописателей, не тот... «Нормальные» точки входа практически всегда находятся в кодовой секции исполняемого файла (. text), точнее — в гуще библиотечных функций (Навигатор IDA PRO но умолчанию выделяет их голубым цветом), непосредственно предшествуя секции данных (рис. 1.3 и 1.4). Точки входа зараженного файла, напротив, чаще всего располагаются между секцией инициализированных и неинициализированных данных, практически у самого конца исполняемого файла. jcra наиболее вероятного внедрения вирусов ЮД. TETRIS.wce jf £* iwip Stm-ih ¥*»•> apUc>:id#(№. Hate• iKixi£J «Hi jdjJ*jgLkJ
•*c. 1.3. Так выглядит дизассемблерный листинг нормального файла. ">чка входа расположена внутри секции .text в гуще библиотечных vhkuuu, приходясь приблизительно на середину файла iK происходит потому, что при дозаписи своего тела в конеи ая» секция оказывается самой последней секцией инициализ) памяти, за которой простирается обширный регион неиници: -иных, без которого не обходится практически ни одна програ vc и демаскирует! Ни один из известных автору упаковщико айлов так себя не ведет, и потому ненормальное расположен высокой степенью вероятности свидетельствует о заражении г •ожег ли вирус внедриться в середину файла? Да, может, но дл> ется Разорвать себе задницу. Точнее - скорректировать все ылки между концом и началом файла, что очень и очень нет ЬШая тот факт, что всякая секция, независимо от ее физиче: может быть спроецирована по произвольному вирту;. пУс может обосноваться в кусочке незанятой памяти, остави кП1ия стартовых адресов секций по кратным адресам. (С ••«•«ого образа выравниваются но адресам кратным 2001 0 ... 8 9 10 11 12 13 14 ... 102
|