其实我还有一个故事:
在我的 FCopy “成功”故事过去几年,有人问我是否可以破解老虎机的软件。
这是在德国,几乎每个酒吧都有一两个这样的:你会投入一些相当于美国四分之一的钱,然后它会旋转三个轮子,如果你运气好的话,你会然后可以选择在下一场比赛中将您的胜利“加倍或不加倍”,或者获得当前的胜利。该游戏的目标是尝试将您的胜利翻倍,直到您进入“系列”模式,在这种模式下,任何成功的胜利,无论多么小,都会让您获得大笔报酬(大约是您每次花费的 10 倍)游戏)。
困难在于知道什么时候加倍,什么时候不加倍。当然,对于“局外人”来说,这完全是随机的。但事实证明,这些德国制造的机器在其 ROM 中使用简单的伪随机表。现在,如果你观察机器玩了几轮,你就可以弄清楚这个“随机表指针”在哪里,并预测它的下一步动作。这样,球员就会知道何时加倍以及何时传球,最终将他带入“大赢系列”。
现在,当这个人接近我时,这已经是一件很平常的事情了。有一个地下场景可以访问这些机器中的 ROM,找到表格并为 C-64 等计算机创建软件,用于预测机器的下一步动作。
然而,随后出现了一种新型机器,它使用了不同的算法:它没有使用预先计算好的表格,而是做了其他事情,没有一个常驻破解者可以弄清楚这一点。所以我被找上了,自从我的 FCopy 成名以来,我就被认为是一种天才。
所以我得到了ROM。16KB,像往常一样。没有关于它做了什么以及它是如何工作的信息。我独自一人。甚至代码看起来也不熟悉(那时我只知道 6502 和 8080)。经过一番挖掘和询问,我发现它是一个 6809(我发现它是现有的最好的 8 位 CPU,它与 680x0 CPU 设计类似,比 x86 系列的指令混乱更线性)。
到那时,我已经有一台 68000 计算机(我曾在“Gepard Computer”公司工作,该公司制造并销售了这样一台机器,拥有自己的开发人员操作系统等等)并且正在编程 Modula-2。所以我为 6809 编写了一个反汇编程序,它通过查找子程序、跳转等帮助我进行逆向工程。慢慢地,我对老虎机程序的流程控制有了一个概念。最终我发现了一些看起来像数学算法的代码,我突然意识到这可能是随机生成的代码。
由于我从未接受过计算机科学方面的正规教育,直到那时我都不知道使用 mul、add 和 mod 的典型随机数是如何工作的。但我记得我在 Modula-2 的书中看到过一些东西,然后才意识到它是什么。
现在我可以快速找到调用这个 randomgen 的代码,并了解哪些“事件”导致了 randomgen 迭代,这意味着我知道如何在游戏中预测下一次迭代及其值。
剩下的就是找出randomgen的当前位置。我从来不擅长代数等抽象事物。不过,我认识一个学习数学并且也是程序员的人。当我打电话给他时,他很快就知道如何解决这个问题,并且对确定随机数的种子值有多简单提出了很多质疑。我什么都不明白。好吧,我明白一件事:完成此操作的代码将花费大量时间,而 C-64 或任何其他 8 位计算机将需要数小时甚至数天才能完成。
因此,如果他能在 68000 中为我编写汇编程序,我决定给他 1000 DM(当时这对我来说是很多钱)。没用多久,我就有了可以在 68000 上测试的代码计算机。通常需要 5 到 8 分钟,这是可以接受的。所以我几乎到了。
它仍然需要一台便携式 68000 电脑才能被带到老虎机所在的酒吧。我的 Gepard 电脑显然不是便携式的。幸运的是,我在德国认识的其他人在一块小电路板上生产了整整 68000 台计算机。对于 I/O,它只有串行通信 (RS-232) 和一个并行端口(Centronics 是当时的标准)。我可以将一些 9V 块电池连接到它以使其工作。然后我买了一台夏普袖珍电脑,它有一个橡胶键盘和一个单行 32 字符显示屏。依靠电池运行,这是我的终端。它有一个 RS-232 连接器,我连接到 68000 板。夏普也有某种非易失性存储器,这让我可以将 68000 随机破解软件存储在夏普上,按需传输到 68000 计算机,然后计算种子值。最后,我有一台小型 Centronics 打印机,它打印在狭窄的热敏纸上(这是收银机用来打印收据的大小)。因此,一旦 68000 得到结果,它就会将老虎机上即将进行的游戏的一排结果发送给夏普,夏普将它们打印在纸上。
所以,要清空其中一台老虎机,你需要和两个人一起工作:你开始玩,写下它的结果,一个你有种子计算所需的最少游戏数量,一个你会去停着的车在外面,打开夏普,输入结果,68000电脑会响8分钟,然后出来一张打印的即将运行的游戏列表。然后你只需要这张小纸,把它带回给你的伙伴,他一直在忙着机器,将过去的结果与打印输出对齐,不到 2 分钟后,你就“惊讶”地赢得了历史上的 100 分系列。然后你会玩这 100 场比赛,实际上是清空机器(如果在 100 场比赛之前机器是空的,你有权等待它重新填充,甚至可能在第二天回来,
这不是拉斯维加斯,所以你只能从一台机器上得到大约 400 马克,但这是快速而可靠的钱,而且令人兴奋。一些酒吧老板怀疑我们作弊,但由于当时的法律,我们并没有反对我们,甚至当有些人报警时,警察也支持我们)。
当然,老虎机制造公司很快就知道了这一点,并试图抵消,关闭那些特定的机器,直到安装新的 ROM。但前几次他们只改变了随机数的数字。我们只需要拿到新的 ROM,我花了几分钟才找到新的数字并将它们应用到我的软件中。
所以这持续了一段时间,在此期间,我和朋友们浏览了德国几个城镇的酒吧,寻找那些只有我们才能破解的机器。
不过最终,机器制造商学会了如何“修复”它:在此之前,randomgen 仅在某些可预测的时间被推进,例如在游戏过程中大约 4 次,并且每次玩家按下“double or nothing”时再一次按钮。
但后来他们最终改变了它,以便不断地轮询 randomgen,这意味着我们不再能够准确地预测下一个种子值,以便按下按钮。
就这样结束了。尽管如此,还是为了这个单一的破解而努力编写反汇编程序,在 16KB 的 8 位 CPU 代码中找到关键例程,找出未知的算法,投入大量资金付钱给别人开发我不明白的代码,找到一台便携式高速计算机的项目,包括以夏普作为终端的“盲”68000 CPU 和方便输出的打印机,然后自己实际清空机器,这是我做过的最令人兴奋的事情之一用我的编程技巧。