第一百三十九章 栈缓冲区溢出
第一百三十九章栈缓冲区溢出
第二天,学校食堂。
sam三人组又聚在了一起共同进餐。
亚瑟和ma修两人脸上的伤痕如果不注意看的话已经看不出来,浮zhong也完全消失,他们都称赞林鸿的“云南白药”非常神奇。
在他们的桌子上,摆放着三个ti-82型计算qi,他们一边吃饭,一边不时地看看桌上的计算qi,有时候还互相对视而笑,脸上虽然疲倦,但眉目之间却lou出非常兴奋和自豪的神色。
这三个计算qi,正是已经被成功破解了的计算qi!
迅速吃完之后,ma修ma上拿起了自己的那个计算qi,在上面按了几下,调出一个目录,然后运行其中的程序,整个计算qiye晶屏顿时一刷新,只见一个右边一个小小的黑色chang条开始慢慢从右至左开始移动,ma修将计算qi侧了过来,开始津津有味地玩了起来。
昨天,竟然有直接在bbs上就将ti-82计算qi的电路图纸直接发布在上面,所以,德州仪qi邮寄的资料,实际上已经意义不大了。那个人就是德州仪qi公司的工程师,他在上面回答了许多用hu提出的问题,并且说欢迎大家提出改进建议,他会向公司提jiao反馈内容。
由于提前拿到了图纸,破解的事情立刻提上了日常,兴奋之下的三人gen本没有心思睡觉,他们zuo了一个重要决定,那就是一定要赶在返校舞会到来之前,将计算qi破解出来。
他们分工合作,ma修和亚瑟负责设计出一个有意思的ruan件或者游戏,而林鸿则负责计算qi的破解,等破解出来之后,就移植到计算qi上面,给大家来一个ju大的惊喜。
由于有了bbs上那些帖子的基础,林鸿已经对破解计算qi有了非常大的把握,他最终让亚瑟拿出工ju箱,将计算qi给拆了开来,对照电路图仔细研究了计算qi的ying件结构。
最终林鸿确定,并不需要对计算qi进行ying件方面的修改,就完全可以突破德州仪qi公司在固件上设置的限制枷锁。
这是因为在其中一个帖子中,有一个用hu描述了他发现的一个现象,按照他给出的几个按键顺序和方式,就可以让计算qi进入一个特殊的模式——“debug-n”不过那个用hu的这个回复贴很快就被jin接而来的其他回复给淹没了,只有很少人才注意到了他的这个回复。
因为林鸿需要对计算qi进行破解,所以他对立面的所有回复都比较关注。这个用hu的回帖他非常重视,专门用自己的计算qi按照对方描述的顺序,完整地cao2作了一番,然后再将计算qi连接到计算机上面进行了一系列测试,结果惊喜地发现,这个模式似乎是德州仪qi公司的工程师在开发过程中用来调试用的,在这个模式下,用hu对计算qi的cao2作拥有很大的权限。
这绝对是个好消息,原本林鸿还以为需要对ying件进行改动,现在有了进入这个模式的方式,他完全可以直接不通过ying件,仅从ruan件上的漏dong就可以直接对这个计算qi进行破解。
经过一个晚上的奋战,林鸿最终成功了。
他找到了一个计算qi里面的栈缓冲区溢出,从而成功地往里面写入了自己的代码,突破了固件系统对用hucao2作空间权限的限制。
程序在运行过程中,为了临时存取数据的需要,一般都要分pei一些内存空间,通常称这些空间为缓冲区。
这个区域一般是可以进行数据存储和删除cao2作的,保护级别并不严格。而在缓冲区之外,在存在着其他一些系统内he数据区域,存放的数据都是系统中非常重要的数据,一旦那些数据被修改,整个系统就可能发生崩溃,当然,也有可能出现其他意想不到的结果。
所以这些系统内he数据区域是被严格限制和保护的,用hu不能对其进行cao2作。
栈是一zhong特殊的数据结构,特点是先入后出。就像一条死胡同,大家排队进去,满了之后停止进入,然后再一个一个排着队出来,先进去的那个人,最后才出来。这zhong数据结构生活中也有不少例子,例如jiao试卷,先jiao的人一般要到最后才会被老师看到,还有就是以前ktv里面点歌系统,先点歌的人,反而排在最后面唱。
按理说,德州仪qi的工程师在编写程序的时候,是需要对压入栈里面的数据chang度进行检查的,一旦这个栈已经满了,就必须停止对其再进行压入,否则就会产生溢出。
而林鸿找到的这个栈缓冲区,正是那些工程师编写代码的时候不严谨,忘记对这个栈进行chang度检查,于是林鸿一直往其中压入数据,等它满了也不guan,继续压入,于是便发生了栈内存溢出。
溢出便意味着栈缓冲区之外的单元会被改写,而假如这些数据单元里面存储的数据是有用数据的话,就会产生意想不到的后果,最常见的后果就是程序崩溃,通常情况下,这只能算是程序的一个bug,但是当向这些栈中压入经过进行设计的数据,就不仅仅是bug了,而是成为了可供黑客利用的漏dong。
林鸿正是jing1心设计好了一个小程序,然后将其编译成机qi码,先是向他找到的那个栈中压入一些无效的数据,jing1确计算这些数据的chang度,等达到一定chang度之后,再将他设计好的数据给压入进去,让其发生溢出,覆盖缓冲区之外的区域,这样当固件系统运行到这里的时候,就会成功地调用执行他的这个程序…
于是,这个严密的堡垒便被林鸿给成功攻克了。
这个过程,说起来看似简单,实际上却是经过林鸿无数次测试才找到的,为了jing1确计算栈的chang度,他至少反反复复重复了五十遍以上的数据压入过程,而为了能够让自己的这个程序能够顺利接guan固件的运行liu程,其中所花费的时间和jing1力,也是无法三言两语描述得清楚的。
林鸿将其成功破解之后,兴奋之下,忘记了别人不像自己gen本不用睡觉,当时就立刻敲响了亚瑟的房门,幸好他们刚刚睡下不久,听到他这么快就将计算qi给破击出来了,原本已经瞌睡得睁不开眼睛的两人顿时jing1神一振,将睡意抛到了九霄云外。
立刻想要看一下破解之后的成果,可是接下来难题又来了——没有合适的可以运行在上面的ruan件。
之前他们两个讨论了很久,始终无法确定第一个ruan件该编写什么功能。亚瑟比较倾向于zuo一个实用xing的ruan件,例如可以辅助学生在学校的学习,而ma修则倾向于编写一个有意思的游戏。
两个人的意见不能统一,时间就在他们不断地争辩中liu逝,结果什么东西都没zuo出来。
现在机qi已经出来了,却没有合适的ruan件,真是够郁闷的。
这个时候,ma修提出,先编写一个相对比较简单的游戏跑起来再说,得到了林鸿和亚瑟的一致认可。
三人商量了一下,最终决定将俄罗斯方块这个游戏移植到计算qi中。
俄罗斯方块是苏联科学家阿列克谢*帕基特诺夫一个经典游戏,它看似简单但却变化无穷,令人上瘾。1988年在美国上市之后,立刻获得了ju大的商业成功,受到了男女老少所有人的欢迎,成为一款极为经典的大众游戏,没有任何一款游戏能够与其媲美。
亚瑟之前在学习编程的时候,曾经独立开发过这个游戏,有现成的源代码,移植起来的难度并不大。
于是,他们又将阵地转移到了林鸿房间,因为他这台机qi可以模拟z80cpu的运行环境,将亚瑟之前编写的那个源程序进行简单的修改和优化之后,就将其编译成为了一个可在计算qi里面执行的文件,然后通过数据线传输到了计算qi存储空间中。
刚开始的几次运行都出了点问题,但是这是很正常的情况,移植到另外一个平台,如果能一次xing就成功,那就太夸张了,就算是再牛bi1的程序员,有时候也是会犯一些低级错误的,例如变量名称写错,忘记写分号之类的,这是很正常的情况。只要gen据调试信息,有针对xing地进行修改就行了。
编写程序就是这样,调试、运行、再调试…
不断地和各zhong错误和bugzuo这斗争,直到最终顺利通过的那一刻!
在进行过十几次不断地来回调试和传输程序的过程之后,亚瑟的俄罗斯游戏终于顺利地在ti-82上运行了!
ma修第一时间将计算qi抢了过来,然后开始玩了起来。
玩俄罗斯方块游戏,只需要至多五个按键就可以,三个方向键,一个键用来变换,另外一个键则用来加速。而计算qi上有几十个按键,足够了。
ma修在玩了一会儿就发现,由于计算qi显示屏高度太低,很容易就会被撑到ding,最终挂掉。
于是,他提出了改进意见,将显示方式向顺时针方向旋转90度,这样方块下落的路程就可以大大加chang,可以降低难度。
于是,亚瑟又开始对游戏的源程序进行修改…
在整个过程中,林后都没再插手,他只是在旁边观看着亚瑟编写程序。
亚瑟的这个俄罗斯方块程序是用c语言进行编写的,林鸿来美国之后才开始接chu2这门编程语言,用得还不是很熟,今天看到亚瑟不断修改调试,也学到了不少东西。
他发现,亚瑟编写程序的时候,有一些细小的编程习惯值得借鉴和学习,例如在关键的地方给点注释、给代码语句多分行缩进,提高代码的可读xing…等等。
在将近凌晨五点的时候,他们终于将最终版的俄罗斯方块游戏给确定下来。
此刻,除了林鸿,亚瑟和ma修都疲惫不堪,直接倒在床上呼呼大睡。
这天早晨的晨练,亚瑟和ma修都没能去,只有林鸿一人。
第一百三十九章栈缓冲区溢出
第一百三十九章栈缓冲区溢出,到网址
第一百三十九章栈缓冲区溢出
第二天,学校食堂。
sam三人组又聚在了一起共同进餐。
亚瑟和ma修两人脸上的伤痕如果不注意看的话已经看不出来,浮zhong也完全消失,他们都称赞林鸿的“云南白药”非常神奇。
在他们的桌子上,摆放着三个ti-82型计算qi,他们一边吃饭,一边不时地看看桌上的计算qi,有时候还互相对视而笑,脸上虽然疲倦,但眉目之间却lou出非常兴奋和自豪的神色。
这三个计算qi,正是已经被成功破解了的计算qi!
迅速吃完之后,ma修ma上拿起了自己的那个计算qi,在上面按了几下,调出一个目录,然后运行其中的程序,整个计算qiye晶屏顿时一刷新,只见一个右边一个小小的黑色chang条开始慢慢从右至左开始移动,ma修将计算qi侧了过来,开始津津有味地玩了起来。
昨天,竟然有直接在bbs上就将ti-82计算qi的电路图纸直接发布在上面,所以,德州仪qi邮寄的资料,实际上已经意义不大了。那个人就是德州仪qi公司的工程师,他在上面回答了许多用hu提出的问题,并且说欢迎大家提出改进建议,他会向公司提jiao反馈内容。
由于提前拿到了图纸,破解的事情立刻提上了日常,兴奋之下的三人gen本没有心思睡觉,他们zuo了一个重要决定,那就是一定要赶在返校舞会到来之前,将计算qi破解出来。
他们分工合作,ma修和亚瑟负责设计出一个有意思的ruan件或者游戏,而林鸿则负责计算qi的破解,等破解出来之后,就移植到计算qi上面,给大家来一个ju大的惊喜。
由于有了bbs上那些帖子的基础,林鸿已经对破解计算qi有了非常大的把握,他最终让亚瑟拿出工ju箱,将计算qi给拆了开来,对照电路图仔细研究了计算qi的ying件结构。
最终林鸿确定,并不需要对计算qi进行ying件方面的修改,就完全可以突破德州仪qi公司在固件上设置的限制枷锁。
这是因为在其中一个帖子中,有一个用hu描述了他发现的一个现象,按照他给出的几个按键顺序和方式,就可以让计算qi进入一个特殊的模式——“debug-n”不过那个用hu的这个回复贴很快就被jin接而来的其他回复给淹没了,只有很少人才注意到了他的这个回复。
因为林鸿需要对计算qi进行破解,所以他对立面的所有回复都比较关注。这个用hu的回帖他非常重视,专门用自己的计算qi按照对方描述的顺序,完整地cao2作了一番,然后再将计算qi连接到计算机上面进行了一系列测试,结果惊喜地发现,这个模式似乎是德州仪qi公司的工程师在开发过程中用来调试用的,在这个模式下,用hu对计算qi的cao2作拥有很大的权限。
这绝对是个好消息,原本林鸿还以为需要对ying件进行改动,现在有了进入这个模式的方式,他完全可以直接不通过ying件,仅从ruan件上的漏dong就可以直接对这个计算qi进行破解。
经过一个晚上的奋战,林鸿最终成功了。
他找到了一个计算qi里面的栈缓冲区溢出,从而成功地往里面写入了自己的代码,突破了固件系统对用hucao2作空间权限的限制。
程序在运行过程中,为了临时存取数据的需要,一般都要分pei一些内存空间,通常称这些空间为缓冲区。
这个区域一般是可以进行数据存储和删除cao2作的,保护级别并不严格。而在缓冲区之外,在存在着其他一些系统内he数据区域,存放的数据都是系统中非常重要的数据,一旦那些数据被修改,整个系统就可能发生崩溃,当然,也有可能出现其他意想不到的结果。
所以这些系统内he数据区域是被严格限制和保护的,用hu不能对其进行cao2作。
栈是一zhong特殊的数据结构,特点是先入后出。就像一条死胡同,大家排队进去,满了之后停止进入,然后再一个一个排着队出来,先进去的那个人,最后才出来。这zhong数据结构生活中也有不少例子,例如jiao试卷,先jiao的人一般要到最后才会被老师看到,还有就是以前ktv里面点歌系统,先点歌的人,反而排在最后面唱。
按理说,德州仪qi的工程师在编写程序的时候,是需要对压入栈里面的数据chang度进行检查的,一旦这个栈已经满了,就必须停止对其再进行压入,否则就会产生溢出。
而林鸿找到的这个栈缓冲区,正是那些工程师编写代码的时候不严谨,忘记对这个栈进行chang度检查,于是林鸿一直往其中压入数据,等它满了也不guan,继续压入,于是便发生了栈内存溢出。
溢出便意味着栈缓冲区之外的单元会被改写,而假如这些数据单元里面存储的数据是有用数据的话,就会产生意想不到的后果,最常见的后果就是程序崩溃,通常情况下,这只能算是程序的一个bug,但是当向这些栈中压入经过进行设计的数据,就不仅仅是bug了,而是成为了可供黑客利用的漏dong。
林鸿正是jing1心设计好了一个小程序,然后将其编译成机qi码,先是向他找到的那个栈中压入一些无效的数据,jing1确计算这些数据的chang度,等达到一定chang度之后,再将他设计好的数据给压入进去,让其发生溢出,覆盖缓冲区之外的区域,这样当固件系统运行到这里的时候,就会成功地调用执行他的这个程序…
于是,这个严密的堡垒便被林鸿给成功攻克了。
这个过程,说起来看似简单,实际上却是经过林鸿无数次测试才找到的,为了jing1确计算栈的chang度,他至少反反复复重复了五十遍以上的数据压入过程,而为了能够让自己的这个程序能够顺利接guan固件的运行liu程,其中所花费的时间和jing1力,也是无法三言两语描述得清楚的。
林鸿将其成功破解之后,兴奋之下,忘记了别人不像自己gen本不用睡觉,当时就立刻敲响了亚瑟的房门,幸好他们刚刚睡下不久,听到他这么快就将计算qi给破击出来了,原本已经瞌睡得睁不开眼睛的两人顿时jing1神一振,将睡意抛到了九霄云外。
立刻想要看一下破解之后的成果,可是接下来难题又来了——没有合适的可以运行在上面的ruan件。
之前他们两个讨论了很久,始终无法确定第一个ruan件该编写什么功能。亚瑟比较倾向于zuo一个实用xing的ruan件,例如可以辅助学生在学校的学习,而ma修则倾向于编写一个有意思的游戏。
两个人的意见不能统一,时间就在他们不断地争辩中liu逝,结果什么东西都没zuo出来。
现在机qi已经出来了,却没有合适的ruan件,真是够郁闷的。
这个时候,ma修提出,先编写一个相对比较简单的游戏跑起来再说,得到了林鸿和亚瑟的一致认可。
三人商量了一下,最终决定将俄罗斯方块这个游戏移植到计算qi中。
俄罗斯方块是苏联科学家阿列克谢*帕基特诺夫一个经典游戏,它看似简单但却变化无穷,令人上瘾。1988年在美国上市之后,立刻获得了ju大的商业成功,受到了男女老少所有人的欢迎,成为一款极为经典的大众游戏,没有任何一款游戏能够与其媲美。
亚瑟之前在学习编程的时候,曾经独立开发过这个游戏,有现成的源代码,移植起来的难度并不大。
于是,他们又将阵地转移到了林鸿房间,因为他这台机qi可以模拟z80cpu的运行环境,将亚瑟之前编写的那个源程序进行简单的修改和优化之后,就将其编译成为了一个可在计算qi里面执行的文件,然后通过数据线传输到了计算qi存储空间中。
刚开始的几次运行都出了点问题,但是这是很正常的情况,移植到另外一个平台,如果能一次xing就成功,那就太夸张了,就算是再牛bi1的程序员,有时候也是会犯一些低级错误的,例如变量名称写错,忘记写分号之类的,这是很正常的情况。只要gen据调试信息,有针对xing地进行修改就行了。
编写程序就是这样,调试、运行、再调试…
不断地和各zhong错误和bugzuo这斗争,直到最终顺利通过的那一刻!
在进行过十几次不断地来回调试和传输程序的过程之后,亚瑟的俄罗斯游戏终于顺利地在ti-82上运行了!
ma修第一时间将计算qi抢了过来,然后开始玩了起来。
玩俄罗斯方块游戏,只需要至多五个按键就可以,三个方向键,一个键用来变换,另外一个键则用来加速。而计算qi上有几十个按键,足够了。
ma修在玩了一会儿就发现,由于计算qi显示屏高度太低,很容易就会被撑到ding,最终挂掉。
于是,他提出了改进意见,将显示方式向顺时针方向旋转90度,这样方块下落的路程就可以大大加chang,可以降低难度。
于是,亚瑟又开始对游戏的源程序进行修改…
在整个过程中,林后都没再插手,他只是在旁边观看着亚瑟编写程序。
亚瑟的这个俄罗斯方块程序是用c语言进行编写的,林鸿来美国之后才开始接chu2这门编程语言,用得还不是很熟,今天看到亚瑟不断修改调试,也学到了不少东西。
他发现,亚瑟编写程序的时候,有一些细小的编程习惯值得借鉴和学习,例如在关键的地方给点注释、给代码语句多分行缩进,提高代码的可读xing…等等。
在将近凌晨五点的时候,他们终于将最终版的俄罗斯方块游戏给确定下来。
此刻,除了林鸿,亚瑟和ma修都疲惫不堪,直接倒在床上呼呼大睡。
这天早晨的晨练,亚瑟和ma修都没能去,只有林鸿一人。
第一百三十九章栈缓冲区溢出
第一百三十九章栈缓冲区溢出,到网址