Wirusy polimorficzne 
	
	 Uwagi ogólne 
	
	- Narzucającym się sposobem szukania i naprawiania zainfekowanych
	plików jest znajdowanie w ich kodzie charakterystycznych dla znanych
	wirusów ciągów bajtów.
	
- Proste wirusy bronią się przed tym kodując swój kod. Pozostaje jednak
	niezmienna procedura odkodowująca, po której można je rozpoznać.
	
- Wirusy polimorficzne mają także zmienną procedurę odkodowującą.
	
 Działanie wirusów polimorficznych 
	Kodowanie procedur szyfrujących wirusy bazuje na fakcie, że wiele
	różnych ciągów instrukcji procesora daje ten sam efekt.
	Na przykład poniższe trzy ciągi instrukcji zerują rejestr AX:
	
	- XOR AX, AX
	
 NOP
 NOP
- MOV AX, 0
	
 NOP
- NOP
	
 MOV AL, 0
 MOV AH, 0
Chcąc zmienić kod, nie zmieniając wyniku, można też np.:
	- Zamiast INC używać ADD.
	
- Zamiast DEC używać SUB.
	
- Wykorzystywać różne rejestry do obliczania tych samych wartości.
	
Wirusy polimorficzne infekując pliki mogą działać zgodnie 
	z poniższym schematem:
	- Zmiana pierwszych trzech bajtów (w przypadku plików w postaci
	absolutnej) lub nagłówka programu (w przypadku plików w postaci
	przemieszczalnej), tak by najpierw wykonał się kod wirusa.
	
- Wywołanie funkcji kodującej, która tworzy zakodowaną wersję wirusa
	oraz generuje procedurę odkodowującą. Procedura odkodowująca może być
	za każdym razem inna (a przynajmniej powtarza się bardzo rzadko).
	
- Dopisanie do infekowanego pliku:
	
	- Procedury odkodowującej.
	
- Zakodowanego wirusa (zakodowany wirus zawiera funkcję kodującą).
	
 
 Generatory wirusów polimorficznych 
	Istnieją biblioteki funkcji, które można wykorzystać do tworzenia
	wirusów polimorficznych. Są to t.zw. generatory wirusów polimorficznych.
	Dostarczają one funkcje: kodujące i generujące
	funkcje odkodowujące. Do poprawnego
	i efektywnego działania funkcje te potrzebują generatorów liczb losowych
	(proste generatory są dołączane do bibliotek).
	
Aby stworzyć wirusa polimorficznego z wykorzystaniem generatora
	wystarczy:
	
	- Napisać zwykłego wirusa niepolimorficznego.
	Wirus ten przed zainfekowanoiem powinien wywołać funkcję kodującą.
	
- Napisać generator liczb losowych (ew. można użyć generatora
	dostarczonego z biblioteką, ale im lepszy generator tym lepiej działa
	funkcja kodująca).
	
- Skompilować wirusa i połączyć go z używaną biblioteką funkcji
	kodujących.
	
 Przykłady generatorów wirusów polimorficznych 
	Mutation Engine (MtE)
	Napisał ją Dark Ayenger. Od niej rozpoczęła się historia wirusów
	polimorficznych. Była rozprowadzana w postaci pliku mte.obj. Kodowanie
	odbywało się słowo po słowie. Generator liczb losowych znajdował się
	w pliku ran.asm, można go było zamienić na inny.
	TridenT Polymorphic Engine (TPE)
	Był to najbardziej rozpowszechniony generator wirusów polimorficznych.
	Do szyfrowania służyła procedura Crypt.