| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 740 人关注过本帖
标题:过来看看!
只看楼主 加入收藏
flysky2011++
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-11-30
收藏
 问题点数:0 回复次数:9 
过来看看!
用户登陆程序
#include<stdio.h>
#define N 10
#define M 12
#include<conio.h>
#include<string.h>
void main()
{
char p[N]={"happy"},n[N],putn[N],realn
={"hello"}; // 真实姓名 hello,密码是happy
int i,count=0,j=0;
printf("请输入你的用户名:\n");
gets(putn);//第一次输入名字
while(strcmp(putn,realn)!=0&&j<2)
{
  printf("请重新输入你的用户名:\n");
  gets(putn);
  j++;
}// 判断输入的名字是否正确,三次错误就结束
if(j=2&&strcmp(putn,realn)!=0)
  printf("对不起,你无法继续输入!\n");
if(strcmp(putn,realn)==0)//判断名字是否输入的正确
{
  while(count<3)
  {
   printf(" 请输入密码,并以回车结束:\n");
   for(i=0;;i++)
   {
    n[i]=getch();
    if(n[i]=='')
    break;
    printf("*");
   } // 输入密码回显*号
   printf("\n");
   n[i]='\0';// 字符串结束符
   if(strcmp(p,n)==0)//判断输入的密码是否正确
   {
    printf("welcome to the place!\n");
    break;//跳出循环
   }
else
  count++;
  }
  if(count>=3)
   printf("对不起,你无法继续输入!\n");

}
}

 
[/size]

[[it] 本帖最后由 flysky2011++ 于 2008-5-28 11:49 编辑 [/it]]
搜索更多相关主题的帖子: hello void include 用户名 count 
2008-05-04 01:52
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
1:52分了,真有劲。。
呵呵。。。我睡觉去。晚安。。

i like linux...
2008-05-04 02:01
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
对于你的代码,你可以试着输入
用户名:hello
密码:
1234567890123456123
然后提示密码错误,再输入
123
看看是什么效果。
(使用minGW编译器的估计都可以看到效果)
如果使用VC的话,在Debug下可以试试看12345678901234567890123
如果是别的编译器,还可以试验1234567890123

这种方法,通称:缓冲区溢出……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-04 02:47
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
上面的,如果都不行,可以这样。在最开始加一句printf("%d,%d",p,n);
如果第一个数字大于第二个,就有戏
然后,用第一个数字减去第二个,比如我这里1244980,1244960,相减是20。所以输入密码的时候,填充20位字符(比如上面的12345678901234567890),这时指针已经指到了p的位置,然后输入欲填充的密码(比如123)
这样就修改了p的内容。下次可以直接输入123,就进去了……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-04 02:50
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
我改了下···应该不会在出现那种情况了
#include<stdio.h>
#define N 10
#define M 12
#include<conio.h>
#include<string.h>
void main()
{
    char p[N]={"happy"},n[N],putn[N],*realn ={"hello"};
    int i,count=0,j=0;
    printf("请输入你的用户名:\n");
    gets(putn);//第一次输入名字
    while(strcmp(putn,realn)!=0&&j<2)
    {
        printf("请重新输入你的用户名:\n");
        gets(putn);
        j++;
    }// 判断输入的名字是否正确,三次错误就结束
    if(j=2&&strcmp(putn,realn)!=0)
         printf("对不起,你无法继续输入!\n");
    if(strcmp(putn,realn)==0)//判断名字是否输入的正确
    {
        while(count<3)
        {
            printf(" 请输入密码,并以回车结束:\n");
            for(i=0;i<N;i++)
            {
                n[i]=getch();
                if(n[i]==13)
                    break;
                printf("*");
            } // 输入密码回显*号              
            n[i]='\0';// 字符串结束符
            if(strcmp(p,n)==0)//判断输入的密码是否正确
            {
                printf("welcome to the place!\n");
                break;//跳出循环
           }
           else
               count++;
        }
        if(count>=3)
            printf("对不起,你无法继续输入!\n");
    }
}
2008-05-04 10:48
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
哦,是吗?看看我测试的结果,密码还是输入的123……
请输入你的用户名:
12345678901234567890123456789012123
请重新输入你的用户名:
hello
 请输入密码,并以回车结束:
***welcome to the place!
请按任意键继续. . .

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-04 16:43
flysky2011++
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-11-30
收藏
得分:0 
不好意思,我输入的时候输错了,应该把realn 改成 realn[N],我要用字符串数组啊!
呵呵!谢谢各位!

天空没有翅膀的痕迹,但我已飞过!
2008-05-28 11:47
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS:没有改正我6#的问题。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-28 11:54
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
嘿嘿~~~~~~~~~~~~~
LZ还不知道怎么去防这种攻击
简单点告诉他多开点空间就没那么容易出现那个问题了

[color=white]
2008-05-28 12:03
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
是不是很浪费……
其实很简单,保证存答案的数组在存密码的数组之前就可以了……啊……其实这个程序仔细构造一个输入甚至可以弄个本地Shell出来……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-28 12:07
快速回复:过来看看!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018641 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved