第五章 观战
作者:我不是黑客      更新:2017-12-19 12:26      字数:4889

个程序的健壮性并不在于它的代码有多长,关键是的代码紧不紧凑,调用合不合理,这个日本学生的程序代码比较短小,不过他的代码却显得很精简,通过调用,攻防兼备。

相对于日本学生编写的程序代码,欧洲学生编写的程序代码就显得要冗长得多,不过欧洲学生的代码攻击性看起来却更加强大。

欧洲学生的程序是一款比较出名的IMP程序,这个程序的目的就是不断把自己移动到下一个内存单元,然后运行到下一个内存单元执行,通过对内存的加一指令,使得自身在内存中的位置不断移动,它的生存能力比跳转自身的死循环要强,通过程序在内存中的位置移动,即可躲避对手的攻击。

欧洲学生的程序代码还采用“哨兵”概念,即先在代码前面放一个数据,然后

检查该数据是否被改变,如果数据被改变表示其他程序运行到了该处,或者攻击了该地址,自己就可以采取相应的对策,通过移动,躲避攻击或者发动对该地址的攻击。

生存之道,在他的程序里体现得淋漓尽致啊!当然,程序的对抗不仅仅在于生存之道,攻击才是重中之重!

“磁芯大战”的对抗在于自己的程序能够覆盖对手的程序,不过覆盖对手的程序后也并代表你一定能取胜,因为它不一定能导致对手的程序执行中止进程操作,所以,程序中要用轰炸指令,即当你的DAT覆盖了对方的程序时,你调用的程序就要对内存单元地数据区域进行轰炸。

欧洲学生的代码通过跳转,每隔两个内存单元就对其它程序就行循环轰炸,最后再对整个内存以Dat形式进行全面轰炸!

这样的轰炸程序是非常有效的攻击,现在的很多程序都是靠这种手法攻击其它程序,攻击得手后,然后它利用IMP的方法移动自己避免被攻击。

这个欧洲学生的程序功能大概就是这样地情况,在萧云飞看来,这个程序只能算作差强人意。

两个人地程序一对比。日本学生地程序让萧云飞更为期待。

欧洲学生在程序最后一行写上ENDD。然后编译成功。侧过头来看着罗杰斯笑了笑:“教授。我准备好了……”

“终于好了?”罗杰斯教授伸了个懒腰。“我们都等你好久了。”

欧洲学生不好意思地挠了挠头:“当然。和教授你对战。我自然要谨慎一点。”

听到这句话。罗杰斯和周围地学生善意地笑了笑。

罗杰斯教授侧过头看了看盯着计算机屏幕一脸专注地日本学生问道:“你呢?你准备好了吗?”。

日本学生听到罗杰斯问话,站起身又要朝他鞠躬,罗杰斯连忙摆了摆手:“你坐下,不用站起来……”

日本学生显得有点尴尬,刚刚离开椅子的屁股又坐上了椅子:“教授,我准备好了,随时可以进行对抗。”

“好,”罗杰斯拍了拍手,“那我们就准备开始吧。”

两个学生编写地程序通过局域网传输到了罗杰斯教授的计算机上,Mars系统地虚拟机早已经准备就绪,罗杰斯教授将三个程序保存在虚拟系统的存储磁芯。

三个程序加载完成后,系统给每个程序在进程队列中创建了一个位置随机地进程,然后,罗杰斯教授开启了程序“并发”运行。

很快的,三个程序开始在进程列表中混战开来。

通过虚拟机中的追踪功能,三个程序运行情况很直观地显示在了计算机屏幕上。

当然,日本学生的程序是处于死循环跳转,它在内存中地地址是固定的,所以它在进程队列中很直观,因为它是静止不动地。

不过正是由于这个原因,他的程序并没有遭到罗杰斯教授和欧洲学生的程序的攻击,所以,在进程队列中,主要是罗杰斯教授和欧洲学生的程序在激烈厮杀。

既然罗杰斯教授敢摆下“磁芯大战”的擂台,他当然是有所依仗的,他的程序的攻击性已经达到了变态的地步。

罗杰斯教授的程序随机加载内存地址,系统创建的进程位置也是随机的,不过用了不到两分钟时间,这个程序就已经遍历了整个内存地址,好像在巡视自己的领地一般,跳转极为疯狂。

遍历内存地址的目的相当于扫描过程,如果在内存单元中,这个程序一旦发现了其它程序体,它就会主动进攻其它程序。

通过虚拟机的追踪功能,非常直观地看到了这个程序的所有动作,首先罗杰斯教授的程序在遍历内存地址的时候,它在内存单元中就发现了两

