我知道如何在终端中使用 GCC 和 CC 编译 C 和 C++ 源文件,但是我想知道编译后在这些文件中包含密码是否安全。

例如..我检查用户输入的某个密码,例如 123,但似乎已编译的 C/C++ 程序可能会被反编译。

无论如何,有没有办法编译 C/C++ 源文件,同时保持源完全隐藏。如果没有,任何人都可以提供一个加密输入的小示例,然后检查密码,例如:(SHA1、MD5)

有帮助吗?

解决方案

不建议在代码中保留任何敏感的静态数据。您可以为此使用配置文件。在那里你可以存放任何你喜欢的东西。

但如果您确实想这样做,请首先记住,通过使用调试器进行调查并修改它可以轻松更改代码。仅考虑用户无权访问的程序 更安全 (例如网站)。

大多数(不同站点的)登录密码不是以明文形式存储在数据库中,而是使用 MD5、SHA1、Blowfish 等算法进行加密。

我建议你使用其中之一 算法开放式SSL 图书馆。

我会做的是使用一些 公钥密码算法. 。这可能需要更长的时间才能破解,因为在我看来,在谈论软件保护时没有什么是 100% 确定的。

其他提示

不,你不能安全地包含在源文件中的密码。在可执行文件中的字符串是纯文本格式,任何人只要有一个文本编辑器,可以很容易地看到你的密码。

有一个不那么安全,但会践踏了一些人,是存储加密的字符串来代替。所以,基本上是:

enc = "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4"

bool check() {
    pass = getPassFromUser();
    encpass = myHashingFunction(pass);
    return pass == encpass;
}

这将阻止一些人,但是是不是真的更安全,这是比较琐碎组装黑客与一个已知明文值的另一SHA256编码字符串替换“ENC”字符串中的可执行文件。

即使你使用一个单独的认证服务器,它是不是很难建立一个假的认证服务器和愚弄你的程序连接到这个假的认证服务器。

即使您使用SHA1,如果你在一个正常的方式(写一个函数来检查密码)可执行的任何决定或有见地的黑客给出的访问将能够做到这一点,以生成一个散列它是不是真的那么安全绕过它(用已知的哈希值替换您的散列或只是一个电话更换checkPassword()所在调用返回true。

现在的问题是谁是你想防止?你的小兄弟,黑客,间谍国际工业间谍活动?

使用SHA1中带刚的代码(或配置文件),其中包含的哈希只会防止你的小兄弟? (读取也懒得去尝试和黑客程序,而不是支付股洁具价格的休闲计算机用户)。在这种情况下,使用明文密码或SHA1哈希值差别不大(可能是几个百分点的更多的人不会理会)。

如果你想对其他任何代码的安全,那么你就需要做更多。对安全性的书是一个很好的起点,但要做到这一点的唯一途径是采取地方保护技术传授安全类。这是一个非常专业的领域和滚动您自己的版本很可能适得其反,给你不是真正的保护(使用哈希只是第一步)。

这是,如果将其保存为纯文本并不安全,你可以转储文件,或使用像串的实用程序来查找可执行文本。

您将不得不编码它们以某种方式。

下面是一个代码示例,可以帮助你,使用OpenSSL

#include <openssl/evp.h>

bool SHA256Hash(const char* buf, size_t buflen, char* res, size_t reslen)
{
    if (reslen >= 32)
    {
        EVP_MD_CTX mdctx;

        EVP_MD_CTX_init(&mdctx);

        EVP_DigestInit_ex(&mdctx, EVP_sha256(), NULL);
        EVP_DigestUpdate(&mdctx, buf, buflen);
        EVP_DigestFinal_ex(&mdctx, res, &len);

        EVP_MD_CTX_cleanup(&mdctx);

        return (len == 32);
    }

    return false;
}

我把这个样品从systools库,不得不适应它。所以我不知道它编译没有修改。然而,它应该帮助你。

请注意,以确定是否在您的二进制存储一些密码的哈希值是安全的,我们必须知道你想要什么。

如果你希望它禁止你的程序的某些功能,除非一些特殊的密码发送给,那是没用的:攻击者很可能删除,而不是试图去猜测或反向存储的密码整个密码校验码<。 / p>

尝试找出散列函数和加密方法保护您的密码和他们的存储。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top