相关疑难解决方法(0)

在C++中模糊敏感字符串的技术

我需要在我的C++应用程序中存储敏感信息(我想保密的对称加密密钥).简单的方法是这样做:

std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess";

但是,通过该strings过程(或从二进制应用程序中提取字符串的任何其他应用程序)运行应用程序将显示上述字符串.

应使用哪些技术来掩盖这些敏感数据?

编辑:

好的,所以你们所有人都说"你的可执行文件可以进行逆向工程" - 当然!这是我的一个宠儿,所以我要在这里咆哮:

为什么99%(好吧,或许我夸大一点)这个网站上所有与安全相关的问题都会被"没有可能的方法来创建一个完全安全的程序"所回答 - 这不是一个有用的回答!安全性是完美可用性与一端无安全性之间的滑动尺度,完美的安全性,但另一方面没有可用性.

关键在于,您可以根据您要执行的操作以及运行软件的环境来选择滑动比例.我不是在为军事装置编写应用程序,我正在为家用PC编写应用程序.我需要使用预先知道的加密密钥在不受信任的网络上加密数据.在这些情况下,"通过默默无闻的安全"可能已经足够了!当然,有足够时间,精力和技能的人可以对二进制文件进行逆向工程并找到密码,但猜猜是什么?我不在乎:

实施顶级安全系统所花费的时间比破解版本的销售损失更为昂贵(不是说我实际上是卖这个,但你明白了我的意思).在新程序员的编程中,这个蓝天"让我们尽可能做到绝对最好的方式"的趋势至少可以说是愚蠢的.

感谢您抽出宝贵时间回答这个问题 - 他们最有帮助.不幸的是,我只能接受一个答案,但我已经投了所有有用的答案.

c++ security obfuscation defensive-programming

85
推荐指数
5
解决办法
3万
查看次数

如何用二进制代码隐藏字符串?

有时,从二进制(可执行)文件中隐藏字符串很有用.例如,从二进制文件中隐藏加密密钥是有意义的.

当我说"隐藏"时,我的意思是在编译的二进制文件中更难找到字符串.

例如,这段代码:

const char* encryptionKey = "My strong encryption key";
// Using the key
Run Code Online (Sandbox Code Playgroud)

编译后生成一个可执行文件,其数据部分中包含以下内容:

4D 79 20 73 74 72 6F 6E-67 20 65 6E 63 72 79 70   |My strong encryp|
74 69 6F 6E 20 6B 65 79                           |tion key        |
Run Code Online (Sandbox Code Playgroud)

您可以看到我们的秘密字符串可以轻松找到和/或修改.

我可以隐藏字符串......

char encryptionKey[30];
int n = 0;
encryptionKey[n++] = 'M';
encryptionKey[n++] = 'y';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 's';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = …
Run Code Online (Sandbox Code Playgroud)

c++ obfuscation

64
推荐指数
8
解决办法
5万
查看次数

逻辑私有 VS 物理私有

我有一个简单的程序:

class Element
{
public:
    Element(void) { m_iVal = 56789;}
    ~Element(void) {};
private :
    int m_iVal;
};  
Run Code Online (Sandbox Code Playgroud)

变量m_iVal是私有的,这从概念的角度(继承,...)造成了限制。
然而,虽然是私有的,但仍然可以访问它的内容。

在此处输入图片说明

有没有办法禁止对变量(或堆区域)的物理访问,以便对该私有区域的任何访问都将导致内存访问冲突。

c++ encapsulation private

0
推荐指数
1
解决办法
66
查看次数