Самостоятельный поиск адреса KERNEL32.DLLПо мере появления новых версий Windows вирусы, использующие рассмотренный выше «метод предопределенных адресов», становятся неработоспособными. По этой причине вирусописатели чаще применяют более сложные методы, позволяющие обнаруживать «KERNEL32.DLL» в памяти, не опираясь на какие-либо заранее предопределенные адреса. В этих методах ключевым моментом является нахождение любого адреса, указывающего куда-нибудь внутрь «KERNEL32.DLL». После этого, сканируя память в сторону уменьшения адресов, можно по смещениям, кратным 10000h, рано или поздно обнаружить заветную сигнатуру ‘MZ’ .

Вот эти методы. Во-первых, загрузчик программ Windows сам пользуется в своей работе сервисными функциями «KERNEL32.DLL». Передача управления загруженной программе обычно выполняется из недр функции CreateProcessA командой CALL. Следовательно, при старте программы двойное слово на вершине стека должно указывать внутрь «KERNEL32.DLL».Вот фрагмент вируса Win32.Hortiga.4938, использующего эту методику:

Второй метод заключается в использовании цепочки структурных обработчиков исключений, первый элемент которой доступен по адресу FS:. Последний же элемент для большинства версий Windows «обитает» где-то внутри «KERNEL32.DLL». Следовательно, ссылка на него, расположенная в предпоследнем обработчике структурных исключений, и есть искомый адрес.

Еще интересные статьи :