一个简单程序的安全问题

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");
}
...全文
111 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zimmerk 2010-07-09
  • 打赏
  • 举报
回复
破解这事还是很难避免的,用OD反汇编,多调试几次就能破解。一是加强壳(不过再强的壳也有大牛能脱下来,而且成本高); 二是多设置几个标志,定时检查,发现标志不统一就强行退出程序
还有就是密码要加密后比较,明码太危险了
嗨客递锅 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加密的你怎么解密比对
飞天赤狐 2010-07-08
  • 打赏
  • 举报
回复
密码要加密存储,然后解密比对,明文不安全。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