Кто был автором первой антивирусной программы использовавшей эмулятор

Американский студент университета Южной Калифорнии Фред Коэн, 11 ноября 1983 года составил программу, демонстрировавшую возможность заражения компьютера со скоростью размножения вируса от 5 минут до 1 часа. На следующий год Коэн написал работу, в которой предвосхитил опасности распространения вирусов по компьютерным сетям, но и рассказал о возможности создания антивирусных программ.

Первый не лабораторный вирус, называющийся «Brain», способный заражать только дискеты, появился в январе 1986 года и имел пакистанское происхождение. А первая антивирусная программа была разработана в 1988 году.

Компьютерный вирус — вид вредоносного программного обеспечения, способного создавать копии самого себя и внедряться в код других программ, системные области памяти, загрузочные секторы, а также распространять свои копии по разнообразным каналам связи.

Основная цель вируса — его распространение, а нарушение работы программно-аппаратных комплексов — удаление файлов, приведение в негодность структур размещения данных, блокирование работы пользователей — часто является его сопутствующей функцией. Даже если автор вируса не запрограммировал вредоносных эффектов, вирус может приводить к сбоям компьютера из-за ошибок, неучтённых тонкостей взаимодействия с операционной системой и другими программами.

❌ ВИРУСЫ ❌ | История | Виды | Антивирус •

Кроме того, вирусы, как правило, занимают место на накопителях информации и потребляют ресурсы системы. Первыми известными вирусами являются Virus 1,2,3 и Elk Cloner для ПК Apple II, появившиеся в 1981 году. Зимой 1984 года появились первые антивирусные утилиты — CHK4BOMB и BOMBSQAD авторства Энди Хопкинса. В начале 1985 года Ги Вонг написал программу DPROTECT — первый резидентный антивирус.

Первые вирусные эпидемии относятся к 1986-1989 годам: Brain — распространялся в загрузочных секторах дискет, вызвал крупнейшую эпидемию, Jerusalem — проявился в пятницу 13 мая 1988 года, уничтожая программы при их запуске, червь Морриса — свыше 6200 компьютеров, большинство сетей вышло из строя на срок до пяти суток, DATACRIME — около 100 тысяч заражённых ПЭВМ только в Нидерландах.

Тогда же оформились основные классы двоичных вирусов: сетевые черви, «троянские кони», полиморфные вирусы, стелс-вирусы. Параллельно оформляются организованные движения как про-, так и антивирусной направленности: в 1990 году появляются специализированная BBS Virus Exchange, «Маленькая чёрная книжка о компьютерных вирусах» Марка Людвига, первый коммерческий антивирус Symantec Norton AntiVirus.

В 1992 году появились первый конструктор вирусов для PC — VCL, а также готовые полиморфные модули и модули шифрования для встраивания в новые вирусы.

Источник: rus.team

Кто был автором первой антивирусной программы использовавшей эмулятор

dregs dd 010 dup (?) ; буфер для хранения данных о регистрах использующихся в дешифрующих инструкциях

Что такое компьютерный вирус? Какой антивирус выбрать?

