1 ポイント 投稿者 GN⁺ 2026-02-02 | 1件のコメント | WhatsAppで共有
  • 1990年代の会計向け RPG IIコンパイラ が要求していた パラレルポートドングル を解析し、動作を復元した事例
  • 元のソフトウェアは Windows 98環境のDOSコンソール で動作し、ドングルがなければ起動しない
  • ディスクイメージをエミュレータへ移して解析した結果、RPGC.EXESEU.EXE などの実行ファイル内部に同一のコピー防止ルーチンが挿入されていることが判明
  • アセンブリ解析により、そのルーチンが 常に一定の定数値(7606h) を返すことを確認し、4バイトのパッチでドングル検証を回避
  • これにより Software West社のRPG IIコンパイラ はドングルなしでも実行可能となり、クラシックソフトウェア保存の観点からも意義ある成果となった

古い会計ソフトウェアとドングルの発見

  • 40年間使われてきた会計向け RPGベースのソフトウェア が、Windows 98 PC上で今なお運用されていた
    • RPGはIBM System/3、System/32、AS/400などの中型コンピュータ向け言語で、その後MS-DOSへ移植された
  • このプログラムは起動時にパラレルポート上の ハードウェア式コピー防止ドングル を要求した
    • ドングルには「Stamford, CT」と「Software Security Inc.」のロゴがかすかに残っていた
    • 「RUNTIME」という語が表示されており、その意味は後の解析で明らかになった

ディスクイメージ解析とRPGコンパイラの構造

  • Windows 98システムのディスクイメージを抽出し、エミュレータ上で実行
    • RPG IIコンパイラ(Software West Inc.製)の2つのバージョンと、会計ソフトウェアの 完全なRPGソースコード を発見
    • 複数のRPGモジュールとDOSバッチファイルで構成されたメニューシステムの形を取っていた
  • コンパイラ自身がドングル検証を行い、生成された実行ファイルにも同じ保護ルーチンを挿入していた

パラレルポート通信ルーチンのリバースエンジニアリング

  • Reko逆アセンブラ を用いて SEU.EXE を解析
    • 当初は in / out 命令が見当たらなかったが、別のセグメント(0800h)で発見
    • そのルーチンはBIOSデータ領域からパラレルポートアドレスを読み取り、LPT1ポート経由でデータを送受信していた
    • 結果値は BX レジスタに保存され、入力値はなく、常に同じ結果を返していた

定数値の推定とパッチ

  • ルーチンの最後で BH の値が 76h に固定されていることを確認
    • BL の値だけが未知数として残り、0〜255の範囲を ブルートフォース で探索
    • 正しい組み合わせは BL=06h、すなわち BX=7606h であることが確認された
  • ルーチン先頭の4バイトを MOV BX,7606hRETF に置き換え、ドングル検証を回避
    • その後プログラムは即座に起動し、同じルーチンを持つ他の実行ファイルにも同様の修正を適用できた

結果と意義

  • RPG IIコンパイラのすべての構成要素で 同一のコピー防止コード が見つかり、一括修正が可能だった
  • ドングルは単に定数値を返す構造で、4バイトのパッチだけで無効化可能 だった
  • 修正済みコンパイラはドングルなしでも正常に動作し、今後は個人情報を除去したうえで 歴史的ソフトウェアアーカイブとして公開予定
  • Software West Inc. に関する資料はオンライン上にほとんど残っておらず、作者とのさらなる接触が望まれている

