当前位置:文档之家› 李凤华计算机安全与保密技术第十章

李凤华计算机安全与保密技术第十章


}
hello.c
李凤华计算机安全与保密技术第十章
运行情况
$ ./hello computer Hello computer $ ./hello aaaa………………………………………………………….a Hello aaaa……………………………………………………………….a Segmentation fault (core dumped)
0xNNNNNNNN 0x???????? ………... ………...
Our-Codes
SayHello栈帧
李凤华计算机安全与保密技术第十章
局部变量区问题
ESP retip 0xNNNNNNNN
0xNNNNNNNN ………..NNNN 0xNNNNNNNN 0xNNNNNNNN 0xNNNNNNNN 0xNNNNNNNN 0xNNNNNNNN
Why????
hello.c
李凤华计算机安全与保密技术第十章
检查一下程序
#include <stdio.h> #include <string.h>
void SayHello(char* name) {
char tmpName[80];
strcpy(tmpName, name);
int main(int argc, char** argv) {
强而有效的不可破解的加密技术随处均可得 到(尽管有各种各样的进出口限制)
不攻击加密技术,攻击其应用的底层基础设施 不攻击加密技术,攻击其实现 不攻击加密技术,而从用户方面入手
李凤华计算机安全与保密技术第十章
Why Security is Harder than it Looks
p 所有软件都是有错的 p 通常情况下99.99%无错的程序很少会出问题
SayHello栈帧
李凤华计算机安全与保密技术第十章
如何选择这些数据?
p 几个问题:
ØSayHello函数局部变量区大小? ØNNNNNNNN如何确定? ØOur codes该怎样写 Ø输入缓冲区不能包含0
李凤华计算机安全与保密技术第十章
局部变量区问题
ESP retip 0xNNNNNNNN
??????????????????? ………..???? 0x????????
main-fp retip name
main栈帧
main中return 0;
…...
李凤华计算机安全与保密技术第十章
准备退出SayHello的栈(情况2)
./hello aaaaaa……………………………….a
ESP retip
aaaaaaaaaaaaaaaaaa ……aaaaaaaa 0x61616161 0x61616161 0x61616161 main栈帧
SayHello栈帧 ???????
…...
李凤华计算机安全与保密技术第十章
如果精心选择数据……...
ESP retip 0xNNNNNNNN
??????????????????? ………..???? 0x????????
0xNNNNNNNN 0x???????? ………... ………...
Our-Codes
李凤华计算机安全与保 密技术第十章
2020/11/18
李凤华计算机安全与保密技术第十章
本讲内容
10.1 现实中的一些安全问题 10.2 从几个程序谈起 10.3 程序失败的其它例子
李凤华计算机安全与保密技术第十章
10.1 现实中的一些安全问题
我的 口令就是我的用户名后加上123 我的口令是Q47pY!3,每隔90天就更换一次
if (argc != 2) { printf("Usage: hello
<name>.\n"); return 1;
}
/* Do some checks for tmpName. */
SayHello(argv[1]); return 0;
printf("Hello %s\n", tmpName); }
10.2.1 第一个程序
#include <stdio.h> #include <string.h>
void SayHello(char* name) {
char tmpName[80];
strcpy(tmpName, name);
int main(int argc, char** argv) {
Байду номын сангаас
}
hello.c
李凤华计算机安全与保密技术第十章
进一步思考……
发生了什么事?
李凤华计算机安全与保密技术第十章
几个要点
p Linux及其它几乎所有Intel x86系统、Solaris, etc p 分页式存储管理 p 平面内存结构,4GB或更大逻辑地址空间 p 栈从下往上生长 p C语言不进行边界检查
Our-Codes
SayHello栈帧
李凤华计算机安全与保密技术第十章
p 同安全相关的99.99%无错的程序可以确信会被人利 用那0.01%的错误
p 0.01%安全问题等于100%的失败
李凤华计算机安全与保密技术第十章
10.2 从几个程序谈起
程序运行平台
➢Redhat Linux 6.1 ➢Kernel 2.2.13 ➢egcs-2.91.66
李凤华计算机安全与保密技术第十章
李凤华计算机安全与保密技术第十章
进入SayHello后的栈
ESP
tmpName[80]
SayHello栈帧
main-fp retip name
main栈帧
…...
李凤华计算机安全与保密技术第十章
准备退出SayHello的栈(情况1)
./hello computer
ESP computer. ………….. SayHello栈帧
if (argc != 2) { printf("Usage: hello
<name>.\n"); return 1;
}
/* Do some checks for tmpName. */
SayHello(argv[1]); return 0;
printf("Hello %s\n", tmpName); }
李凤华计算机安全与保密技术第十章
进程内存布局
代码区 0x00000000
数据区

字 符









生 长
栈段
0xFFFFFFFF
李凤华计算机安全与保密技术第十章
调用SayHello之前的栈
ESP
main函数局部变量区
main栈帧
lastfp retip argc argv env …...
相关主题