Как стать автором
Обновить

Комментарии 5

Есть ли жизнь на Марсе вирусы на CP/M - науке не известно.

Чтобы вирус сам скопировал себя из одной дискеты на другую, необходимо либо 2-дисковая конфигурация, либо возможность оставаться в памяти резидентно.

Вирусы были даже на Спектруме в ОС TR-dos (собственно статья из шапки про это).

Лично я считаю, да и на форумах говорили тоже, написать вирус на CP/M вполне можно. Другое дело, его сложно замаскировать. Одним из требование будет, что бы запускаемый файл был меньше доступного ОЗУ в 64кб на размер тела вируса. Сам алгоритм такой: в конце программы добавляем тело вируса, с адреса старта программы (#100) добавляем переход на тело вируса. Более того, я так уже дела, когда добавлял в программы поддержку General Sound. После этого нужно просто переписать файл на диске. Так как файлы могут быть дефрагментированными, это не проблема.

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

Собственно всё. На диске такие операции не очень сильно будут заметны, на винчестере вообще сложно отслеживаемые. Просто программа будет стартовать незначительно дольше.

На счет резидентов, это то же вполне возможно. Например, в версии CP/M на компьютере Профи, есть возможность повесить на прерывание до 25 задач, включая вызов кода в верхних страницах. Через этот механизм реализована утилита которая по нажатию F1 печатает текущий экран на принтер (создание скриншота). На многих дисках её запуск был прописан в config.sys/autoexec.bat. Чем не вирус?

Кроме того во многих версиях CP/M в нижних 64 кб, есть специально отведённое место под размещение резидентов, и есть возможность управлять (увеличивать/уменьшать) этим местом через БДОС. Другой вопрос, что на это многие программы просто забивают. Так что вирус/код там может быть просто затёрт.

НЛО прилетело и опубликовало эту надпись здесь

Особенностью CP/M является в том,что размер файла диске определяется в секторах по 128 байт. И все операции с диском ведутся по секторно. В каталоге диска у файл есть один байт который содержит число занятых байт в последнем секторе. И теоретически за счёт него можно определить длину файла в байтах. Проблема в том, что за информацию в этом байте отвечает программист. А теперь угадайте как часто программисты его корректно ведут. Правильно, почти никогда. От сюда выходит, что такого понятия как "недоиспользованые сектора" в CP/M по сути нет.

Ещё момент, в документации на формат дисков CP/M 2.2 байт S1 (Last Record Byte Count) - помечен как Reserved, always 0. Поэтому в дисках CP/M 2.2 и ниже длина файла всегда кратна длине сектора (который кстати не обязательно должен быть 128 байт, это описывается в DPB). А вот в CP/M 3.1 и байт S1 уже нужно заполнять. Впрочем, как верно написано, на это можно было и забивать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории