看代码
会点C语言就能看懂吧,有个验证密码是否正确的函数
要注意的一点是要关闭编译时的GZ选项,VC6以上版本关闭GS编译选项
具体方式:vc6工程-设置-c/c++-工程选项里面去掉GZ
vsC/C++ 代码生成 缓冲区安全检查 否
生成程序输入密码,当输入的为8位但是数值比1234567大时均会通过验证,这是为什么呢?
拿到OD中看下
当输入12345678时,堆栈中如下所示
strcmp之后authenticated的值为0000001,strcpy函数用字符串12345678最后一个NULL给覆盖了这个值,所以会通过验证
当我们输入01234567时,因为比1234567小,所以strcmp会返回-1.补码为0xFFFFFFFF,OD中看下
authenticated为FFFFFF,所以还是不会通过验证的
另外问下为什么我OD中那些像strcpy什么的函数都识别不出来,CALL的都是一个模块内的地址
是不是符号的问题?
下面我们再换种方式
为了方便测试直接在程序内定义一个字符串,这样编译运行后会弹出一个引用的0xbbbbbbbb内存不能 为read错误,原因就不多说了。
我们把这个0xxbbbbbbbb改为输出正确的分支就可以,拖到OD中找到输出正确的地址,是0x00401106,替换掉就OK 。
运行下就会输出正确了,不过程序之后会崩溃掉,因为栈内EBP被覆盖为无效值,使得程序在退出时堆栈无法平衡。
分享到:
相关推荐
5.2.1.栈溢出 142 5.2.2.异步操作与栈顶指针 147 5.2.3.调用约定的不匹配154 5.2.4.回避策略164 5.3.小结 166 第6章.内存破坏之二—堆 167 6.1.堆简介167 6.1.1.前端分配器 168 6.1.2.后端分配器 169 6.2.堆破坏181 ...
overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java 用switch语句评定成绩等级 ...
简单选择排序 思想 每次选择最大的数插入到末尾中 做法 外层for循环控制次数 内层for循环找出最大的值的角标 找出最大角标后,进行交换 优化思路 同时...
实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...
实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...
50 远程缓冲区溢出漏洞利用程序 51 简易漏洞扫描器 52 文件病毒检测程序 53 监测内存泄露与溢出 54 实现traceroute命令 55 实现ping程序功能 56 获取Linux本机IP地址 57 实现扩展内存...
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称...
都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳化,而提高执行速率。另外初学者要具备单片机I/O接口的应用知识,这在于周边应用电路及各种元器件的使用,须配合自己所学的电子学及...
实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...
实例50 远程缓冲区溢出漏洞利用程序 144 实例51 简易漏洞扫描器 146 实例52 文件病毒检测程序 149 实例53 监测内存泄露与溢出 150 实例54 实现traceroute命令 152 实例55 实现ping程序功能 154 实例56 ...
堆和栈的区别 20.ejb的分类及区别 21.你对现在软件业以及国内软件业的看法 22.谈谈java多线程 23.谈谈文件加密技术 24.软件开发生命周期 25.路由协议种类及特点 26.java的awt和swing组件的GUI设计的关键 27....
不过,即使是在这样一个简单的计算机中,您也会有问题,尤其是当您不知道程序的每个部分将需要多少内存时。如果您的空间有限,而内存需求是变化的,那么您需要一些方法来满足这些需求: 确定您是否有足够的内存来...
leetcode双人赛 LeetCode Some LeetCode exercises ...简单栈 2019-06-05 21_合并两个有序链表 与合并两个有序数组一样的,基本思路;居然还可以递归写 2019-05-29 24_两两交换链表中的节点 迭代/递归 201
比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 ...
比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 19、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 ...