ПредишенСледващото

Вирусът на асемблер

На главата, ще се научите как да се сложи вирус във временната памет, как да се прехвърлят контрол към него, като се опитва да намери файла.

Ние ще заразява само * .COM-файлове! Ако имате време и желание да имаме, можем да напишем вирус, който заразява и * .EXE файлове.

  • Virus "прикрепен" към файла без да нарушава нейната ефективност?
  • Какво трябва вирус на първо място?
  • Как да прехвърля управлението на вируса от програмата на някой друг?

Оказва се, нещо като това:

Програма след инфекция:

Усложнена? Сравнете двете парчета код: неинфектирания и заразената програма. Трябва да е ясно.

Сега ние ще се практикува.

Първият ред - 0,286 - разказва асемблер, която ще използвате тези инструкции (команди, оператори) 286 процесора. Т.е. 8086 на нашия компютър вирусът вече няма да работи!

От първия байт мине да се поставя етикет Init (инициализиране на нашия вирус).

Веднага има проблем: когато функция за търсене на файлове DOS ние clobbered на DTA "програма-жертва".

И тогава там е вторият проблем, по-точно, въпросът е: каква е ДТА и защо имате нужда от него? Това ще разгледаме по-късно.

afd.exe формат C: / с / у

Защо всичко това? А освен това, когато се опитваме да търсим повече от един файл, а след това да го намерите, ние Трудно команден ред (L_c: / с / у). Оказва се, че "програма-жертва", на които ние "вдигне" няма да може да се чете на параметрите, които бяха приети от потребителя. В този случай - това дЕ / с / у.

Има два начина, по този въпрос.

1. Запазете файла на програмата за търсене на PSP. И тогава, като ни вирус е работил, за да го възстанови.

2. Настройте ДТА в друга област на паметта и след това да ги възстановите. Това ни позволява да функционират 1Ah 21h прекъсва:

Ние ще избере втория път.

Mov DX, офсетов String

Assembler zaneset в DX String компенсира редове в паметта. Всъщност - след монтаж - тя ще изглежда така:

1234: 0200h Mov DX, 400h --- 200h защото 100H байта са "жертва-файл", и ние сме в "опашка" от него.
.
1234: 0400h --- всичко, което искате, но не ни линия.
.
1234: 0500h "низ" --- това е, когато това е!

Можете, разбира се, за да получите дължината на инфекция "целеви файл" и след това на мястото на Mov DX, 400h да Mov DX, 500h. Но какво, ако тези връзки много? Можете ли да си представите колко голям ще расте нашата вирус?!

Ние се процедира по различен начин: просто вземете и прехвърляне на вируса (вируса и само!) И с "опашка", "целеви файл" в свободния сегмент на офсет 100h. Ето какво се случва:

1234: 0200h Mov DX, 400h --- ние сме в опашката на програмата
.
1234: 0500h "низ"

5678: 0100h Mov DX, 400h --- прехвърлени към самия сегмент 5678h, 0100h при офсет
.
5678: 0400h "низ" --- низа на мястото си (офсет).

Друг въпрос: къде е гаранцията, че този сегмент е празна, а ние не Трудно е да се кодират някои програми?

0B800 - нула
0B900 - първи
0BA00 - втора
0BB00 - трета
0BC00 - четвърти
0BD00 - пети
0BE00 - шести
0BF00 - седми

Нека да се изчисли размерът на една страница. Имаме ли достатъчно място за настаняване на вирусния код върху него? Нашата вирус ще отнеме не повече от 300-400 байта.

Нека да ви отведе до добре познатия режим 3: в един ред от 80 знака, линии на екрана 25. Един символ заема два байта (атрибут / офсет). Ние се получи: 80 х 25 х 2 = 4000 байта. Имаме ли достатъчно от него? Разбира се! Дори ако това не е достатъчно, вие сте, бихме могли да се използват два, три, четири страници.

Мисля, че няма да бъде трудно да се разбере новата MOVs оператор. Принципът на неговото действие е в пълно съответствие отбор КСН. Ето неговото описание:

В този случай, DS: SI посочва къде да получите данните, ES: DI, където те да копирате и CX - брой на изпратени байтове / думи.


Mov CX, 10; броя байтове, изпратени
Mov си, офсет str1; където ще се
Mov ди, офсетов str2; къде да копирате
представител movsb; Нападатели байт, защото movsB. Сега str1 = str2
.
Str1 ПБ "0123456789"
Str2 ПБ "9876543210"


Mov CX, 5; количество трафик дума (два байта)
Mov си, офсет str1; където ще се
Mov ди, офсетов str2; къде да копирате
представител movsw; Предаден дума (два байта), тъй като movsW. Сега str1 = str2
.
Str1 ПБ "0123456789"
Str2 ПБ "9876543210"

Така че сега ние имаме вируса в две точки на ум: 1. Правото на "програмата жертва"; 2. В седмия страница (0BF00: 0100h).

JMP DWORD PTR CS: [Off_move]

Сега можете да се опитате да намерите първата * .com-файл в текущата директория. За да направите това, използвайте функцията 4EH 21h прекъсва:

AH = 4EH
Най-CX - атрибути за търсене на файл: имаме - 0 (нормално, не само за четене и скрити!)
DS: - търсене Маска DX. Например, *. *, * .exe, команд. в. C: \ * ASM т.н.

CF = 1 - няма такъв файл
CF = 0: DTA е пълен с информация за намерен файл

CF - е носене флаг. Ако CF = 1 е писано, това означава, че флагът за носене е настроен (равен 1), и ако CF = 0, то е за нулиране (0). DOS носят флаг се използва за посочване функция грешка или за други цели.

В този случай, ако функцията е установено 4EH носене флаг, това означава, че файловете, които отговарят на условието (търсене маска) не е намерен.

Ако сигналът за носене се изчиства (нула), на ДТА се записва информация за файла. Това ще бъде обсъдено в следващите глави.

Ако CF = 0 (флаг носене се изчиства), е възможно да се направи нещо с намерени файла.

За да намерите следващия файл, който отговаря нашето състояние (маска за търсене), ще трябва да използвате прекъсване 21h 4Fh:

AH = 4Fh
Най-CX - атрибути за търсене на файл: имаме - 0 (нормално, не само за четене и скрити!)
DS: - търсене Mask (както е в функция 4EH) DX.

CF = 1 - не повече файлове отговарят състояние (маската търсене) на
CF = 0: DTA е пълен с информация за намерен файл

Всички, както и от функция 4EH.

Искам да отбележа, че ние все още неработеща вирус. Т.е. той не се зарази всички! Тя може лесно да се съберат и да стартирате. Само малко да се види на екрана. По-добре е нещо да погледнете под дебъгер.

След това всичко е просто! Мисля, че описанието на програмата е достатъчно, за да се разбере как работи програмата.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!