Передача файлов в изолированную виртуальную машину под управлением 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]
Аналогичным образом скопируем файл base64.exe.
Копирование большого файла Попробуем скопировать большой файл. В качестве примера возьмем дистрибутив «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. Которая казалась бы на первый взгляд не содержит средств взаимодействия с буфером обмена и создания бинарных файлов.Процесс передачи файлов чрезвычайно медлителен, однако с другой стороны он работает и может использоваться в аварийных ситуациях или параноидальных условиях. Прежде чем приступать к реальной передаче файлов через клавиатуру вы можете скопировать текстовые файлы со специально подготовленного компакт-диска.
Используемое ПО: