导航
  • 主页
  • VC综合技术
  • MFC新技术
  • 互联网技术
  • .NET 技术
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC++技术资源

一个简单程序的安全问题

dangdaituling 2010-07-08 04:46:02
下面是一段程序,用于验证一个PASSWORD是否正确,但是存在一个漏洞,使得攻击者能绕过密码保护逻辑,直接获得对程序的存取权限。哪位大侠帮我看看这个漏洞是什么?十分感谢!
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string>
#include <iostream.h>
#define maxn 12
bool IsPassword0kay(void)
{char Password[maxn];
gets(Password);
if (!strcmp(Password,"goodpass"))
return(true);
else return(false);
}
void main(void)
{
bool PwStatus;
puts("Enter password:");
PwStatus=IsPassword0kay();
if (PwStatus==false)
{
puts("Access denied");
exit(-1);
}
else
puts("Access granted");
}
...全文
84 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zimmerk 2010-07-09
破解这事还是很难避免的,用OD反汇编,多调试几次就能破解。一是加强壳(不过再强的壳也有大牛能脱下来,而且成本高); 二是多设置几个标志,定时检查,发现标志不统一就强行退出程序
还有就是密码要加密后比较,明码太危险了
回复
gwb0516 2010-07-09
PwStatus=IsPassword0kay();
if (PwStatus==false)

反汇编这里就可以了,把PwStatus永远变成 ture . 随便你密码怎么加密怎么对比都白搭。

还有就是密码明文写在程序里对于有工具的人来说是直接能看到的。不过真的验证系统也不会这样做,你做来练习是可以的。

回复
Eleven 2010-07-09
密码不要直接写到程序中。。。
回复
sanguomi 2010-07-09
这种 if 判断的, 人家破解的一个回合就调出来了
就改个指令 if 就不起作用了
回复
dangdaituling 2010-07-09
多谢,就你说的靠谱,其它人说的都不是一个概念,这只是个为了说明安全问题的小口令而已。
回复
swimmingfish2004 2010-07-08
存储密码的散列码。不要直接存储密码。
回复
huliang66 2010-07-08
[Quote=引用 1 楼 xiaoqiang321 的回复:]
密码要加密存储,然后解密比对,明文不安全。
[/Quote]

直接加密比对吧,像MD5加密的你怎么解密比对
回复
xiaoqiang321 2010-07-08
密码要加密存储,然后解密比对,明文不安全。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……