; disasm — дизассемблер, предназначается для «работы» с инструкциями
; Определяет тип, размер и параметры инструкции (использующиеся регистры, значения и тд). В том
; случае, если данные присутствуют в базе.
; Данные о дешифрующих инструкциях (количество регистров использующихся для указания
; смещения расшифровываемых данных и регистры) складываются в буффер «dregs».
; on start : oins — смещение инструкции
; on exit : eax = -1 если указанная инструкция неизвестна процедуре
; ecx — размер инструкции
; eax, edx — параметры, использующиеся в инструкции
disasm proc oins: dword
mov dword ptr [dregs],0
sub ecx,ecx
push esi ; запомним значение
mov esi,oins ; esi — смещение инструкции
lodsb ; al — первый байт инструкции
; по первому байту распознаем тип инструкции
cmp al,004h
cmp al,005h
cmp al,02bh
cmp al,030h
cmp al,031h
cmp al,040h
jc unknown_instr
cmp al,047h
cmp al,050h
jc unknown_instr
cmp al,057h
jc unknown_instr
cmp al,05Fh
cmp al,060h
cmp al,080h
cmp al,081h ; может быть XOR/ADD/SUB [EREG],DD
cmp al,083h
cmp al,08Dh
cmp al,09Ch
cmp al,09Dh
cmp al,0B0h
jc unknown_instr
cmp al,0B7h
cmp al,0B8h
jc unknown_instr
cmp al,0BFh
cmp al,0C3h
cmp al,0E2h
cmp al,0E8h ;
cmp al,0E9h ; требуют одинакового разбора
unknown_instr:
sub eax,eax ; инструкции нет в базе
dec eax ; eax = -1
disasm_ret:
pop esi ; вспомним оригинальное значение и …
ret ; выйдем в .
; inc [ereg] 10000reg
xor al,1000000b ; eax — регистр «ereg»
inc ecx ; ecx — размер инструкции
jmp disasm_ret
; push [ereg] 1010reg
xor al,1010000b ; eax — регистр «ereg»
inc ecx ; ecx — размер инструкции
jmp disasm_ret
; pop [ereg] 1011reg
xor al,1011000b ; eax — регистр «ereg»
inc ecx ; ecx — размер инструкции
jmp disasm_ret
; sub [eregA],[eregB] 02BHEX, 11rgArgB
xor al,11000000b
call two_regs ; edx — «rgA» / eax — «rgB»
inc ecx ; ecx — размер инструкции
jmp disasm_ret
; xor [eregA+eregB],reg 030HEX, 00reg100, 00rgArgB
call two_regs ; edx — «rgA» / eax — «rgB»
mov cl,3 ; ecx — размер инструкции
inc dword ptr [dregs]
mov dword ptr [dregs+008],eax
; xor [eregA],[eregB] 031HEX, 00rgArgB
call two_regs ; edx — «rgA» / eax — «rgB»
inc ecx ; ecx — размер инструкции
inc dword ptr [dregs]
mov dword ptr [dregs+004],edx
jmp disasm_ret
; add al,byte 004HEX, byte
mov cl,2 ; ecx — размер инструкции
sub eax,eax ; eax — значение рег. (al)
jmp disasm_ret
; add eax,dword 005HEX, dword = 5 bytes
mov cl,5 ; ecx — размер инструкции
sub eax,eax ; eax — значение рег. (eax)
jmp disasm_ret
; add [reg],byte 080HEX, 11000reg, byte
cmp al,0c0h
jc unknown_instr
cmp al,0c7h
ja unknown_instr
xor al,11000000b ; eax — значение рег. (eax)
mov cl,3 ; ecx — размер инструкции
jmp disasm_ret
; xor [ereg],dword 081HEX, 00110reg, dword = 6 bytes
; add [ereg],dword 081HEX, 11000reg, dword = 6 bytes
; sub [ereg],dword 081HEX, 11101reg, dword = 6 bytes
; add [ereg],byte 083HEX, 11000reg, byte = 3 bytes
; sub [ereg],byte 081HEX, 11101reg, byte = 3 bytes
lodsb ; al — второй байт инструкции
cmp al,037h ; если байт больше 37HEX
xor al,00110000b ; используемый в инструкции
inc dword ptr [dregs]
mov dword ptr [dregs+004],eax
jmp disasm_ret ; регистр кладем в EDX
cmp al,0C7h ; если байт больше 37HEX
xor al,11000000b
jmp disasm_ret ; разбор инструкции «add»
xor al,11101000b
jmp disasm_ret ; разбор инструкции «sub»
; lea ergA,ergB+dword 08DHEX,10rgArgB, dword
xor al,10000000b ; оставим в al только регистры
call two_regs ; edx — «rgA» / eax — «rgB»
mov cl,6 ; ecx — размер инструкции
jmp disasm_ret
; mov [reg],byte 10110reg, byte
xor al,10110000b ; eax — регистр «reg»
inc ecx ; ecx — размер инструкции
jmp disasm_ret
; mov [ereg],dword 10111reg, dword
xor al,10111000b ; eax — регистр «ereg»
mov cl,5 ; ecx — размер инструкции
jmp disasm_ret
; loop byte 0E2HEX, FE-byte = num ; jump to IP-num
sub eax,eax
mov al,0feh ; al = 0FE
sub al,byte ptr [esi] ; al = 0FE-byte
inc ecx ; размер инструкции
jmp disasm_ret
; call dword 0E8HEX, dword
; jmp dword 0E9HEX, dword
lodsd ; eax — dword
mov cl,5 ; ecx — размер инструкции
jmp disasm_ret
; разбор простейших однобайтовых инструкций
sub eax,eax
jmp disasm_ret
; two_regs — если регистр al содержит 00rgArgB (где rgA, rgB два регистра)
; то на выходе edx — rgA, eax — rgB
two_regs proc
shr al,3 ; al = regB
xor dl,al ; dl = regA

