黑客无间道
有了这三个调用指令,这个看起来脆弱得只会送死的程序,变得给人一种神秘莫测的感觉。
正文 第五章 观战
个程序的健壮性并不在于它的代码有多长,关键是的代码紧不紧凑,调用合不合理,这个日本学生的程序代码比较短小,不过他的代码却显得很精简,通过调用,攻防兼备。
相对于日本学生编写的程序代码,欧洲学生编写的程序代码就显得要冗长得多,不过欧洲学生的代码攻击性看起来却更加强大。
欧洲学生的程序是一款比较出名的Imp程序,这个程序的目的就是不断把自己移动到下一个内存单元,然后运行到下一个内存单元执行,通过对内存的加一指令,使得自身在内存中的位置不断移动,它的生存能力比跳转自身的死循环要强,通过程序在内存中的位置移动,即可躲避对手的攻击。
欧洲学生的程序代码还采用”哨兵“概**,即先在代码前面放一个数据,然后
检查该数据是否被改变,如果数据被改变表示其他程序运行到了该处,或攻击了该地址,自己就可以采取相应的对策,通过移动,躲避攻击或动对该地址的攻击。
生存之道,在他的程序里体现得淋漓尽致啊!当然,程序的对抗不仅仅在于生存之道,攻击才是重中之重!
”磁芯大战“的对抗在于自己的程序能够覆盖对手的程序,不过覆盖对手的程序后也并代表你一定能取胜,因为它不一定能导致对手的程序执行中止进程操作,所以,程序中要用轰炸指令,即当你的daT覆盖了对方的程序时,你调用的程序就要对内存单元地数据区域进行轰炸。
欧洲学生的代码通过跳转,每隔两个内存单元就对其它程序就行循环轰炸,最后再对整个内存以dat形式进行全面轰炸!
这样的轰炸程序是非常有效的攻击,现在的很多程序都是靠这种手法攻击其它程序,攻击得手后,然后它利用Imp的方法移动自己避免被攻击。
这个欧洲学生的程序功能大概就是这样地情况,在萧云飞看来,这个程序只能算作差强人意。
两个人地程序一对比。日本学生地程序让萧云飞更为期待。
欧洲学生在程序最后一行写上endd。然后编译成功。侧过头来看着罗杰斯笑了笑:”教授。我准备好了……“
”终于好了?“罗杰斯教授伸了个懒腰。”我们都等你好久了。“
欧洲学生不好意思地挠了挠头:”当然。和教授你对战。我自然要谨慎一点。“
听到这句话。罗杰斯和周围地学生善意地笑了笑。
罗杰斯教授侧过头看了看盯着计算机屏幕一脸专注地日本学生问道:”你呢?你准备好了吗?“。
日本学生听到罗杰斯问话,站起身又要朝他鞠躬,罗杰斯连忙摆了摆手:”你坐下,不用站起来……“
日本学生显得有点尴尬,刚刚离开椅子的**又坐上了椅子:”教授,我准备好了,随时可以进行对抗。“
”好,“罗杰斯拍了拍手,”那我们就准备开始吧。“
两个学生编写地程序通过局域网传输到了罗杰斯教授的计算机上,mars系统地虚拟机早已经准备就绪,罗杰斯教授将三个程序保存在虚拟系统的存储磁芯。
三个程序加载完成后,系统给每个程序在进程队列中创建了一个位置随机地进程,然后,罗杰斯教授开启了程序”并“运行。
很快的,三个程序开始在进程列表中混战开来。
通过虚拟机中的追踪功能,三个程序运行情况很直观地显示在了计算机屏幕上。
当然,日本学生的程序是处于死循环跳转,它在内存中地地址是固定的,所以它在进程队列中很直观,因为它是静止不动地。
不过正是由于这个原因,他的程序并没有遭到罗杰斯教授和欧洲学生的程序的攻击,所以,在进程队列中,主要是罗杰斯教授和欧洲学生的程序在激烈厮杀。
既然罗杰斯教授敢摆下”磁芯大战“的擂台,他当然是有所依仗的,他的程序的攻击性已经达到了变态的地步。
罗杰斯教授的程序随机加载内存地址,系统创建的进程位置也是随机的,不过用了不到两分钟时间,这个程序就已经遍历了整个内存地址,好像在巡视自己的领地一般,跳转极为疯狂。
遍历内存地址的目的相当于扫描过程,如果在内存单元中,这个程序一旦现了其它程序体,它就会主动进攻其它程序。
通过虚拟机的追踪功能,非常直观地看到了这个程序的所有动作,先罗杰斯教授的程序在遍历内存地址的时候,它在内存单元中就现了两
身不一样的程序。
因为日本学生的程序没有什么危险,欧洲学生设计的”哨兵“代码触了罗杰斯教授的攻击指令,所以,它率先对欧洲学生的程序起了攻击。
为什么罗杰斯教授的程序会先会攻击欧洲学生的程序呢?
原因就出在欧洲学生程序代码的”哨兵“身上。
哨兵,顾名思义,就是起到站岗、放哨、警戒的作用,罗杰斯教授的程序在遍历内存单元时,当它移动到欧洲学生程序所在的内存地址时,该区段的数据必然会产生变化,”哨兵“代码向程序本体送警报,提示有敌来袭。
当然,”哨兵“代码只是起到提示、警报作用,它本身并没有攻击作用,这就像打仗的时候,敌军空袭,自己基地里拉响的防空警报。
当然,通过防空警报知道敌人的空军来轰炸基地了,然后可以根据基地自身的防御情况,可以决定是逃跑还是反击。
”哨兵“向程序本体提醒自己所在的内存地址数据生了变化,根据程序员的设计,它会选择是移动内存单元躲避还是通过数据块轰炸。
很显然,欧洲学生的程序执行的动作是反击!
人家都打到你的地盘来了,你还能无动于衷,坐视不理?看来这个欧洲学生是个反压迫的好战分子。
其实很多时候,从程序代码的编写可以看出一个人的性格,有的程序员会在编写程序的时候留下一些连他自己都不知道小细节。比如有的人喜欢用跳转指令,他会在程序里设计无数跳转指令,跳呀跳呀的,整得像个迷宫似的;有的程序员还有一些怪癣,他甚至在编写程序的时候喜欢将自己的名字或爱人的名字**到代码中。
言归正传,罗杰斯教授的程序已经开始轰炸欧洲学生的程序了,人家的程序当然不会坐以待毙,于是它开始动反击了!
不是有话说得好吗?哪里有压迫,哪里就有反抗嘛。
罗杰斯教授的程序执行的是daT数据区段大范围轰炸,它可以一次性对多个内存单元进行轰炸,在这样强烈的攻击下,就算欧洲学生的程序虽然可以移动到下一个内存单元,但是在罗杰斯教授的程序大范围的轰炸下,它就显得有点脆弱了。
不过狗急了尚且跳墙,兔子逼急了还咬人呢。
在罗杰斯教授的程序开始对数据区段轰炸的时候,欧洲学生的程序在内存单元连续复制,不过他的程序刚复制完移动到下一个内存单元时,很遗憾的就会被罗杰斯教授的程序轰炸掉,但是这个程序的复制度非常快,它总是能在被轰炸之前将自己成功复制,然后跳转到下一个内存单元,由此可以见,这个程序的生命力确实顽强。
终于,经过多次连续复制后,欧洲学生的程序终于跳出罗杰斯教授的轰炸数据区段,现在,它开始反攻了。
跳转后,这个程序也执行了轰炸指令,第一次,在a区段的c、5坐标,罗杰斯教授的程序被轰炸了一次;第二次,在B区段的6区段,罗杰斯教授的程序又被轰炸了一次。
、B~两个区段,罗杰斯的程序都被轰炸过一次,不过令人遗憾,数据轰炸不彻底,罗杰斯教授的程序从这两个坐标中逃了出来。
此后,欧洲学生的程序就再也未能在内存单元中轰炸到罗杰斯教授的程序,想必罗杰斯教授的智能程序启动后,程序的陷阱对它不能起到作用了。
接下来的形势完全呈现一边倒的局面,欧洲学生的程序在内存单元中完全只要躲避的份,根本就没有还手之力。
罗杰斯教授的程序轰炸的数据区段越来越广,模拟的八千个内存单元,它一次性可以轰炸二十个连续的内存单元!
不要小看这二十个连续的内存单元,用于”磁芯大战“的程序,在跳转躲避对手轰炸的时候往往不会过这二十个连续的内存单元。
所以,尽管欧洲学生的程序复制的度也快了很多,但是它的Imp程序,目的就是不断把自己移动到下一个内存单元,这些内存单元是连续的,它复制的度再快,也无法逃过罗杰斯的程序对二十个连续单元的轰炸啊。
看来欧洲学生的程序被吃掉迟早是早晚的事。
终于,罗杰斯教授的程序在a区段的一个内存单元将欧洲学生的程序锁定了,然后,狂风暴雨的轰炸开始了。
所有围观看着这个情形都摇了摇头,失望的叹了一口气。
正文 第六章 我来试试
有围观看着这个情形都摇了摇头,失望的叹了一
面对罗杰斯教授的程序暴风骤雨的轰炸,欧洲学生的程序此时还在负隅顽抗,它还在跳。
,如果是人遇到这样的蹂躏恐怕早就拱手认输了,到了这种情况还不自觉认输岂不是犯贱?当然,我们要排除受虐狂的因素。
不过程序不是人,就算它被蹂躏得惨不忍睹了,它也要按照程序员的指令执行下去,直到自己被敌人彻底吃掉为止。
就在所有人都以为欧洲学生的程序马上就会从进程队列中消失的时候,在固定内存地址中一直表现得很温顺的日本学生的程序突然动了!
一直在固定内存中进行死循环跳转的程序突然以迅猛之势开始进行复制了,这个程序的复制情况和其它程序的复制情况有很大区别。
其它用于”磁芯大战“对抗的程序通常都是在程序遭到轰炸的时候对自身进行复制,这样的目的只是为了逃脱对手的轰炸范围,给自己保留反攻的实力,所以,这种复制动作只能进行单一复制,即每次只能复制一个程序本体。
但是日本学生的程序复制的动作是多次裂变复制,即一个程序复制后变成两个,然后两个程序又进行复制变成四个,以此类推,这样的程序裂变,可谓前所未见啊!
原来这个日本学生调用的那段加密代码就是赋予程序裂变的功能!怪不得他要对这段代码进行加密呢,这种程序裂变的代码想必是这个日本学生自己创造的,他当然不愿意将这段裂变代码公布出来。
程序员很多时候对自己的劳动成果是相当吝啬的。
此时罗杰斯教授地程序正在a区段追杀欧洲学生地程序。大有不把对方干掉就誓不罢休地态势。
所以。罗杰斯教授地程序对日本学生地程序裂变根本就无暇顾及。
日本学生地程序获得了充分地展空间。这个看起来没有一点攻击性地程序以燎原之势迅在内存单元中进行疯狂扩张。不到一分钟。B区段地内存单元就被这个程序占满了!
程序裂变并没有停止。它继续在进行着高扩张。
日本学生地脸上露出一丝微笑。所有人都低低惊呼一声。全神贯注地关注着这个程序在内存单元中地动作。
按照这样地度进行裂变。难道他想利用程序抢占内存所有地址。活生生把其他地程序从内存单元中挤出去?!
虽然B区段内存单元的个数比a区段要少,但是它们的数量其实相差并不大,B区段现在所有空闲的内存单元都被日本学生的程序占领,以程序这种裂变的度,眨眼之间,a区段其它所有的空闲内存单元就被它占领了。
这个程序的裂变继续运行,如同洪水猛兽冲击着已经被其他两个程序占领的内存地址。
罗杰斯教授地程序此时在对连续区段进行轰炸,日本学生的程序已经占领了所有空闲的内存单元,欧洲学生的程序此刻终于无处可跳了。
这就像三军对战,后有追兵,前有埋伏,中间又无路可逃,难道还不是死路一条?当然,出现这样的情况,像诸葛孔明应该会想到解决的办法,不过程序毕竟不是人,它当然不会那么聪明。
欧洲学生的程序还是按照它的指令进行跳转,这一跳就正好跳进了正在进行裂变的程序所在的内存地址。
很快地,欧洲学生的程序陷入了人民战争地汪洋大海之中。
除了被罗杰斯教授的程序正在轰炸的那二十个连续内存单元,其它所有的内存单
页面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294