Вирусы и другой вредоносный код



         

Стартовый код - часть 3


/p>

Листинг 3 …а так выглядят окрестности точки входа вируса Win2K.Inta.1676

Смотрите! В то время как "хорошая" программа лениво опрашивает текущую версию операционной системы и иже с ней, зловредный вирус сломя голову несется в объятья драйвера inf.sys. Правильные программы так себя не ведут, и коварность вирусных планов разоблачается с первого взгляда!

Разумеется, отсутствие стартового кода еще не есть свидетельство вируса! Быть может, исследуемый файл был упакован или разработчик применил нестандартный компилятор или набор библиотек. Ну, с упаковкой мы уже разобрались, а с идентификацией компилятора поможет справиться IDA и наш личный опыт (замечание: текущие версии IDA PRO определяют версию компилятора непосредственно по стартовому коду: если же он отсутствует или был изменен, механизм распознавания дезактивируется, и поиском подходящей библиотеки сигнатур нам приходится заниматься вручную, через меню File -> Load file -> FLIRT signature file). И если обнаружиться, что нормальный start-up у файла все-таки есть, но выполнение программы начинается не с него, – шансы на присутствие вируса значительно возрастут!

Троянские программы, в большинстве своем написанные на языках высокого уровня, имеют вполне стандартный Start-Up и потому на такую наживку не обнаруживаются. Взять например того же Kilez'a, стартовый код которого выглядит так:

.text:00408458     start       proc   near
.text:00408458 push ebp          ;      sub_408458
.text:00408459 mov ebp, esp
.text:0040845B push 0FFFFFFFFh
.text:0040845D push offset stru_40D240
.text:00408462 push offset __except_handler3
.text:00408467 mov eax, large fs:0
.text:0040846D push eax
.text:0040846E mov large fs:0, esp
.text:0040847B mov [ebp+var_18], esp
.text:0040847E call ds:GetVersion      ;      Get current version number of Windows
.text:004084AF xor esi, esi
.text:004084B1 push esi
.text:004084B2 call __heap_init
.text:004084C4 mov [ebp+var_4], esi
.text:004084C7 call __ioinit
.text:004084CC call ds:GetCommandLineA
.text:004084D2 mov dword_494E68, eax
.text:004084D7 call ___crtGetEnvironmentStringsA
.text:004084DC mov dword_493920, eax
.text:004084E1 call __setargv
.text:004084E6 call __setenvp
.text:004084EB call __cinit
.text:004084F0 mov [ebp+StartupInfo.dwFlags], esi
.text:004084F3 lea eax, [ebp+StartupInfo]
.text:004084F6 push eax        ;      lpStartupInfo
.text:004084F7 call ds:GetStartupInfoA
.text:004084FD call __wincmdln

Листинг 4 червь I-Worm.Kilez.h имеет стандартный стартовый код

Даже "невооруженным" глазом видно, что стартовый код червя идентичен стартовому коду Microsoft Visual C++ 6.0, что и не удивительно, так именно на нем червь и написан.




Содержание  Назад  Вперед