Читайте также:
Программа Почта России для компьютера инструкция по применению на русском

  1. Инструкция запускается «напрямую», но в специальной среде.
  2. Исполнение инструкции имитируется полностью, без запуска.
  3. Исполнение инструкции имитируется до или после запуска в специальной среде.
  • Значения регистров и флагов из переменных.
  • Изменить указатель на буфер стека, что бы стек эмулируемого блока не использовался в ходе работы эмулятора, а только во время исполнения или имитации инструкций блока. В противном случае стек будет портиться.

.data ; сегмент данных
regs dd 8 dup (?) ; переменная под значения регистров эмулируемого блока
flags dd ? ; переменная под значения флагов эмулируемого блока
temp dd ? ; переменная под значение флагов программы-эмулятора
; «instr_buf» — переменная под исполняемую инструкцию и имитацию стека
; должна содержать:
; mov dword ptr [set_esp+1],esp
; mov esp,dword ptr [regs+16]
; исполняемая инструкция
; mov dword ptr [regs+16],esp
; set_esp:mov esp,?
; ret
instr_buf: db 30 dup (?)
.code ; сегмент кода
; «прямой запуск» инструкции в (карантине) специальных условиях
; запомним значение регистров программы-эмулятора в стеке
run_instr: push eax ecx edx ebx ebp esi edi
; запомним значение флагов программы-эмулятора в стеке, затем перенесем в регистр eax,
; а из него в переменную «temp»
mov eax,dword ptr [esp]
mov dword ptr [temp],eax
; значение флагов эмулируемого кода перенесем из переменной «flags» в регистр eax,
; а из него в стек использующийся программой-эмулятором
mov eax,dword ptr [flags]
mov dword ptr [esp],eax
; установим значения регистров эмулируемого кода из переменной «regs»
; значение esp не устанавливается, иначе мы рискуем испортить значение флагов эмулируемого кода
; стек будет перенаправлен в подпрограмме «instr_buf»
mov eax,dword ptr [regs+000]
mov ecx,dword ptr [regs+004]
mov edx,dword ptr [regs+008]
mov ebx,dword ptr [regs+012]
mov ebp,dword ptr [regs+020]
mov esi,dword ptr [regs+024]
mov edi,dword ptr [regs+028]
; инструкция «popfd» установит значение флагов эмулируемого кода, которое мы сохраняли выше
call instr_buf ; запустим на исполнение инструкцию
; сохраним новые значения регистров эмулируемого кода в переменной «regs»
mov dword ptr [regs+000],eax
mov dword ptr [regs+004],ecx
mov dword ptr [regs+008],edx
mov dword ptr [regs+012],ebx
mov dword ptr [regs+020],ebp
mov dword ptr [regs+024],esi
mov dword ptr [regs+028],edi
; новое значение флагов эмулируемого кода запомним в стеке, затем перенесем в регистр eax
; и сохраним в переменной «flags»
mov eax,dword ptr [esp]
mov dword ptr [flags],eax
; установим значение флагов программы-эмулятора из переменной «temp»
mov eax,dword ptr [temp]
mov dword ptr [esp],eax
; восстановим значение регистров программы-эмулятора
pop edi esi ebp ebx edx ecx eax

Читайте также:
Что входит в программу мать и дитя

Для эмуляции стека, в самом начале своей работы (во время инициализации) эмулятор должен установить значение регистра esp эмулируемого блока на конец специально отведенного для этих целей буфера. Например:

.data ; сегмент данных
buf_stack db 50000 dup (?)
.code ; сегмент кода
mov edx,offset buf_stack+50000
mov dword ptr [regs+16],edx

4.2.2. Полная имитация исполнения инструкции

Этот алгоритм применяется там, где нельзя обойтись запуском в специальной среде. В программе-эмуляторе из примера, я использовал регистр “esi”, что бы указывать на смещение исполняемой в «данный момент» инструкции. Обычно полностью имитируется (совершаются различные действия, которые и будут являться аналогом работы инструкции) выполнение инструкций, которые изменяют этот указатель, т.е. CALL, JUMP, LOOP, RET и т.д.

