Pull to refresh

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

Reading time 4 min
Views 21K
Рассмотрим передачу файлов в виртуальную машину с помощью симуляции активности пользователя.

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

Попробуем скопировать файлы в виртуальную машину с машины клиента через… клавиатуру! Хотя и виртуальную :)

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

Тестовый стенд


Для начала подготовим тестовый стенд для нашего эксперимента:
  1. Хост виртуализации QEMU и клиент — GNU/Linux
  2. Виртуальные машины:
    1. ВМ «DOS»
    2. ВМ «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 и проверить контрольную сумму





Аналогичным образом скопируем файл 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


Полученный файл раскодируем с помощью base64
base64 dn.txt dn.zip

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

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

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

Заключение


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

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

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

Tags:
Hubs:
+22
Comments 17
Comments Comments 17

Articles