1件のコメント

 
GN⁺ 2026-02-02
Hacker Newsのコメント
  • 初期のソフトウェア保護は本当に単純だった
    昔、Windows 3.11のアップグレードディスクを持っていたが、以前のバージョンがインストールされていないとセットアップが失敗した
    解決策は、空のテキストファイルを作って名前をwin.comで保存するだけだった。セットアッププログラムがディスク全体をスキャンして、そのファイルだけを探していたからだ
    実際にはアップグレードディスクには完全なインストール一式が入っていた。当時は本当に単純だった

    • 子どもの頃、父がWindows 3.1のアップグレード版を買ったが、「3.0以下のバージョンからアップグレード可能」と書かれていたのに、実際には3.xしか認識しなかった
      結局、友人から3.x版を借りてインストールしたが、宣伝内容と違っていたので道義的には問題ないと感じた
      関連製品の写真はeBayのリンクで見られる
  • 私は土木工学向けソフトウェアを開発している(mes100.com
    今でもハードウェアドングルを好むユーザーがいる。手で触れられる物理デバイスがないと安心できないらしい
    永続ライセンスを販売しているので、ドングルが壊れると代替部品がなくて困る。クラウドライセンスは嫌われるが、サブスクリプション収益を可能にしてくれる
    しかし、どれだけ努力してもクラック版はオンラインに出回っている。法的に対抗する余力もないので、保護は必須だ

    • こうしたドングルが好まれる理由の一つはエアギャップ環境だ。軍事や原子力など機密性の高い設計データを扱う場所では、外部ネットワークへの接続が不可能だ
      また、一部の人は単にサードパーティのサーバーに依存しない自律性を好む
    • 規制の変化が遅い業界なのでアップグレードの動機が弱いと言っていたが、それならユーザーがわざわざ払い続ける理由は何なのか、という疑問がある
    • 父が「Cosmos」という土木工学プログラムを使っていたとき、こういうドングルを使っていた
      たまに認識されず、本当にいらいらした記憶がある
    • ユーザーの立場では、「壊れていないならわざわざ変えない」という態度は合理的だ
      だからSaaSモデルはユーザーにとって災厄のようなものだ。違法コピーも嫌だが、SaaSも同じくらい嫌いだ
  • 昔はクラックもずっと単純だった
    単にJEやJNEをJMPに変えることだけで保護を回避できた
    要点は、保護コードがどこにあり、どう動くかを把握することだった

    • こうした単純な保護が生まれる理由はいくつかある
      第一に、開発者は私たちよりはるかに長くそのコードを扱うので、保護を複雑にしすぎるとバグ修正が難しくなる
      第二に、ハッカーは各自いくつかのトリックを知っていればよいが、開発者はそれら全部を防がなければならない
      第三に、保護機能は面白くもなく評価もされにくい仕事なので、モチベーション不足が大きい
    • 昔、デモソフトをデバッガで開いてみたら、メモリダンプの中にアクティベーションコード文字列がそのまま入っていた
      それを入力したらすぐ有効化された。その後で正式に購入した
    • dBASE IIIのProLok「laser protection」を破ったことがある
      ディスケットにレーザーで署名する方式だったが、アセンブリが読める10代の少年でも簡単に突破できた
      しかもピンでディスケットを引っかくだけでもコピー可能だった。結局、マーケティングが技術を先行していた例だった
  • 80年代にRPG IIのコードを書き、90年代にはS/36エミュレーション環境への移行を手伝った
    California Software Productsという会社の製品を使ったが、かなりうまく動いていて、会社は創業者が引退するまで存続した

  • 「このコピー防止方式、単純すぎないか?」という話に対して、当時としては適切なレベルのエンジニアリングだったと思う
    エミュレーターやデコンパイラのおかげで今なら数日で解けるが、当時はそうしたツールすらなかった

    • 相手にする顧客層が重要だ。非技術系業界の一般企業を防ぐのが目的なら、専門のリバースエンジニアを止める必要はない
    • デコンパイラは保護コードを解析できなかった
      当時のソフトウェアの90%は本当にそれくらい単純だった。複雑なものを見落としていたわけではない
    • 2000年ごろ、ブエノスアイレスの小さな通信会社で似たようなハッキング作業をしていた。ほとんどはOPが説明した程度の難易度だった
    • うちのIT会社でも、怪しいファイルをビットシフトしてマジックナンバーを渡す方式で保護している。複雑である必要はない
  • 子どもの頃、Ultimaゲームをクラックしたことがある
    毎回フロッピーを入れるのが面倒だったからだ。コードは自己復号し、ディスクの特定セクタから開始アドレスを読み込んでいた
    そのセクタは普通のコピーツールでは複製できなかったが、実行ファイルヘッダーを修正して解決した

  • 90年代初頭、フランチャイズ本部が自社開発したライセンス更新システムの保守をしていた
    毎月フロッピーで更新する必要があったが、本部が気に入らない店舗を恣意的に遮断することもあった
    結局、複数の店舗が集まって訴訟を起こし、私はDOSベースのライセンス生成器を作って、各店舗が電話でコードを受け取って更新できるようにした
    訴訟が終わった後は、ライセンスチェックを完全に削除するパッチを配布した。いつかDOSBoxでまた動かしてみたい

  • Windows 95が今でも現場で使われているという話を見て興味深かった
    派手なAIトレンドとは違い、産業の地味な領域では技術の変化が遅い

    • 2014年の時点でも、Windows 95を仮想化して動かしている会社を見たことがある。古い医療ソフトだったが、驚くほど安定していた
    • スクリーンショットを見ると、そのプログラムはDOS用に見える。おそらくWindowsは単にファイル共有用として使われていただけだ
    • Win95はまだ30年しか経っておらず、一部の比較的新しいハードウェアでも今なお動作する
      しかもPDP-11エミュレーター上で動いているシステムすらまだ存在する
  • このソフトウェアとハードウェアが今なお一部の企業で使われている点が印象的だ
    だからクラック版を公開するのは法的リスクがありうる
    企業は古いシステムを維持するためなら大金を払うので、こうしたベンダーロックインが続いている
    もし特許や知的財産権がまだ有効なら、公開前に必ず確認すべきだ

  • 単に一定の数字を返すだけのハードウェアドングルとは、実に単純な保護方式だ
    しかし当時はそれで十分だった。今日の業務用ソフトウェアでも、似たようにライセンスキー程度しか使っていないことがある
    結局、80年代版の「請求書が存在するという合図さえあれば金を払う」という発想だった