Не будем ходить далеко и в качестве примера возьмем простейшую инструкцию LOOP:

Инструкция LOOP уменьшает значение регистра ECX на единицу, если после этого значение ECX не равняется нулю, то переводит указатель на указанную позицию.

dec dword ptr [regs+4]
cmp dword ptr [regs+4],0
jz проверка на остановку эмуляции (emulate_check в программе примере)
изменяем местоположение регистра esi, используя данные инструкции LOOP
jmp проверка на остановку эмуляции

  1. Дизассемблер разбирает инструкцию, и после его работы передает информацию о размере инструкции и регистрах, которые используются ней в программу-эмулятор. В нашем случае регистр edx будет содержать номер регистра erega, а eax номер eregb.
  2. Значения регистров эмулируемого кода содержится в буфере regs, под каждый регистр дается по 4 байта буфера. Последовательность регистров: eax, ecx, edx, ebx, esp, ebp, esi и edi.
  3. При вызове эмулятора, ему передается предыдущее расположение эмулируемого кода в памяти (переменная ip)!

call get_ip
get_ip: pop ebp
sub ebp, offset get_ip

Читайте также:
Какую программу для записи использует куплинов

Если прибавить значение регистра ebp, к любому смещению получается «необходимое» нам, новое (смещение).

Теперь рассмотрим участок кода, который производит замену значения регистра использующегося в инструкции для указания смещения (если, конечно же, замена необходима):

Источник: wasm.in

Теория самовоспроизводящихся механизмов

Основы теории самовоспроизводящихся механизмов заложил американец венгерского происхождения Джон фон Нейман, который в 1951 году предложил метод создания таких механизмов.

Jan 1, 1957

Статья о самовоспроизводящихся механических структурах

Первой публикацией, посвящённой созданию самовоспроизводящихся систем, является статья Л. С. Пенроуз в соавторстве со своим мужем, нобелевским лауреатом по физике Р. Пенроузом, о самовоспроизводящихся механических структурах, опубликованная в 1957 году американским журналом Nature. В этой статье, наряду с примерами чисто механических конструкций, была приведена некая двумерная модель подобных структур, способных к активации, захвату и освобождению.

Jan 1, 1961

Изобретение необычной игры

Feb 1, 1980

Дипломная работа по теме «Самовоспроизводящиеся программы»

Студент Дортмундского университета Юрген Краус подготовил дипломную работу по теме «Самовоспроизводящиеся программы», в которой помимо теории приводились так же и листинги строго самовоспроизводящихся программ (которые вирусами на самом деле не являются) для компьютера Siemens.

Jan 1, 1981

Первые известные вирусы

Первыми известными вирусами являются Virus 1,2,3 и Elk Cloner для ПК Apple II. Оба вируса очень схожи по функциональности и появились независимо друг от друга с небольшим промежутком во времени в 1981 году.

Mar 14, 1981

Первый загрузочный вирус для ПЭВМ Apple II

Ричард Скрента написал один из первых загрузочных вирусов для ПЭВМ Apple II — ELK CLONER. Он обнаруживал своё присутствие сообщением, содержащим небольшое стихотворение: ELK CLONER:
THE PROGRAM WITH A PERSONALITY
IT WILL GET ON ALL YOUR DISKS
IT WILL INFILTRATE YOUR CHIPS
YES, IT’S CLONER
IT WILL STICK TO YOU LIKE GLUE
IT WILL MODIFY RAM, TOO
SEND IN THE CLONER!

Sep 14, 1981

Вирусы для MS-DOS 3.3 для ПЭВМ Apple II

Другие вирусы для Apple II были созданы студентом Техасского университета Aвирус» был предложен научным руководителем Коэна Леном Эдлманом, однако именно Коэна принято считать автором термина «компьютерный вирус».

Jan 1, 1985

Список «Грязная дюжина — список опасных загружаемых программ»

В 1985 году Том Нефф (англ. Tom Neff) начал распространять по различным BBS список «Грязная дюжина — список опасных загружаемых программ» (англ. The Dirty Dozen — An Unloaded Program Alert List), в котором были перечислены известные на тот момент программы-вандалы. В дальнейшем этот список, включающий большинство выявленных троянских программ и «взломанные» или переименованные копии коммерческого программного обеспечения для MS-DOS, стал широко известен под кратким названием «грязная дюжина».

Источник: www.timetoast.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru