摘要: 好吧,我们看看这次的练习:这次是通过输入buffer,溢出覆盖函数指针fp,使得fp指向void win函数!通过objdump -d,查看到main部分的代码:fp的位置是 esp + 5cbuffer的位置是 esp + 1cwin函数的地址是 0x08048424所以,这个题其实和上一题没啥区别,答案是这样滴:这个是赋值的过程!成功的输出了win函数中的一句话~~~~来自为知笔记(Wiz) 阅读全文
posted @ 2013-07-09 14:09 二哥拉手网 阅读(206) 评论(0) 推荐(0) 编辑
摘要: getenv 函数是获取环境变量的值这个的obj文件的main部分:从这个文件中,可以看出:mov %eax,0x5c(%esp)这句可以看出,variable变量的存储位置是 esp + 92mov $0x0,0x58(%esp)这句可以看出,modified变量存储的位置是 esp + 88lea 0x18(%esp),%esp这句可以看出 ,buffer变量存储的位置是 esp + 26 (因为这个是在调用函数之前的参数压栈,从右往左)所以,我们先定义一个变量 s1 = "1234567890........"(反正有64个字符)YES !来自为知笔记(Wiz) 阅读全文
posted @ 2013-07-09 00:04 二哥拉手网 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 书中举了个例子:在经过编译之后 接下来就要把这两个a.o,b.o文件合并在一起。4.1 空间与地址分配方法有很多种,最简单的就是:按序叠加就是把不同目标文件,一个接一个连在一起。这样的话,如果有上百个目标文件,那么最终的文件中就有上百个.text段,.data段,等等,由于他们每个都要对齐,浪费空间。(在x86中,段的对齐是按页对齐的,每个段都要至少有4KB)。那么可以通过相似段合并的方法解决。就是把不同目标文件的text,data放在一起。为了实现这一方法,链接器一般使用两步链接(Two-pass Linking)的方法。第一步空间与地址分配扫描所有输入文件,获得各个段的长度,属性,位置,建 阅读全文
posted @ 2013-07-07 14:36 二哥拉手网 阅读(202) 评论(0) 推荐(0) 编辑
摘要: Protostar是little endian的。这里面,我们要让修改的modified变量结果正好等于0x61626364。我们用objdump -S stack1 > ~/stack1dump命令来把stack1的信息输入到这个文件中,再查看这个文件,找到main的入口:当调用strcpy之前,栈中的情况大致是这样的:所以buffer输入的是64个字符+dcba就行了~例如:来自为知笔记(Wiz) 阅读全文
posted @ 2013-07-06 12:43 二哥拉手网 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 这个网站上有很多关于攻击的练习,挺有意思:http://exploit-exercises.com每种练习需要下载一个iso文件,在虚拟机中打开操作系统进行练习。先看看protostar部分:地址:http://exploit-exercises.com/protostar/stack0输入64个以上的字符就能使它溢出,用objdump命令可以看到内存中各个变量的位置。来自为知笔记(Wiz) 阅读全文
posted @ 2013-07-06 12:43 二哥拉手网 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 这是关于《程序员的自我修养——装载,链接和库》一书的读书笔记,从第三章开始。第一章和第二章主要介绍操作系统和编译器的内容,不加赘述。目标代码(英语:object code)指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。目标文件(英语:object file)即存放目标代码的计算机文件,它常被称作二进制文件(binaries)。(From WIKI)3.1 目标文件的格式目标文件,例如,windows下的PE文件,Linux下的ELF文件等等。“从广义上看,目标文件和可执行文件的格式几乎一样,我们将两者看成一种文件”。除了可执行文件,静态链接库 阅读全文
posted @ 2013-07-05 18:21 二哥拉手网 阅读(253) 评论(0) 推荐(0) 编辑
摘要: TEST 阅读全文
posted @ 2013-07-01 15:09 二哥拉手网 阅读(104) 评论(0) 推荐(0) 编辑