Windows のデフォルトの環境で、バイナリファイルを作る方法

バイナリエディタをインストールしていない Windows のデフォルトの環境でバイナリファイルを作る方法をいくつか紹介します。

動作確認環境

  • Windows 10 Home 21H1, 64bit

方法 1. メモ帳とIME でバイナリファイルを作る

メモ帳と IME(かな漢字変換)を利用してバイナリファイルを作成できます。入力できるバイナリデータは、「0x01」~「0x1F」と「0x7F」「0x80」です。

たとえば「0x1C」を入力するには、全角 4 桁 16 進数で「001c」と入力後、[F5] キーと [Enter] キーを押します。

メモ帳を使って「0x1C」の 1 バイトからなる「a.txt」ファイルを作成してみましょう。

  1. メモ帳 (notepad.exe) を起動します。
  2. IME を有効化します。
  3. 入力したいコード「001c」を全角 4 桁の 16 進数で入力します。
  4. [F5] キーを押して「0x1C」のコードに変換します。
  5. [Enter] キーを押して確定します。
  6. ファイル名「a.txt」として保存します。このとき、文字コードには「ANSI」を指定してください。

メモ帳で作った 「0x01」~「0x1F」と「0x7F」「0x80」 のバイナリファイルを 16 進ダンプした様子を以下に示します。

           パス: C:\tmp\a.txt

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10  ................
00000010   11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 7F  ...............
00000020   80                                               €

方法 2. コマンドプロンプトと [Ctrl]+[キー] でバイナリファイルを作る

コマンドプロンプトと [Ctrl]+[キー] を利用してバイナリファイルを作成できます。入力できるバイナリデータは、「0x01」~「0x1F」です(一部を除く, 後述)。

たとえば「0x1B」を入力するには、[Ctrl] キーを押しながら [ [ ] キー(キーボードの右寄りにある開き大カッコ)を押します。

コマンドプロンプトにて、「0x1B」の 1 バイトからなる「a.txt」ファイルを作成してみましょう。

  1. コマンドプロンプト (cmd.exe) を起動します。
  2. 「copy con a.txt」と入力し、[Enter] キーを押します。コンソール画面から入力したデータを「a.txt」というファイルにコピーする、という意味です。
  3. [Ctrl] キーを押しながら、[ [ ] キーを押します。画面上には ^[ と表示されます。これが入力したいコード「0x1B」に相当します。
  4. [Ctrl] キーを押しながら、[Z] キーを押します。画面上には ^Z と表示されます。これはコード「0x1A」ですが、コンソール入力では「データの終端」という意味になります。
  5. [Enter] キーを押して入力を終了します。「a.txt を上書きしますか? (Yes/No/All):」と表示された場合は、[Y] キーを押してください。
  6. 生成された「a.txt」が目的のバイナリファイルになります。

入力できるバイナリデータと対応するキー操作を以下に示します。

データ(16進) [Ctrl] + [キー]備考
00入力不可
01 [Ctrl] + [A]※1
02 [Ctrl] + [B]
03IME で 0003[F5] [Enter] とすれば入力可
04 [Ctrl] + [D]
05 [Ctrl] + [E]
06 [Ctrl] + [F] ※1
07 [Ctrl] + [G]
08入力不可
09 [Ctrl] + [I][Tab] と同じ
0A改行の 0D 0A としてしか入力できない
0B [Ctrl] + [K]
0C [Ctrl] + [L]
0D 改行の 0D 0A としてしか入力できない
0E [Ctrl] + [N]
0F [Ctrl] + [O]
10 [Ctrl] + [P]
11 [Ctrl] + [Q]
12 [Ctrl] + [R]
13 [Ctrl] + [S]
14 [Ctrl] + [T]
15 [Ctrl] + [U]
16 [Ctrl] + [V] ※1
17 [Ctrl] + [W]
18 [Ctrl] + [X]
19 [Ctrl] + [Y]
1A [Ctrl] + Z はデータの終端と解釈される
1B [Ctrl] + [ [ ]
1C [Ctrl] + [¥] 半角円記号
1D [Ctrl] + [ ] ]
1E [Ctrl] + [&][Ctrl] + [Shift] + [6]
1F [Ctrl] + [=][Ctrl] + [Shift] + [-] ※1

※1 コマンドプロンプトのプロパティで、「Ctrl キーショートカットを有効にする」が OFF になっていること。

コマンドプロンプトと [Ctrl] + [キー]で作ったバイナリファイルを 16 進ダンプした様子を以下に示します。

           パス: C:\tmp\a.txt

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   01 02 04 05 06 07 09 0B 0C 0E 0F 10 11 12 13 14  ................
00000010   15 16 17 18 19 1B 1C 1D 1E 1F                    ..........

方法 3. certutil ツールでバイナリファイルを作る

Windows 付属の certutil ツールを利用してバイナリファイルを作ることができます。これまでのように一部のコードが入力できないといった制限はありません。

たとえば、「0x00」 のバイナリファイルを作るには、メモ帳に「00」と入力し、「a.txt」としてファイルに保存後、コマンドプロンプトから「certutil -f -decodehex a.txt a.bin 4」を実行します。「a.bin」が目的のバイナリファイルになります。

certutil ツールで、「0x00」「0x81」「0xFF」の 3 バイトからなる「a.bin」ファイルを作成してみましょう。

  1. メモ帳 (notepad.exe) を起動します。
  2. 「00 81 FF」と入力します。
  3. ファイル名「a.txt」として保存します。このとき、文字コードには「ANSI」や「UTF-8」を指定してください。
  4. コマンドプロンプト (cmd.exe) を起動します。
  5. 「certutil -f -decodehex a.txt a.bin 4」と入力し、[Enter] キーを押します。ファイル名「a.txt」や「a.bin」には、必要に応じてパスを追加してください。たとえば両ファイルとも「c:\tmp」フォルダ配下を指定するのであれば、「certutil -f -decodehex c:\tmp\a.txt c:\tmp\a.bin 4」となります。
  6. 生成された「a.bin」が目的のバイナリファイルになります。

こうして作った「a.bin」 ファイルを 16 進ダンプした様子を以下に示します。

           パス: C:\tmp\a.bin

           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   00 81 FF                                         ..

「certutil」の「-f」オプションは、「すでに出力ファイルが存在していた場合、強制的に上書きする」という意味になります。

「certutil」コマンド実行時の末尾の「4」(wincrypt.h の CRYPT_STRING_HEX)は、「入力データは 2 桁の 16 進数の羅列である」という意味になります。これを省略すると、たとえば「0081 FF」(00 と 81 の間に空白がない)という入力データが、「0081 はアドレスであり変換不要」と解釈され、「0xFF」 1 バイトのファイルが生成されてしまいます。