4.2.2 突破密码验证
实验环境要求如表4-2-1所示
表4-2-1 实验环境
prefix = o ns = "urn:schemas-microsoft-com:office:office" />
推荐使用环境
备 注
操作系统
Windows XP sp2
其他Win32操作系统也可进行本实验
编译器
Visual C 6.0
如使用其他编译器需重新调试
编译选项
默认编译选项
VS2003和VS2005中GS编译选项会使栈溢出实验失败
build版本
debug版本
如使用release版本则需要重新调试
介绍说明:如果完全采用实验指导所推荐实验环境将精确地重现指导中所有细节;否则需要根据具体情况重新调试
请您在开始实验前务必先确定实验环境是否符合要求
按照设计思路只有输入了正确密码“1234567”的后才能通过验证运行情况如图4.2.2所示
498)this.style.width=498;" border=0>
图4.2.6 修改邻接变量成功
题外话:严格说来并不是任何8个串都能冲破上述验证由代码中authenticated=strcmp(password,PASSWORD)我们知道authenticated值来源于串比较strcmp返回值按照串序关系当输入串大于“1234567”时返回1这时authenticated在内存中值为0x00000001可以用字串截断符NULL淹没authenticated低位字节而突破验证;当输入串小于“1234567”时(例如“0123”等串)返回-1这时authenticated在内存中值按照双字-1补码存放为0xFFFFFFFF如果这时也输入8个串截断符淹没authenticated低字节后其值变为0xFFFFFF00所以这时是不能冲破验证图4.2.6所示“01234567”输入就属于这种情形如果您感兴趣可以尝试进步调试研究这种情况
最新评论