1.2、黑客技术日趋成熟
Alex和Macro将机器搬到房子二楼的空卧室里。这种刺激的经历让Alex久久不能忘怀,并将它视为生活中最令人兴奋的一件事情。
我们打开机箱,取出ROM(只读存储器),并想知道它用的是什么处理器。我决定将这个日本产的机器改装成为非品牌产品。我猜想那些工程师现在也许工作压力更大了,他们过去有些懒惰和马虎。事实证明了我们的猜测。这台老虎机用了一片6809,与苹果二型或Atari用的一样的6502芯片。这是一个8位芯片,有64K的存储空间。我是一个汇编程序员,因此对这一切都十分熟悉。
Alex选中的是一台已经在市面上出现了10年之久的机器。当赌场想要购买新型机器时,要经过拉斯维加斯博彩委员会的同意。同意之前,委员会必须对机器的程序进行仔细研究,保证游戏机对所有的玩家都是公平的。让一个新款机器设计通过审核将是一个冗长的过程,因此赌场机器的使用年限通常比预期的要长。对黑客人员来说,旧机器就意味着过时的技术,这样,他们攻击赌场系统就不会很复杂,反而会相当容易。
他们从芯片上下载的计算机代码是二进制的机器代码形式。0和1的字符串是计算机指令系统的最基本表示形式。为了将这些代码转换成方便阅读的形式,首先他们得做一项逆向工程(Reverse Engineering)——程序员用来了解机器是如何设计的过程,也就是说他们得将机器语言转换成他们容易操作和解读的形式,以便理解。
Alex需要一个反汇编程序(disassembler)来转换这些代码。他们为了解决这个问题,把目光瞄准了软件——这种行为无异于去图书馆找书,仿照书里所描述的方法去造炸弹。这些家伙开发了自己的编译器,Alex描述他们的工作“不是轻而易举的,但有趣而且相对较为简单。”
当视频扑克游戏机的代码通过新的反汇编软件反汇编之后,这三个程序员就坐下来开始仔细地审读这些相对容易理解的汇编程序。通常,对于那些娴熟的程序员而言,在程序里找到他们所需要的程序段是比较容易的。因为编程的时候,通常要标明所指的“路标”——注释、标记等,这些都会将特定的程序段解释清楚,这些有点像书的篇章结构,有章题、节题,章节里面又有小标题。
通常来讲,当人们编写的程序被编译成所需的机器代码后,这些“路标”都被忽略了。因为计算机或微处理器根本不需要这些注释。所以通过逆向工程所反汇编回来的那些程序根本不包含任何注释。
为了与前文的比喻“路标”保持一致,这些反汇编过来的代码就像一张光秃秃的地图,而上面没有地名,没有高速公路和街道的标志他们在屏幕上仔细查看代码,搜寻所有的蛛丝马迹,希望能得到这些最基本的答案:“这些是以什么逻辑编排的?扑克牌是怎么洗牌的?那张被替换的牌是如何抽出来的?”
这些问题的共同之处让他们将目光锁定到了随机数的生成器上。Alex猜到程序员编写这些机器代码时也许会因偷懒而走捷径,因此他们设计的随机数产生的程序应该有后门可寻。这个猜测后来有被证明是对的,他们找到了后门。