Передача файлов в изолированную виртуальную машину под управлением DOS с помощью… клавиатуры

Рассмотрим передачу файлов в виртуальную машину с помощью симуляции активности пользователя.Представим что у нас есть некоторая виртуальная машина под управлением операционной системы DOS (FreeDOS 1.1/MS-DOS 6.22) с полным набором программ, но не имеющая съемных носителей, последовательных и параллельных портов, доступа в сеть и установленных гостевых дополнений. Единственное что доступно — это консоль.Попробуем скопировать файлы в виртуальную машину с машины клиента через… клавиатуру! Хотя и виртуальную :)

Так как копирование фалов по клавиатуре процесс длительный даже при использовании эмулятора клавиатуры «Key Paste», запасаемся свободным временем и приступаем.

Тестовый стендДля начала подготовим тестовый стенд для нашего эксперимента: Хост виртуализации QEMU и клиент — GNU/Linux Виртуальные машины: ВМ «DOS» ВМ «Windows XP» (также клиент ВМ «DOS») Доступ к виртуальной машине Windows XP осуществляется через протокол SPICE. Установлены и работают гостевые дополнения имеется выход в сеть.Доступ к виртуальной машине DOS осуществляется через протокол VNC. Никаких дополнительных программ не установлено.

На виртуальной машине «Windows XP» запущена программа «Key Paste» готовая к эмуляции набора текста. Так как набор текста парализует работу в операционной системе, вынос клиента виртуальной машины DOS в виртуальную машину или отдельный компьютер вполне оправдано.

Создание простого бинарного файла Попробуем создать в ВМ «DOS» простой бинарный файл размером в 5 байт в котором каждый байт содержит значение соответствующее его позиции, а именно: 1,2,3,4,5 в шестнадцатеричной системе исчисления.Создаем файл 5.txt со следующим содержимым:

n 5.bit e 0000 01 02 03 04 05 rcx 5 w 0 q где, первая строка определяет имя создаваемого файла, вторая — содержимое файла в шестнадцатеричном формате, четвертая — размер файла.Отправим файл на обработку программой «Debug»

debug < 5.txt

С помощью команды dir убеждаемся что файл создан

dir 1.bit

Подготовка к передаче большого файла Debug позволяет создавать бинарные файлы только до 64Кб. Для создания больших файлов воспользуемся кодированием Base64, которое используется в электронной почте. В DOS по умолчанию нет средств для работы с кодировкой Base64 по-этому скопируем программу для работы с кодировкой base64 и программу для проверки контрольных сумм md5.Первым делом, скопируем программу md5sum для проверки контрольных сумм md5, используя шестнадцатеричное представление.

В Linux с помощью программы hexdump создадим заготовку файла для передачи в программу debug

hexdump -v -e '«e %04_ax »' -e '10/1 »%02X »' -e '»\n»' md5sum.exe > md5sum_.hex

На выходе получим файл с содержимым вида:

e 0000 4D 5A 73 01 3C 00 01 00 02 00 e 000a F1 0F FF FF 66 12 00 50 00 00 e 0014 00 00 00 00 1C 00 00 00 0E 00 e 001e 74 07 B9 80 3B BE FE 76 89 F7 e 0028 1E A9 B5 80 8C C8 05 05 00 8E e 0032 D8 05 FC 0A 8E C0 FD F3 A5 FC e 003c 2E 80 6C 12 10 73 E7 92 AF AD Подсчитаем размер файла md5sum.exe с помощью команды

ls -l md5sum.exe

В результате получим число »30579». Преобразуя данное число в шестнадцатеричную систему исчисления из десятичной получим число »7773».

Используя заготовку и информацию о размере файла создадим исходный файл для создания бинарного файла с помощью программы debug.

Проверим работоспособность файла в ВМ «Windows XP».

debug < md5sum.txt

Файл собрался. Переименуем файл md5sum.bin в файл md5sum.exe и попробуем подсчитать контрольную сумму файла md5sum.exe.

md5sum.exe md5sum.exe

контрольная сумма подсчитана и совпадает.

Теперь можно передать файл в DOS и проверить контрольную сумму

[embedded content]

2ecee0b9859d4828aa9cc8c43767aa3b.png

Аналогичным образом скопируем файл base64.exe.2874b6ac731243d4bb7b23187cde4cec.png

Копирование большого файла Попробуем скопировать большой файл. В качестве примера возьмем дистрибутив «DOS Navigator» от компании «RIT-labs». Закодируем файл дистрибутива «dn151.zip» в формат Base64 с помощью команды: base64 dn151.zip > dn.b64

Аналогичным образом запакуем файл unzip.exe

base64 UNZIP.EXE > unzip.b64

Так как текстовый редактор edit в DOS очень тяжело переваривает большие текстовые файлы, разобьем файл «dn.b64» на файлы по 3500 строк с помощью команды split

split -d -l 3500 dn.b64 dn

В результате выполнения команды получим файлы: «dn.00», «dn.01», «dn.02» и «dn.03».

С помощью edit и клавиатуры скопируем полученные файлы в DOS. С помощью перенаправления потока, объединим четыре текстовых файла в один

type dn.00 >> dn.txt type dn.01 >> dn.txt type dn.02 >> dn.txt type dn.03 >> dn.txt Полученный файл раскодируем с помощью base64base64 dn.txt dn.zip

раскодируем распаковщик: base64 unzip.txt unzip.exe

Распакуем архив дистрибутива «DOS Navigator«unzip -e dn.zip -d c:\dn

После распаковки можно запускать «DOS Navigator» командой: c:\dn\dn

Заключение В результате данного эксперимента мы научились с помощью эмулятора клавиатуры передавать большие объемы текста, копировать файлы в виртуальные машины даже под управлением DOS. Которая казалась бы на первый взгляд не содержит средств взаимодействия с буфером обмена и создания бинарных файлов.Процесс передачи файлов чрезвычайно медлителен, однако с другой стороны он работает и может использоваться в аварийных ситуациях или параноидальных условиях. Прежде чем приступать к реальной передаче файлов через клавиатуру вы можете скопировать текстовые файлы со специально подготовленного компакт-диска.

Используемое ПО:

© Habrahabr.ru