вызывая переполнение буфера, мы можем перезаписать память, где значение флага 0 сохраняется, так что даже неправильный пароль будет взломать код ..Что касается недостатка безопасности в STRCPY
Как это будет происходить внутри? Может ли кто-то объяснить это подробно. Как это будет происходить в памяти практически?
#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;
}
Не так релевантно: вам не нужно memset до нуля перед strcpy(). – moeCake