【发布时间】:2014-02-04 22:43:36
【问题描述】:
通过导致缓冲区溢出,我们可以覆盖保存标志值0的内存,因此即使密码不正确也会破解密码..
这将如何在内部发生?有人可以详细解释一下..这实际上会在内存中发生吗?
#include<stdio.h>
int main(int argc, char *argv[])
{
int flag = 0;
char passwd[10];
memset(passwd,0,sizeof(passwd));
strcpy(passwd, argv[1]);
if(0 == strcmp("LinuxGeek", passwd))
{
flag = 1;
}
if(flag)
{
printf("\n Password cracked \n");
}
else
{
printf("\n Incorrect passwd \n");
}
return 0;
}
【问题讨论】:
-
不太相关:你不需要在 strcpy() 之前将 memset 设置为零。