相关疑难解决方法(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万
查看次数

使用constexpr编译时间字符串加密

我想要一个编译时字符串加密,这样我就可以在我的代码中编写:

const auto encryptedInvalidLicense = ENCRYPT("Invalid license");
std::cout << encryptedInvalidLicense.decrypt() << std::endl; // outputs "Invalid license"
Run Code Online (Sandbox Code Playgroud)

并且字符串"Invalid license"不会出现在二进制文件中.预构建可能是答案,但我正在寻找一个纯c ++ constexpr解决方案来解决这个问题,它将得到VS2015的支持.

有什么建议?


  1. 我已经研究过编译时字符串加密,它没有为问题提供constexpr解决方案.

  2. 我还研究了http://www.unknowncheats.me/forum/c-and-c/113715-compile-time-string-encryption.html.虽然它是一个constexpr解决方案,但VS2015仍然将字符串纯文本添加到二进制文件中.

c++ reverse-engineering constexpr c++11 c++14

15
推荐指数
1
解决办法
5835
查看次数

编译时字符串加密

我不希望逆向工程师在我的应用程序中读取硬编码字符串的纯文本.对此的简单解决方案是使用简单的XOR加密.问题是我需要一个转换器,在我的应用程序中它将如下所示:

//Before (unsecure)
char * cString = "Helllo Stackoverflow!";
//After (secure)
char * cString = XStr( 0x06, 0x15, 0x9D, 0xD5FBF3CC, 0xCDCD83F7, 0xD1C7C4C3, 0xC6DCCEDE, 0xCBC2C0C7, 0x90000000 ).c();
Run Code Online (Sandbox Code Playgroud)

是否有可能通过使用某些结构来维护干净的代码

//Before (unsecure)
char * cString = "Helllo Stackoverflow!";
//After (secure)
char * cString = CRYPT("Helllo Stackoverflow!");
Run Code Online (Sandbox Code Playgroud)

它也适用于很长的字符串(1000个字符?:-)).先感谢您

c++ encryption macros reverse-engineering

13
推荐指数
4
解决办法
1万
查看次数

C++:如何在编译时加密字符串?

我想在我的.exe中隐藏一些字符串,这样人们就不能简单地打开.exe并查看那里的所有字符串.我不关心加密方法的强度,所以我可能会使用XOR等.

我怎么能在编译时这样做?这样我的字符串将不会存储在.exe中,但加密版本会存储.然后,我每次只使用我的解密功能在屏幕上显示这些字符串.

c++ windows visual-studio-2008

10
推荐指数
3
解决办法
7710
查看次数