すべてのプログラムを備えたDOSオペレーティングシステム(FreeDOS 1.1 / MS-DOS 6.22)を実行している仮想マシンがありますが、リムーバブルメディア、シリアルポートとパラレルポート、ネットワークアクセス、インストールされたゲストアドオンがないとします。 利用可能な唯一のものはコンソールです。
クライアントのマシンからキーボードを介してファイルを仮想マシンにコピーしてみましょう! 仮想ですが:)
キーペーストキーボードエミュレータを使用する場合でも、キーボード上のファイルのコピーは長いプロセスであるため、空き時間を確保して開始します。
試験台
まず、実験用のテストベンチを準備します。
- QEMU仮想化ホストおよびクライアント-GNU / Linux
- 仮想マシン:
- VM「DOS」
- VM「Windows XP」(VM「DOS」のクライアントでもあります)
Windows XP仮想マシンへのアクセスは、SPICEプロトコルを介して行われます。 ゲストアドオンがインストールされて動作し、ネットワークにアクセスできます。
DOS仮想マシンへのアクセスは、VNCプロトコルを介して行われます。 追加のソフトウェアはインストールされていません。
Windows XP仮想マシンで、キーペーストプログラムが起動し、入力をエミュレートする準備が整います。 タイピングはオペレーティングシステムで動作を麻痺させるため、DOS仮想マシンのクライアントを仮想マシンまたは別のコンピューターに移動することは正当化されます。
単純なバイナリファイルの作成
DOS VMで5バイトの単純なバイナリファイルを作成してみましょう。各バイトには、その位置に対応する値、つまり16進システムの1,2,3,4,5が含まれています。
次の内容の5.txtファイルを作成します。
n 5.ビット e 0000 01 02 03 04 05 rcx 5 w 0 q
ここで、最初の行は作成するファイルの名前を決定し、2行目は16進形式のファイルの内容、4行目はファイルサイズを決定します。
デバッグプログラムで処理するためにファイルを送信します
debug < 5.txt
dirコマンドを使用して、ファイルが作成されていることを確認します
dir 1.bit
大きなファイルを転送する準備
デバッグでは、最大64 KBのバイナリファイルのみを作成できます。 大きなファイルを作成するには、電子メールで使用されるBase64エンコードを使用します。 DOSには、デフォルトでBase64エンコーディングを操作するツールがないため、base64エンコーディングを操作するプログラムとmd5チェックサムをチェックするプログラムをコピーします。
まず、md5sumプログラムをコピーして、16進表現を使用してmd5チェックサムを確認します。
Linuxでは、hexdumpプログラムを使用して、デバッグプログラムに転送するためのファイル準備を作成します。
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 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」という番号が取得されます。 この数値を10進数から16進数に変換すると、「7773」という数値が得られます。
空白およびファイルサイズの情報を使用して、 ソースファイルを作成し、デバッグプログラムを使用してバイナリファイルを作成します。
「Windows XP」VMでファイルの操作性を確認します。
debug < md5sum.txt
ファイルがコンパイルされます。 md5sum.binファイルの名前をmd5sum.exeファイルに変更し、md5sum.exeファイルのチェックサムの計算を試みます。
md5sum.exe md5sum.exe
チェックサムが計算され、一致します。
これで、ファイルをDOSに転送し、チェックサムを確認できます

同様に、 base64.exeファイルをコピーします。

大きなファイルをコピー
大きなファイルをコピーしてみましょう。 例として、RIT-labsのDOS Navigatorディストリビューションを取り上げます。 次のコマンドを使用して、配布ファイル「dn151.zip」をBase64形式にエンコードします。
base64 dn151.zip > dn.b64
同様に、unzip.exeファイルをパックします
base64 UNZIP.EXE > unzip.b64
DOSでのテキストエディターの編集は大きなテキストファイルを消化するのが非常に難しいため、splitコマンドを使用してファイル「dn.b64」を3500行のファイルに分割します。
split -d -l 3500 dn.b64 dn
コマンドの結果として、ファイル「dn.00」、「dn.01」、「dn.02」および「dn.03」を取得します。
編集とキーボードを使用して、結果のファイルをDOSにコピーします。 ストリームリダイレクトを使用して、4つのテキストファイルを1つに結合します
タイプdn.00 >> dn.txt タイプdn.01 >> dn.txt タイプdn.02 >> dn.txt タイプdn.03 >> dn.txt
base64を使用して結果ファイルをデコードします
base64 dn.txt dn.zip
アンパッカーをデコードします。
base64 unzip.txt unzip.exe
DOS Navigator配布パッケージのアーカイブを解凍します
unzip -e dn.zip -dc:\dn
解凍後、「DOSナビゲーター」コマンドを開始できます。
c:\dn\dn
おわりに
この実験の結果、キーボードエミュレータを使用して大量のテキストを転送し、DOSの下でもファイルを仮想マシンにコピーすることを学びました。 一見すると、クリップボードと対話してバイナリファイルを作成する手段が含まれていないように見えます。
ファイル転送プロセスは非常に遅くなりますが、一方では機能し、緊急事態や妄想状態で使用できます。 キーボードを介したファイルの実際の転送に進む前に、特別に準備されたCDからテキストファイルをコピーできます。
使用したソフトウェア:
- KeyPaste [ umvirt.org/projects/keypaste ]
- MD5sum [ www.freedos.org/software/?prog=md5sum、www.ibiblio.org/pub/micro/pc-stuff/freedos/files/util/file/md5sum ]
- Base64 [ old-dos.ru/files/file_1422.html ]
- 7Zip [ www.freedos.org/software/?prog=7-zip ]
- UnZip [ www.freedos.org/software/?prog=unzip ]
- Dos Navigator [ www.ritlabs.com/en/products/dn、www.ritlabs.com/download/files3/dn/dn151.zip ]