【问题标题】:How can I hide the salt code in Flash or Java?如何在 Flash 或 Java 中隐藏 salt 代码?
【发布时间】:2011-08-01 11:22:00
【问题描述】:

我需要能够将数据从 Flash 浏览器应用程序传输到 Web 服务器上的 PHP 文件,在保护和验证数据的同时尝试防止未经授权创建消息。 (我想尝试确保消息来自应用程序,而不是用户通过其他方式发送消息)。

在 C++ 应用程序中,我会对数据进行加盐处理,并将数据的哈希值连同它一起发送,然后根据数据验证哈希值以确保完整性和来源。

但是,在 Flash(和 Java)中,可以对应用程序进行反编译,以便查看源代码。因此,如果我使用这种方法,有人可以(相对)轻松地找到盐,然后创建自己的“有效”消息以发送到应用程序之外。

有什么方法可以“隐藏”这个盐代码以帮助保护传输?是的,我知道有代码混淆器,但它们并没有完全隐藏代码,只是添加了另一个层。

或者是否有另一种完全可以用于在 PHP 端传输数据并验证源和内容的方法?

【问题讨论】:

  • C++ 二进制文件也可以被反编译。您不能在二进制文件中“隐藏”某些内容。使用 SSL 进行此类方式并确保服务器证书有效。
  • 我同意上述观点,但即便如此,SSL 也只能保护从客户端到服务器的通信。即使使用 SLL,用户也可以修改客户端创建的流量。
  • SSL 不是 100% 安全的,如果中间有人操纵第一次握手然后他可以查看和操纵发送的任何数据。但时机必须正确。

标签: java flash security hash salt


【解决方案1】:

无论你做什么,执行它的代码都会在客户端中,你所能做的就是混淆。如果您,正如 Tomasz 所说,要让客户端通过服务器进行身份验证,然后接收盐(或来自非对称密钥对的密钥),您仍然需要在客户端中拥有连接到该服务器所需的所有代码。因此,按照设计,无论您做什么,所有要做的事情都必须在客户端中,因此在您的“黑客”计算机上。这只是一个黑客更难理解它的问题。

对于所有类型的客户端来说都是一样的,无论它们是用什么语言编写的。如果 DVD 播放器可以在您的电视上播放解密的 DVD 光盘,那么它必须有在内存中解密它的密钥,您可以找到。这就是为什么没有人做出完美的复制保护:)

编辑: 正如所有其他人所说。现成的混淆器可能是最好的方法,您也可以让客户端先跳过一些额外的环节。

编辑2: 原来我没有正确理解 Tomasz。如果用户自己拥有向服务器进行身份验证以获取哈希的密钥,则确实可以验证消息是从用户发送的,但仍然不是从应用程序发送的。如果这是为了避免作弊,那么黑客可能已经是客户(购买产品或创建帐户)。如果您想要的是对用户进行身份验证,那么这是完全不同的事情,这是很有可能的。 (当然有自己的问题)

【讨论】:

  • 我的意思是让用户在屏幕前进行身份验证,这样应用程序本身就没有密钥。如果钥匙在应用程序中,那么您真的无能为力。
【解决方案2】:

没有真正安全的方法来保护在客户端上运行的程序。 (顺便说一句,C++ 也可以被反编译。)用户总是有可能运行被黑客入侵的客户端,并且任何加密密钥都必须以某种形式存在于代码中。您也许可以让临时黑客更难,但仅此而已。无论您实施什么,都将构成另一种形式的混淆;你不妨看看现成的混淆器。

【讨论】:

    【解决方案3】:

    也许首先与服务器进行身份验证,从服务器获取盐密钥,然后使用它?这样,即使能够反编译应用程序,想要伪造消息的用户也必须进行身份验证。

    除此之外 - 有时您总是需要应用程序可用的密码、哈希、密钥(或加密或验证数据所需的任何内容),并且您可以先从服务器获取它,或者将其嵌入应用程序中,这可以通过反编译来识别。

    编辑

    正如其他人指出的那样,没有 100% 的安全性,一切都可以被黑客入侵,关键是让它不太容易,防止随意的黑客,仅此而已。因此,正如 Jim 所说,现成的混淆器可能是最好的折衷方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多