身不一样的程序。

因为日本学生的程序没有什么危险,欧洲学生设计的“哨兵”代码触发了罗杰斯教授的攻击指令,所以,它率先对欧洲学生的程序发起了攻击。

为什么罗杰斯教授的程序会首先会攻击欧洲学生的程序呢?

原因就出在欧洲学生程序代码的“哨兵”身上。

哨兵,顾名思义,就是起到站岗、放哨、警戒的作用,罗杰斯教授的程序在遍历内存单元时,当它移动到欧洲学生程序所在的内存地址时,该区段的数据必然会产生变化,“哨兵”代码向程序本体发送警报,提示有敌来袭。

当然,“哨兵”代码只是起到提示、警报作用,它本身并没有攻击作用,这就像打仗的时候,敌军空袭,自己基地里拉响的防空警报。

当然,通过防空警报知道敌人的空军来轰炸基地了,然后可以根据基地自身的防御情况,可以决定是逃跑还是反击。

“哨兵”向程序本体提醒自己所在的内存地址数据发生了变化,根据程序员的设计,它会选择是移动内存单元躲避还是通过数据块轰炸。

很显然,欧洲学生的程序执行的动作是反击!

人家都打到你的地盘来了,你还能无动于衷,坐视不理?看来这个欧洲学生是个反压迫的好战分子。

其实很多时候,从程序代码的编写可以看出一个人的性格,有的程序员会在编写程序的时候留下一些连他自己都不知道小细节。比如有的人喜欢用跳转指令,他会在程序里设计无数跳转指令,跳呀跳呀的,整得像个迷宫似的;有的程序员还有一些怪癣,他甚至在编写程序的时候喜欢将自己的名字或者爱人的名字插入到代码中。

言归正传,罗杰斯教授的程序已经开始轰炸欧洲学生的程序了,人家的程序当然不会坐以待毙,于是它开始发动反击了!

不是有话说得好吗?哪里有压迫,哪里就有反抗嘛。

罗杰斯教授的程序执行的是DAT数据区段大范围轰炸,它可以一次性对多个内存单元进行轰炸,在这样强烈的攻击下,就算欧洲学生的程序虽然可以移动到下一个内存单元,但是在罗杰斯教授的程序大范围的轰炸下,它就显得有点脆弱了。

不过狗急了尚且跳墙,兔子逼急了还咬人呢。

在罗杰斯教授的程序开始对数据区段轰炸的时候,欧洲学生的程序在内存单元连续复制,不过他的程序刚复制完移动到下一个内存单元时,很遗憾的就会被罗杰斯教授的程序轰炸掉,但是这个程序的复制速度非常快,它总是能在被轰炸之前将自己成功复制,然后跳转到下一个内存单元,由此可以见,这个程序的生命力确实顽强。

终于,经过多次连续复制后,欧洲学生的程序终于跳出罗杰斯教授的轰炸数据区段,现在,它开始反攻了。

跳转后,这个程序也执行了轰炸指令,第一次,在A区段的C、5坐标,罗杰斯教授的程序被轰炸了一次;第二次,在B区段的6区段,罗杰斯教授的程序又被轰炸了一次。

A、B~两个区段,罗杰斯的程序都被轰炸过一次,不过令人遗憾,数据轰炸不彻底,罗杰斯教授的程序从这两个坐标中逃了出来。

此后,欧洲学生的程序就再也未能在内存单元中轰炸到罗杰斯教授的程序,想必罗杰斯教授的智能程序启动后,程序的陷阱对它不能起到作用了。

接下来的形势完全呈现一边倒的局面,欧洲学生的程序在内存单元中完全只要躲避的份,根本就没有还手之力。

罗杰斯教授的程序轰炸的数据区段越来越广,模拟的八千个内存单元,它一次性可以轰炸二十个连续的内存单元!

不要小看这二十个连续的内存单元,用于“磁芯大战”的程序,在跳转躲避对手轰炸的时候往往不会超过这二十个连续的内存单元。

所以,尽管欧洲学生的程序复制的速度也快了很多,但是它的IMP程序,目的就是不断把自己移动到下一个内存单元,这些内存单元是连续的,它复制的速度再快,也无法逃过罗杰斯的程序对二十个连续单元的轰炸啊。

看来欧洲学生的程序被吃掉迟早是早晚的事。

终于,罗杰斯教授的程序在A区段的一个内存单元将欧洲学生的程序锁定了,然后,狂风暴雨的轰炸开始了。

所有围观者看着这个情形都摇了摇头,失望的叹了一口气。