以下程序至少有两个经典的bug,请大家注意观察一下。 ------------------------------------------
#include <iostream.h>
int main(int argc, char* argv[])
while (1)
if (strcmp(pwd,pass) == 0)
return 0 首先呢,从main函数开始(废话),
int main(int argc, char* argv[])
/* 当程序运行到这里,关键的内存区如下所示:
什么,你说最后两个CC是什么?pwd[30]不是初始化为0了吗?嗯,问的好,有长进!因为我用的是32位的处理器,这个程序也就是在32位机下编译的,所以VC为了高效,采取了4个字节的对齐方式。
while (1)
/*
if (strcmp(pwd,pass) == 0)
/* } system("pause")
return 0 大家看到这里对溢出应该有体验了吧?溢出漏洞是可以利用的啊,呵呵。不过大家可能会说,使用这个方法要对系统代码很了解才行啊,要不然怎么利用这个漏洞呢?嗯……不过,对于一流的测试人员在黑盒调试下,利用这个漏洞一定不成问题,在他们的调试软件下,你的软件所用资源的情况是一目了然的,有兴趣的朋友可以研究一下Shellcode。
还有一个漏洞,今天暂时先不说,下次我再详细演示。 拜拜! 咳咳!现在可以说说第二个BUG了,我们废话少说,直接切入正题。
由于这个BUG一般都隐藏的较深,所以即使一些经验丰富的软件高手也难免在上面触礁翻船,同志们,要警惕啊! (众人:这小子又在瞎说,根本没有申请内存,那里来的内存泄漏?骗稿费啊?) 这个……这个……我们先看看吧,免得大家说我backer不懂装懂危言耸听。上次要大家准备的游戏修改工具(比如FPE2001),大家都有吧?没有的同志赶快抓紧时间下载。 首先呢,当然是编译我们上次的东西啦,取个名字,就叫 Test.exe 吧。 运行之,随便输入一个密码: backer987654321,报错了是吗,如图:
不要关闭错误提示对话框,不过你一定已经关闭了,那就重新输入吧。:) 现在打开FPE,选择进程 Test.exe,如图:
然后选择“编辑”选项卡
呵呵,看到输入的''''backer987654321''''了吧?看看下面是什么,^_^
你可以把"123456"设定为其他的密码,然后,再用我的方法试试看。 前面说了,需要一个有着类似问题的软件让大家体会一下,呵呵,我运气真好,随便找了几个软件,就找到了一个有问题的,大家先去下载,然后边下载边看,一会我们就要用到这个软件,下载地址:http://www.skycn.com/soft/304.html , 软件名称:极#星*邮#件*群#发* V#1*.#7*5,我事先申明一点,拿这个软件来说明问题纯属研究性质,没有其他的目的,请大家对于这个软件的BUG不要外泄,以免对作者带来不必要的损失。 我记得这里好像有个帖子给大家介绍过内存泄漏的问题,但是有些东西忘记讲了,现在我帮作者补充一下。 内存泄漏应该分为两种情况,首先呢,就是大家熟悉的内存的申请与释放的问题,比如用户new了一块内存空间,那么操作系统就会从该进程的地址空间里划分出 一块内存,给用户使用,而用户应该使用完毕后归还给操作系统,也就是说要delete一把。如果用户丢失了这块内存的指针,那么对不起,我们就可以说这块 内存失控了,因为丢失了那个指针后,用户无法控制那块内存空间,而操作系统也只能在进程关闭的时候才能回收那块内存,所以严格的讲,应该称之内存失控。 还有一种形式的内存泄漏,也就是我们今天看到的,这样的泄漏方式就防不胜防了,主要体现在敏感信息的泄漏,它发生的原因不仅仅是没有释放内存,更多的是没有及时的释放内存或者没有及时抹除敏感信息,所以,这种形式的内存泄漏是个重大隐患,对商业软件来说可能是致命伤,影响程度大大超过了内存失控,称之信息泄漏。 好了,大概也应该把那个软件下载回来了,我们看看吧。 安装,下一步,下一步,下一步,OK。运行之,点“帮助”,点“注册”,呵呵,这个软件注册费挺贵的啊,一个正版的《盟军敢死队 2》也不过60多块而已。 老办法,随便输个注册码"backer987654321",点注册,提示错误。
祭起我们的FPE,和先一样,选进程,内存编辑,查找''''backer987654321'''', 前面找到的几个附近没有正确的SN,一直找到
OK!重新打开看看。
搞定!最后重申一下,尊重作者劳动,不要散布注册方法。 注1:不是非得要用FPE,其他的内存查看工具都可以的,各位仁者见仁,智者见智。 注2:如果觉得不过瘾想再试一次,需要将注册表里的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\SySN项删除掉,即可打开注册菜单。 我的手都敲酸了,好累,睡觉觉去。。。bye (责任编辑:科锐软件教育机构) |