是否可以隐藏在C++代码中定义的密码

Sil*_*rge 10 c++ assembly information-hiding

...这样浏览反汇编不会立即暴露密码(声明为静态变量).举个例子,想象一个附有zip文件的程序,它必须为资产打开,但不容易被窥探.

我知道完全隐藏或保护拉链是不可能的,但我很好奇有什么方法可以至少阻止一个随意的狙击手.

谢谢!

Mic*_*urr 24

如果您的程序是Windows程序,只需使用"此程序无法在DOS模式下运行".作为密码.几乎每个Windows可执行文件都包含该字符串.

我只是半开玩笑,因为它可能几乎与使用程序中其他地方的密钥对密码进行异或修复一样安全,并且几乎没有任何令人头疼的问题.


nin*_*alj 12

简而言之,不,任何破解者只会在打开zip文件的函数上设置断点,并从RAM获取密码.


Mar*_*ett 11

不,但有些事情可以让你变得更难.

将密码存储为一系列数字,对其进行一些计算以生成实际密码,将部分密码存储在图标等资源中.


ilu*_*tar 6

而不是实际密码存储XOR加密版本的密码作为静态变量.当您需要使用它时,您只需应用简单的XOR解密来检索实际密码.

http://en.wikipedia.org/wiki/XOR_cipher

  • +1 ......推迟'休闲狙击手',这是你可以得到的最好的,而不是花费更多的时间而不是它的价值.正如您所说,完全隐藏用户在其计算机上的信息是完全不可能的(除非程序缺少加密密钥). (2认同)

Pau*_*bel 5

一种解决方案是将静态密码与另一个常量或甚至另一个字符串进行xor.这会将密码传播到两者之间,但需要将许多部分组合起来才能恢复密码.已编译二进制文件上的字符串不显示pw字符串.

#include <stdio.h>

char pw[8] = {124, 109, 127, 127, 123, 99, 126, 104};

int main(int argc, char** argv) {
  for (int i = 0; i < 8; i++) {
    pw[i] = pw[i] ^ 12;
  }
  printf("%s\n", pw);  // => 'password'
}
Run Code Online (Sandbox Code Playgroud)

有许多方法可以保护数据免受随意检查,确定的对手完全是另一回事(只要问那些做DRM的人).