私は実際に別の話があります:
FCopyの「サクセス」ストーリーの数年後、スロットマシンのソフトウェアをクラックできるかどうかを尋ねられた人から連絡がありました。
これはドイツにあり、ほとんどすべてのパブに1つか2つありました。米国の4分の1程度の金額を投じると、3つの車輪が回転し、運が良ければ、そのパターンで運が良かったのです。次のプレイで勝利を「2倍にするか、何もしない」か、現在の勝利を獲得するかを選択できます。プレイの目標は、「シリーズ」モードに入るまで、勝利を2倍にすることでした。このモードでは、どんなに小さな勝利でも、多額の支払いが発生します(1人あたりの支出の約10倍)。ゲーム)。
難しいのは、いつ倍増するか、いつ倍増しないかを知ることでした。もちろん、「アウトサイダー」の場合、これは完全にランダムでした。しかし、これらのドイツ製のマシンは、ROMで単純な疑似ランダム化テーブルを使用していることが判明しました。さて、マシンが数ラウンドプレイするのを見ると、この「ランダムテーブルポインター」がどこにあるかを把握し、次の動きを予測することができます。そうすれば、プレイヤーはいつダブルするか、いつパスするかを知ることができ、最終的には「ビッグウィンシリーズ」につながります。
さて、この人が私に近づいたとき、これはすでに一般的なことでした。それらのマシンのROMにアクセスし、テーブルを見つけて、マシンの次の動きの予測に使用するC-64などのコンピューター用のソフトウェアを作成するアンダーグラウンドシーンがありました。
次に、別のアルゴリズムを使用する新しいタイプのマシンが登場しました。事前に計算されたテーブルを使用する代わりに、別のことを実行し、常駐クラッカーは誰もそれを理解できませんでした。それで、FCopyの名声以来、一種の天才として知られている私に近づきました。
だから私はROMを手に入れました。いつものように16KB。それが何をしたか、そしてそれがどのように機能したかについての情報はまったくありません。私は一人でした。コードでさえなじみのないように見えました(私はそれまでに6502と8080しか知りませんでした)。掘り下げて尋ねたところ、6809であることがわかりました(これは、存在する中で最も優れた8ビットCPUであり、x86ファミリの命令の混乱よりもはるかに直線的な680x0 CPU設計に類似しています)。
その時までに、私はすでに68000台のコンピューターを持っていて(私はそのようなマシンを独自の開発者OSで構築および販売している会社「GepardComputer」で働いていました)、Modula-2のプログラミングに夢中になりました。そこで、6809の逆アセンブラを作成しました。これは、サブルーチンやジャンプなどを見つけることでリバースエンジニアリングに役立ちました。ゆっくりと、スロットマシンのプログラムのフロー制御のアイデアが浮かびました。結局、数学的なアルゴリズムのように見えるコードを見つけ、これがランダムに生成されるコードである可能性があることに気づきました。
私はコンピュータサイエンスの正式な教育を受けたことがなかったので、それまでは、mul、add、modを使用した典型的なrandomgenがどのように機能するのかわかりませんでした。しかし、Modula-2の本で言及されているものを見て、それが何であるかを理解したことを覚えています。
これで、このrandomgenを呼び出すコードをすばやく見つけて、どの「イベント」がrandomgenの反復につながるかを知ることができました。つまり、ゲーム中に次の反復とその値を予測する方法を知っていました。
残されたのは、randomgenの現在の位置を把握することでした。私は代数のような抽象的なものが得意ではありませんでした。でも、数学を勉強していてプログラマーでもある人を知っていました。私が彼に電話したとき、彼は問題を解決する方法をすぐに知って、randomgenのシード値を決定することがどれほど簡単であるかについて多くのことを口論しました。私は何も理解していませんでした。そうですね、私は1つのことを理解しました。これを実現するためのコードには多くの時間がかかり、C-64やその他の8ビットコンピューターには数日ではないにしても数時間かかるということです。
したがって、彼が68000でアセンブラルーチンを記述できれば、1000 DM(当時は多額のお金でした)を提供することにしました。彼は長くはかからず、68000でテストできるコードを持っていました。コンピューター。通常は5分から8分かかりましたが、これは許容範囲内でした。だから私はほとんどそこにいました。
それでも、スロットマシンが立っているパブに携帯用の68000コンピューターを運ぶ必要がありました。私のGepardコンピューターは明らかにポータブルタイプではありませんでした。幸いなことに、私がドイツで知っていた他の誰かが、小さな回路基板上に68000台のコンピューター全体を製造しました。I / Oの場合、シリアル通信(RS-232)とパラレルポートしかありませんでした(当時はCentronicsが標準でした)。私はそれを機能させるためにいくつかの9Vブロック電池をそれに接続することができました。それから私は、ゴム製のキーボードと1行の32文字のディスプレイを備えたSharpポケットコンピューターを購入しました。私の端末だったバッテリーで走っています。それは私が68000ボードに接続したRS-232コネクタを持っていました。また、Sharpにはある種の不揮発性メモリがあり、68000ランダムクラッキングソフトウェアをSharpに保存し、オンデマンドで68000コンピュータに転送して、シード値を計算することができました。最後に、狭い感熱紙(レジがレシートを印刷するために使用するサイズ)に印刷する小さなセントロニクスプリンターを持っていました。したがって、68000が結果を取得すると、スロットマシンでの今後のゲームの結果の行がシャープに送信され、シャープはそれらを紙に印刷します。
したがって、これらのスロットマシンのいずれかを空にするには、2人で作業します。プレイを開始し、結果を書き留めます。シード計算に必要な最小ゲーム数が1つあり、1つは駐車した駐車場に行きます。外で、シャープの電源を入れ、結果を入力すると、68000コンピューターが8分間ガタガタ鳴り、今後のゲーム実行のリストが印刷されます。次に、必要なのはこの小さな紙だけでした。それをバディに戻し、マシンを占有したままにして、過去の結果をプリントアウトに合わせ、2分以内に「驚いた」ので史上最高の100を獲得しました。シリーズ。次に、これらの100のゲームをプレイし、実質的にマシンを空にします(100のゲームがプレイされる前にマシンが空だった場合は、補充されるのを待つ権利があり、翌日戻ってくることもあります。
これはラスベガスではなかったので、その方法でマシンから約400 DMしか得られませんでしたが、それは迅速かつ確実なお金であり、エキサイティングでした。一部の居酒屋のオーナーは私たちが浮気をしていると疑っていましたが、当時の法律のために私たちに何の反対もありませんでした。
もちろん、スロット製造会社はすぐにこれに気づき、新しいROMがインストールされるまでそれらの特定のマシンの電源を切り、対抗しようとしました。しかし、最初の数回は、randomgenの数を変更しただけでした。新しいROMを入手するだけで、新しい番号を見つけてソフトウェアに実装するのに数分かかりました。
それで、これはしばらく続きました。その間、私と友人はドイツのいくつかの町のパブを見て、私たちだけが割ることができるそれらの機械を探しました。
しかし、最終的には、機械メーカーはそれを「修正」する方法を学びました。それまで、randomgenは特定の予測可能な時間、たとえばプレイ中に4回、プレーヤーが「ダブルオアナッシング」を押すたびにもう一度進められました。ボタン。
しかし、その後、彼らは最終的にそれを変更して、randomgenが継続的にポーリングされるようにしました。つまり、ボタンを押すのに正確に次のシード値を予測することができなくなりました。
それで終わりです。それでも、この単一のクラックのためだけに逆アセンブラを作成する努力をし、16KBの8ビットCPUコードで主要なルーチンを見つけ、未知のアルゴリズムを理解し、私が理解していないコードを開発するために誰かにお金を払うためにかなりのお金を費やしました、Sharpを端末として使用する「ブラインド」68000 CPUと便利な出力用のプリンターを備えたポータブル高速コンピューターのアイテムを見つけて、実際に自分でマシンを空にすることは、私がこれまでに行った中で最もエキサイティングなことの1つでした。私のプログラミングスキルで。