Stirlingの使い方|バイナリエディタでファイルを書き換えてみる
バイナリエディタStirlingの使い方を実践解説。テキストファイルを16進数で書き換え、改行コードや文字コードの仕組みを実際に見ながら、バイナリの世界に触れてみます。
Stirlingの記事3本の内容を、1本の動画にまとめました。 動画版: 開発終了から27年。なのに愛され続けるソフトの話【ゆっくり解説風】
はじめに
今回はStirlingを使ってバイナリデータで遊んでいきます!
テキストファイルをバイナリエディタで編集したり、壊したりして遊んでいこうと思います!
「Stirling」とは何か知らない人向け↓
Stirlingのダウンロード方法↓
Stirlingを起動

安心感のある画面ですね。
まずはテキストファイルを書き換えて肩慣らし
任意のテキストファイルを作る

テキストエディタで"Hello, Binary World!"と入力したファイルをテキストファイル(.txt)で保存します。
保存したテキストファイルをStirlingで開く

短いバイナリデータがしっかりと保存されていますね!
右側のエンコードも文字化けせずにしっかりと表示されていますね!

Stirlingのデフォルトの文字コードは Shift_JIS となっています。
今回は英語なのでエンコードが合致しただけです。 最近のファイルは基本的に**UTF-8**が使用されているので、合致しないと思っておきましょう。
文字コードに関する記事はこちらです↓ 準備中
バイナリを書き換えてみる

書き換えられたら、「ファイル」→「上書き保存」で保存してみましょう。
書き換えられたかチェックする

画像の示す通り、"Hello"の"e"が"a"に変わっています!
「「「だからなんだ」」」
と言いたくなるのもごもっともですが、面白いのはここからです。
改行はバイナリでどう表現される?
次はテキストエディタで改行を入れてみましょう。

次にStirlingを使って開いていきます!

Stirlingによると、改行コードは "0D 0A" と書くみたいですね。
ご存じの方も多いでしょう。
これがWindowsの改行コードCRLFです!
- 0D:CR(Carriage Return:カーソルを左端に戻す)
- 0A:LF(Line Feed:カーソルを1行下に下げる)
Windows環境では、この2つがセット(CRLF)になることで「1つの改行」として認識されます。
00で無理やり記述を終わらせる
まずは、ただのHallo World!を用意します


"20"を"00"に書き換える

すると、Hallo以降がなくなります!
と言いたかったのですが。

普通に空白で表示されてしまいました...
何をやりたかったか
- プログラムの世界では、データの終わりを
00(Null文字)という特別なバイナリで判断することが多い。 - 空白コード"20"をNull文字"00"に書き換えてみる。
- メモ帳が"Hallo"の後ろの"00"を「ファイルの終わり」だと誤認して、後ろの
Worldが完全に消滅して見えなくなる。
とやりたかったのですが、これは古いメモ帳や、C言語などのプログラムのみみたいです。
最近のエディタ(Windows備え付けの「メモ帳」や「サクラエディタ」)ではしっかりと対策されてしまっているみたいですね。
TeraPadで開く
TeraPadを説明した記事はこちら↓ (記事を準備中)
.png)
"はい"を押してみる
.png)
駄目みたいです。
コマンドプロンプト(cmd)で開く

駄目みたいですね。
旧メモ帳を呼び出す

出来ませんでした。
実は、古いメモ帳を起動しようとしても、最近はストア版の「新しいメモ帳」へと強制的にリダイレクトされてしまうみたいです。
一応パスの設定を変えれば旧メモ帳も使えるのですが、これはまた別の機会に (記事を準備中)
Windows PowerShellで開く
結論から言うと、2つの興味深い現象がみられました。
- "Get-Contentで開くとcmdと同様に文字が詰められるが、文字数を取得するとしっかりと12文字であることが反映される"
- PowerShellからC言語を用いて開くことによって、期待通りの結果が得られた。

文字コードを変える。
次に、"へろーわーるど"と書いたテキストファイルを用意します。

今回はさまざまな文字コードで "へろーわーるど" を作成してみましょう!
使用する文字コードは
- UTF-8
- UTF-16
- SHIFT_JIS
の三つです!
Stirlingにはファイルを並べる機能があります! 今回は「ウィンドウ」→「上下に並べて表示」を選んで並べてみましょう

当然、SHIFT_JIS以外はしっかりと文字化けしていますね。
しかし、見てみるとそれぞれ面白い特徴がありますね
- Shift_JIS(上段)
- 総バイト数: 14バイト(2バイト × 7文字)
- ヘッダ(BOM): なし
- UTF-16(中段)
- 総バイト数: 16バイト(ヘッダ2バイト + 2バイト × 7文字)
- ヘッダ(BOM): あり(FF FE)
- UTF-8(下段)
- 総バイト数: 21バイト(3バイト × 7文字)
- ヘッダ(BOM): なし(BOMなしUTF-8)
といった感じですね。
基本情報技術者を持っている方や、情報技術をある程度心得ている方は文字コードを見たことがあると思いますが、バイナリエディタで実際に実物を見てみると習った事がしっかりと反映していて面白いかもしれません。
おわりに
今回はStirlingを使ってテキストファイルのバイナリデータを書き換えて遊びましたが、バイナリエディタを用いて出来ることは他にもたくさんあります。例として、
- 未知の独自ファイルフォーマットの構造解析
- 簡易的なフォレンジック(Forensics)やリバースエンジニアリング(Reverse Engineering)
- 組み込み機器ファームウェアの静的解析とメッセージ修正
- ハードウェア保存データのバックアップ・復元検証
- ゲームROMの内部パラメータ・ポインタの改変
- 自作パッチファイル(.ips / .bps)の作成と配布
など、たくさんあります。
是非とも、Stirlingやその他のバイナリエディタを用いて、バイナリの世界で遊んでみてください!