相关疑难解决方法(0)

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

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

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

例如,这段代码:

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万
查看次数

你如何在iPhone应用程序中保密秘密数据?

假设我需要从iPhone应用程序访问Web服务.此Web服务要求客户​​端对HTTP请求进行数字签名,以证明应用程序"知道"共享密钥; 客户端密钥.请求签名存储在HTTP头中,请求只是通过HTTP(而不是HTTPS)发送.

这个密钥必须始终保密,但需要iPhone应用程序使用.

那么,鉴于您始终被告知永远不会在客户端存储任何敏感内容,您将如何安全地存储此密钥?

普通用户(99%的用户)很乐意使用该应用程序.会有某个人(一个敌人?)想要这个秘密客户密钥,以便通过冒充来对服务或客户密钥所有者造成伤害.这样的人可能越狱他们的手机,访问二进制文件,运行"字符串"或十六进制编辑器并四处寻找.因此,仅将密钥存储在源代码中是一个糟糕的主意.

另一个想法是将密钥存储在代码中而不是字符串文字中,而是存储在从字节文字创建的NSMutableArray中.

可以使用钥匙串,但由于iPhone应用程序永远不必提供密码来存储钥匙串中的东西,我担心有权访问应用程序沙箱的人可以并且能够简单地查看或轻松解码其中的项目.

编辑 - 所以我读到了关于钥匙串的信息:"在iPhone OS中,应用程序总是可以访问自己的钥匙串项目,并且无法访问任何其他应用程序的项目.系统会为钥匙串生成自己的密码,并存储密钥在设备上以任何应用程序都无法访问它."

所以也许这是存放密钥的最佳位置....如果是这样,我如何使用预先输入到应用程序钥匙串中的密钥?那可能吗?否则,如果没有密钥在源代码中,你怎么能在第一次启动时添加密钥?嗯..

编辑 - 提交的错误报告#6584858在http://bugreport.apple.com

谢谢.

security iphone cryptography

37
推荐指数
2
解决办法
7242
查看次数

如何在iOS应用程序中存储关键敏感信息,如secret,key,token,encryptionKey

当我们谈论保护iOS应用程序时,我们经常忘记保护最关键的敏感信息,如secret,key,token,encryptionKey.此信息存储在iOS二进制文件中.因此,您的服务器端安全协议都不会对您有所帮助.

有很多建议我们不应该将这些信息存储在应用程序中,而是存储在服务器中并通过SSL安全的Web服务调用获取.但这对所有应用都不可能.例如,如果我的应用程序根本不需要Web服务.

在iOS应用程序中,我们有以下选项来存储信息.

  1. UserDefault:不适合这种情况
  2. 字符串常量:不适合这种情况.可以通过逆向工程来检索或只使用字符串命令
  3. 安全数据库:存储在安全和加密的数据库中.但又有责任保护数据库用户名和密码.
  4. KeyChain:最适合存储关键信息.但是在安装应用程序之前我们无法保存信息.要存储在钥匙串中,我们首先需要打开应用程序,从某些来源读取并存储在钥匙串中.也不适合我们的情况.
  5. 自定义哈希字符串常量:不直接使用来自服务提供商(mixpanel,paypal)的密钥,令牌,密钥,而是使用来自自定义密钥的该信息的哈希版本.这也不是完美的解决方案.但在黑客攻击期间增加了复杂性

请发送一些很好的解决方案来解决这个问题.

iphone data-security ios app-secret

25
推荐指数
3
解决办法
3304
查看次数