Почти каждый, кто изучает язык ассемблера, рано или поздно пишет вирус, некоторые люди пишут вирус, когда заканчивают изучать какой-нибудь язык программирования... Прежде чем читать то, что я буду писать ниже и понимать хоть что-нибудь, вы должны: а) знать основные команды ассемблера б) уметь пользоватся АПИ-функциями в) взять где-нибудь (можно и у меня) TASM32 (можно и другой, но каждый компилятор имеет свои особенности). г) отладчик (если собираетесь собственноручно создать зверька, то без отладки довольно трудно найти ошибки) д) прогу, которая прикреплена (на неё вопит касперский, но это не вирус!!!! ) е) иметь здоровую голову (если вы хотите испортить все компы на Земле, то ваше место в больнице, а не здесь) ё) ПОМНИТЬ, ЧТО ЭТОТ МАТЕРИАЛ ПРЕДСТАВЛЕН ТОЛЬКО В ЦЕЛЯХ ОБУЧЕНИЯ, И ЗА ПОСЛЕДСТВИЯ Я НИКАКОЙ ОТВЕТСТВЕННОСТИ НЕ НЕСУ Вроде всё.
Теперь план обучения: 1) формат заголовка файла РЕ 2) разбор основных полей заголовка РЕ 3) методика заражения 4) дельта-смещение. 5) поиск АПИ 6) разбор используемых АПИ 7) пишем код 8) Reserved
check32: mov eax, [eax+4] xor ax, ax searchMZ: cmp word ptr [eax], 5A4Dh je IsPe sub eax, 10000h jmp searchMZ IsPe: mov edx, [eax+3ch] cmp [eax+edx], 4550h jne Exit ; этот кусок я объяснил
write: mov ecx, 8 ; начинаем переводить адрес в символы
; пихаем в esi адрес места, куда будем пихать символы mov esi, offset k_addr_str add esi, 7 ; с конца это делать удобней loops: mov ebx, eax ; сохраняем eax, мы будем его использовать and al, 0fh ; обнуляем старший байт cmp al, 0ah ; сравниваем с 10 jl mensh add al, 7h ; если больше, то имеем дело с символом mensh: add al, 30h pechat: mov byte ptr [esi], al ; суём al и строку (это уже печатный символ) dec esi ; указатель на следующую позицию mov eax, ebx ; достаём сохранённый еах shr eax, 4 ; убираем полбайта, которые обработали loop loops ; повторяем xor eax, eax ; обнулить еах для последующего использования в функции
push 30h push offset szTitle push offset szMessage push eax call MessageBoxA ; вызов функции вывода сообщения
Exit: push 0 call ExitProcess ; выход из проги end start
Можете компилировать и юзать. для компиляции: Tasm32.exe /m3 /ml /zi iasdf.asm , , ; Tlink32.exe /Tpe /aa /v iasdf, iasdf, ,import32.lib iasdf - имя проги юзать: запускать файл, в нашем случае iasdf.ехе. Если заметите ошибки в коде (или материале) - пишите, стучите, звоните... Просто писал перевод в символы без проверки (нет компилятора), используя не самый лучший алгоритм (просто он простой для понимания:))
Поюзав эту прогу на нескольких компах с разными операционками вы увидите, что база кернела вполне зафиксированное значение для каждой операционки.